文件时间“警告统计失败”

2022-08-30 13:09:34

我已经阅读了它很多关于它的问题和答案,但我仍然无法解决我的问题......

我正在尝试创建一个函数,该函数删除一天前创建的所有扩展名为“xml”或“xsl”的文件。但是我在我拥有的每个文件上都收到此警告:

警告:filemtime() [function.filemtime]:在第 44 行的 /home/u1888867248/public_html/ampc/library.php post_1003463425.xml的统计信息失败

此目录的所有文件都具有相同的结构名称“post_ + randomNum + .xml”(例如:post_1003463425.xml 或 post_1456463425.xsl)。所以我认为这不是一个编码问题(就像我在其他问题中看到的那样)。

我的函数的代码是这样的:

 function deleteOldFiles(){
    if ($handle = opendir('./xml')) {
        while (false !== ($file = readdir($handle))) { 

            if(preg_match("/^.*\.(xml|xsl)$/i", $file)){

                $filelastmodified = filemtime($file);

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

感谢您的帮助:)


答案 1

我认为问题是文件的真实路径。例如,您的脚本正在处理'./',您的文件在目录'./xml'内。因此,最好在获取 filemtime 或取消链接之前检查该文件是否存在:

  function deleteOldFiles(){
    if ($handle = opendir('./xml')) {
        while (false !== ($file = readdir($handle))) { 

            if(preg_match("/^.*\.(xml|xsl)$/i", $file)){
              $fpath = 'xml/'.$file;
              if (file_exists($fpath)) {
                $filelastmodified = filemtime($fpath);

                if ( (time() - $filelastmodified ) > 24*3600){
                    unlink($fpath);
                }
              }
            }
        }
        closedir($handle); 
    }
  }

答案 2

对我来说,所涉及的文件名附加了一个查询字符串,这个函数不喜欢。

$path = 'path/to/my/file.js?v=2'

解决方案是先把它砍掉:

$path = preg_replace('/\?v=[\d]+$/', '', $path);
$fileTime = filemtime($path);

推荐