-1

我正在尝试使用这段简单的代码来遍历“导出”文件夹并删除超过 24 小时的文件:

if ($handle = opendir("/home/username/public_html/en/graphs/export")) {

    while (false !== ($file = readdir($handle))) { 
        $filelastmodified = filemtime($file);

        if((time() - $filelastmodified) > 24*3600)
        {
           unlink($file);
        }

    }

    closedir($handle); 
}

一些注意事项:

1)我确实意识到有类似的问题,但那里建议的解决方案似乎对我不起作用。2)目录的绝对路径是正确的(经过测试) 3)目录有777权限。其中的文件没有,但我用一些具有 777 权限的文件进行了测试,并且发生了同样的错误。因此,这似乎不是权限问题。4) 包含此代码的文件位于不同的目录中(这是一个 cron 作业,我喜欢将它们放在一个单独的目录中)

这是出现的错误(对于目录中的每个文件):

Warning: filemtime() [function.filemtime]: stat failed for countries_rjRp9.png in /home/username/public_html/path-to-crons/crons/exports.php on line 12

Warning: unlink(countries_rjRp9.png) [function.unlink]: No such file or directory in /home/username/public_html/path-to-crons/crons/exports.php on line 16

在此示例中,countries_rjRp9.png是应该从export目录中取消链接的文件之一。

这里发生了什么?

4

1 回答 1

3

您应该指定取消链接文件的完整路径。在您的循环中,$file将是countries_rjRp9.png并且您尝试将其与工作目录(即所有 cronjobs 所在的目录)取消链接。

您声明文件的绝对路径是正确的,但是一旦进入循环,您就忘记了使用绝对路径。您只在opendir()通话中使用绝对路径,没有其他地方。

尝试做这样的事情:

if ($handle = opendir("/home/username/public_html/en/graphs/export")) {

    while (false !== ($file = readdir($handle))) {
        // Take the filename and add its full path
        $file = "/home/username/public_html/en/graphs/export/" . $file;
        $filelastmodified = filemtime($file);

        if((time() - $filelastmodified) > 24*3600)
        {
           unlink($file);
        }

    }

    closedir($handle); 
}
于 2013-06-09T17:17:59.720 回答