1

重複の可能性:
Webサーバーからファイルを自動的に削除します

file_put_contents()デバッグに必要な場合に備えて、XMLコンテンツをテキストファイルに記録しています。

一定時間後にこのファイルを削除するにはどうすればよいですか?

ログフォルダに制限.htaccessがありますが、情報(顧客のアドレスなど)をWebに長時間残したくありません。

4

6 に答える 6

5

さて、あなたが仕事のために間違ったツールを使用していることを他のみんなに同意している間、あなたの質問はかなり簡単です。だからここに行きます:

  • コマンドラインから実行するPHPスクリプトを作成します
  • cronまたはWindowsのスケジュールされたタスクのようなツールを使用する
  • cron毎分/5分などを呼び出す

スクリプトは非常に簡単です。

<?php
   $dh = opendir(PATH_TO_DIRECTORY);
   while( ($file = readdir($dh)) !== false ) {
      if( !preg_match('/^[.]/', $file) ) {  // do some sort of filtering on files
         $path = PATH_TO_DIRECTORY . DIRECTORY_SEPARATOR . $file;
         if( filemtime($path) < strtotime('-1 hour') ) {  // check how long it's been around
            unlink($path);  // remove it
         }
      }
   }

Linuxで作業している場合にも使用できfindますが、@ Rawkodeがこれを書いているときに投稿したので、その解決策に対する彼のエレガントな答えを残しておきます。

于 2012-11-12T17:11:06.830 に答える
4

php.ini設定を尊重するPHPerror_log()関数を使用する必要があります。

error_log('Send to PHP error log');
error_log('Sent to my custom log', 3, "/var/tmp/my-errors.log");
于 2012-11-12T17:03:39.740 に答える
3

組み込み関数– filectime–を使用して、ログファイルの作成日を追跡し、削除するのに十分古いログファイルを削除できます。

このコードはlogsディレクトリを検索し、2週間前のログを削除します。

$logs = opendir('logs');

while (($log = readdir($logs)) !== false)
{
    if ($log == '.' || $log == '..')
        continue;

    if (filectime('logs/'.$log) <= time() - 14 * 24 * 60 * 60)
    {
        unlink('logs/'.$log);
    }
}

closedir($logs);
于 2012-11-12T17:08:39.070 に答える
2

ロギングをより適切に処理する必要がありますが、質問に答えるには、*nixfindコマンドを使用します。

find /path/to/files* -mtime +5 -delete

これにより、5日間変更されていないすべてのファイルが削除されます。自分のニーズに合わせて調整します。

于 2012-11-12T17:05:05.843 に答える
2

あなたがそれを解決することができる2つの方法があります:

  1. ログを1つのファイルにのみ書き込む場合は、次のような方法でファイルを空にすることができます。

    <?php file_put_contents($logpath, "");
    
  2. 多くのファイルを生成する場合は、次のようなクリーンアップ関数を作成できます。

    <?php
    $logpath = "/tmp/path/to/log/";
    $dirh = opendir($logpath);
    while (($file = readdir($dh)) !== false) {
        if(in_array($file, array('.', '..'))) continue;
        unlink($logpath . $file);
    }
    closedir($dirh);        
    
于 2012-11-12T17:10:16.577 に答える
0

サーバーのスケジュールされたタスク(* nixシステムではCronジョブとして最もよく知られています)を設定して、定期的に実行し、左側のログファイルを削除することができます。タスクは、その仕事をするPHPコードを実行することです。

Cronジョブの概要を参照してくださいw

于 2012-11-12T17:06:30.373 に答える