0

ディレクトリ自体を削除せずに、PHPで24時間ごとにディレクトリ内のすべてのファイルを削除するにはどうすればよいですか? PHP でなければならず、Cron ジョブであってはなりません。

コードの背後にある説明も教えてください。私はまだPHPを学んでいます。

ありがとうございました!

4

4 に答える 4

3

PHP を使用せずに PHP でこれを行う方法はありません。ごめん。

冗談ですが、これを行うには、ある種のタスク スケジューラ (cron など) が必要になります。

つまり、24 時間ごとに要求をサーバーに送信するようにパーソナル コンピューターをプログラムできますが、手動で行うか、ローカルでタスクをスケジュールする必要があります。

つまり、cron は必要ですが、PHP ファイルと同じホストで実行する必要はありません。

于 2013-03-06T19:17:58.407 に答える
2

cron がなければ、よく要求されるページに次のようなコードを追加する必要があります。

$scheduledclean = strtotime("midnight"); // 00:00:00 of the current day
$lastcleanfile = '/path/to/my/app/lastclean';
$lastcleantime = (file_exists($lastcleanfile)) ? filemtime($lastcleanfile) : 0;
$curtime = time();

if( ($curtime > $scheduledclean) && ($lastcleantime < $scheduledclean) ) {
    touch($lastcleanfile); //touch first to prevent multiple executions
    // file cleanup code here
}

真夜中以降のページへの最初のリクエストでは、クリーンアップが開始されますが、リクエストを行った不運な人は、クリーンアップにかかる分、ページが提供されるまでに遅延が生じる可能性があります。次のようなバックグラウンド シェル コマンドとしてクリーンアップを実行することで、これを軽減できます。shell_exec('rm -rf /path/to/dir/* &');

于 2013-03-06T19:53:00.213 に答える
1

私は昔、これに似たようなことをしました。ひどい考えですが、ディレクトリが最後にクリアされたときを保存するファイルを持つことができます。ユーザーが関連するページにアクセスするたびに、PHP スクリプトでこのファイルを確認します (変更時刻も確認できます)。十分に過去のものである場合は、ファイルを更新して削除スクリプトを実行します。

欠点:

  • 24 時間ごとに実行されるとは限りません (ある日、訪問者がいない可能性があります)。
  • 1 日あたり 1 人のユーザーの待ち時間が長くなります
  • 醜い

ファイルの削除に関しては、

function delete_contents( $dirpath ) {
    $dir = opendir( $dirpath );
    if( $dir ) {
        while( ($s = readdir( $dir )) !== false ) {
            if( is_dir( $s ) ) {
                delete_contents( $s );
                rmdir( $s );
            } else {
                unlink( $s );
            }
        }
        closedir( $dir );
    }
}

それには非常に注意してください。粗雑なサーバー設定では、delete_contents('/')すべてのファイルを削除します。

于 2013-03-06T19:43:34.963 に答える
0
  1. ディレクトリ内のすべてのファイルを削除する PHP スクリプトを作成し、関数readdir()およびunlink()を探してファイルを削除します。

  2. 24 時間ごとにスクリプトを自動的に実行するようにCron ジョブを設定します。これを正確に行う方法は、ホストによって異なります。これに使用できる Web サイトもあります: http://www.google.nl/search?q=cronjobs+webservice

幸運を!

于 2013-03-06T19:22:22.457 に答える