-3

这是我将目录中的所有文件移动到 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
4

3 回答 3

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 (...) {
   }
}
于 2013-06-24T22:15:41.863 回答
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;
}

LE:猜猜很清楚你应该重命名函数:)

于 2013-06-24T22:20:29.863 回答
0

您缺少右括号。

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

变成

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

这是未经测试的

于 2013-06-24T22:18:01.670 回答