1

以下のコードは、「 Images 」というフォルダー内のすべてのファイルを削除します。すべてが正常に機能するという不満はありませんが、代わりに 1 時間前または 1 時間以上前に作成されたファイルのみを削除する方法はありますか? 方法を教えてください。私はやってみることで学ぼうとしています。以下の同じコードを再利用して、理解を深め、世界中のユーザーの PHP プログラマーを支援してください。

<?php
define('PATH', 'Images/');

function destroy($dir) {
    $mydir = opendir($dir);
    while(false !== ($file = readdir($mydir))) {
        if($file != "." && $file != "..") {
            chmod($dir.$file, 0777);
            if(is_dir($dir.$file)) {
                chdir('.');
                destroy($dir.$file.'/');
                rmdir($dir.$file) or DIE("couldn't delete $dir$file<br />");
            }
            else
                unlink($dir.$file) or DIE("couldn't delete $dir$file<br />");
        }
    }
    closedir($mydir);
}
destroy(PATH);
echo 'all done.';
4

3 に答える 3

3

これにはphpを使用しませんが、単純なシェルスクリプトをcronジョブと組み合わせて使用​​します(少なくともLinuxでは)。

Linux を使用している場合、スクリプトは次のようになります。

#! /bin/sh
find /path/to/Images/ -mmin +60 -exec rm -f {} \;     // modification date, not creation date...

そして、cron を使用して、1 時間ごとに自動的に実行します。

完了すると、cron エントリは次のようになります。

0 * * * * /path/to/shell/script.sh    // run script every whole hour

質問に対する直接の回答ではありませんが、重複した質問のすべての回答がphpにも焦点を当てているため、コメントとおそらく可能な解決策には長すぎます...

于 2012-07-07T14:05:36.087 に答える
3

filemtime()またはを使用できますfilectime()また、特定のファイルrmdir()を削除したいので使えません。

あなたがしなければならないこと

  1. date("U",filectime($file)- Unix エポック時間でファイルが最後に変更された時刻を返します。

  2. unlink($file)- 指定されたファイルを削除します。の代わりに使用する必要がありrmdir()ます。

  3. ifand while/forステートメントが必要です。

    while($file)
    {
        if(date("U",filectime($file) <= time() - 3600)
        {
            unlink($file)
        }
    }
    

次に、それをスクリプトに追加します。

function destroy($dir) {
$mydir = opendir($dir);
while($file = readdir($mydir)) {
    if($file != "." && $file != "..") {
        chmod($dir.$file, 0777);
        if(is_dir($dir.$file)) {
            chdir('.');
            while($dir.$file) {
                if(date("U",filectime($file) >= time() - 3600)
                {
                    unlink($dir.$file)
                }
            }

        }
        else
            unlink($dir.$file) or DIE("couldn't delete $dir$file<br />");
    }
}
closedir($mydir);
}

お役に立てば幸いです。

覚えて:

  • Unix/Php でファイル作成時間を取得する方法はありません
  • 現在のifステートメントはtrue、ファイルが最後に変更されたのが 1 時間以上前かどうかを返します
于 2012-07-07T14:02:12.507 に答える
0

Unix では、 filectimeを使用して最終更新日のみを取得し、作成時刻を取得することはできません。

ただし、Windows システムを使用している場合は、まったく逆です。同じメソッド filectime を使用して、最終変更時刻ではなく、作成時刻を取得します。

于 2012-07-07T13:57:38.563 に答える