IF语句意外的'{'

时间:2013-06-24 22:13:28

标签: php

这是我的代码,用于将目录中的所有文件移动到1小时或更长的另一个目录。

<?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

3 个答案:

答案 0 :(得分: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 (...) {
   }
}

答案 1 :(得分:1)

除了你错过了date()函数调用的关闭问题之外,你还应该考虑更好地格式化你的代码,这太难以观察并发现错误(你觉得它在你的皮肤上)。 写一个函数为你完成这项工作:

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:猜测你应该重命名这个功能很清楚:)

答案 2 :(得分:0)

你错过了一个结束括号。

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

变为

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

这是未经测试的