我正在尝试使用这一段简单的代码来遍历“export”文件夹并删除超过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
目录取消链接的文件之一。
这里发生了什么?
答案 0 :(得分: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);
}