删除旧文件的功能会引发“stat failed”错误

时间:2013-06-09 17:14:21

标签: php

我正在尝试使用这一段简单的代码来遍历“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目录取消链接的文件之一。

这里发生了什么?

1 个答案:

答案 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); 
}