-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からリンクを解除する必要があるファイルの 1 つです。export

何が起きてる?

4

1 に答える 1

3

ファイルのリンクを解除するには、絶対パスを指定する必要があります。あなたのループで$filecountries_rjRp9.png、すべてのcronジョブが存在するディレクトリである作業ディレクトリからリンクを解除しようとしています。

ファイルへの絶対パスは正しいと述べていますが、ループに入ると絶対パスを使用するのを忘れました。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 に答える