2013-06-24 110 views
-2

这是我的代码将目录中的所有文件移动到另一个1小时或更长的目录。意外的'{'与IF语句

<?php 
$srcDir = 'code'; 
$destDir = 'code/old'; 

if (file_exists($destDir)) { 
    if (is_dir($destDir)) { 
    if (is_writable($destDir)) { 
     if ($handle = opendir($srcDir)) { 
     while (false !== ($file = readdir($handle))) { 
      if (is_file($srcDir . '/' . $file)) { 
       if(date("U",filectime($srcDir . '/' . $file) >= time() - 3600) { 
       rename($srcDir . '/' . $file, $destDir . '/' . $file); 
       } 

      } 
     } 
     closedir($handle); 
     } else { 
     echo "$srcDir could not be opened.\n"; 
     } 
    } else { 
     echo "$destDir is not writable!\n"; 
    } 
    } else { 
    echo "$destDir is not a directory!\n"; 
    } 
} else { 
    echo "$destDir does not exist\n"; 
} 
?> 

和我收到此错误:

Parse error: syntax error, unexpected '{' in /home/tcity/public_html/myDir/movefiles.php on line 11 
+0

你的文件,这行是行号#11? – Fallen

+1

哇。我没有话语​​。 –

+0

通常缺少括号。然而,看看你自己。 – mario

回答

5

你缺少一个右括号这里:

if(date("U",filectime($srcDir . '/' . $file) >= time() - 3600) { 
              ^

你还需要学会使用&&运算符逻辑组合声明。尽管,似乎你想提供反馈。过度的嵌套难以阅读。如果你想单独进行所有这些测试,那么这个怎么样:

if (!file_exists($destDir)) 
{ 
    echo "$destDir does not exist\n"; 
} 
elseif (!is_dir($destDir)) 
{ 
    echo "$destDir is not a directory!\n"; 
} 
elseif (!is_writable($destDir)) 
{ 
    echo "$destDir is not writable!\n"; 
} 
elseif (...) 
{ 

} 
else 
{ 
    while (...) { 
    } 
} 
+0

愚蠢的我..我已经算过括号,但数了他们错了..我想我是困难,因为它上午3:30反正..谢谢,但有一个问题。脚本正在移动所有的文件,甚至是那些在一分钟前创建的文件..我在哪里犯错? –

+0

您正在减去一小时的时间,因此它会移动一小时前创建的所有文件。匹配括号的一个好方法就是这样计算:从0开始,当看到'(',当看到'''时减1“)时加1。如果你最终没有回到0,你会错过一些东西(负数=缺少'(',正数=缺少'''')。 – paddy

0

你错过了一个右括号。

if(date("U",filectime($srcDir . '/' . $file) >= time() - 3600) { 

成为

if(date("U",filectime($srcDir . '/' . $file)) >= time() - 3600) { 

这是未经测试

1

旁边的事实,你已经错过了date()函数调用结束paranthesis,你也应该考虑格式化你的代码更好,这只是太难看,并发现一个错误(你觉得它在你的皮肤上)。 写一个函数来为你做的工作:

function pleaseDontMakeFunOfTheOtherDevelopers($srcDir, $destDir) { 
    if (!is_dir($srcDir)) { 
     return "$destDir does not exist\n"; 
    } 
    if (is_writable($destDir)) { 
     return "$destDir is not writable!\n"; 
    } 

    if (!($handle = opendir($srcDir))) { 
     return "$srcDir could not be opened.\n"; 
    } 

    while (false !== ($file = readdir($handle))) { 
     if (is_file($srcDir . '/' . $file) && date("U", filectime($srcDir . '/' . $file)) >= time() - 3600) { 
     rename($srcDir . '/' . $file, $destDir . '/' . $file); 
     } 
    } 
    closedir($handle); 

    return true; 
} 

L.E:想这是很清楚,你应该重命名功能:)

+0

你甚至可以再走一步:'if(!is_dir($ srcDir))return“$ destDir does not exist \ n”;' – Ronnie