35

すでに多くの質問と回答を読んでいますが、まだ問題を解決できません...

1日前に作成された「xml」または「xsl」拡張子のファイルをすべて削除する関数を作成しようとしています。しかし、私が持っている各ファイルでこの警告が表示されます:

警告: filemtime() [function.filemtime]: 44 行目の /home/u188867248/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); 
    }
}

ご協力いただきありがとうございます :)

4

4 に答える 4

43

問題はファイルの実際のパスだと思います。たとえば、スクリプトが './' で動作している場合、ファイルはディレクトリ './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); 
    }
  }
于 2012-11-14T19:59:27.953 に答える