在PHP中自动删除日志文件

时间:2012-11-12 17:00:01

标签: php

  

可能重复:
  Automatically delete files from webserver

我正在使用file_put_contents()将一些XML内容记录到文本文件中,以防我需要它进行调试。

如何在一段时间后删除此文件?

我在日志文件夹中有一个限制性的.htaccess,但我宁愿不在网上留下信息(将有客户的地址等)。

6 个答案:

答案 0 :(得分:4)

您应该使用PHP error_log()函数,该函数将遵循php.ini设置。

error_log('Send to PHP error log');
error_log('Sent to my custom log', 3, "/var/tmp/my-errors.log");

答案 1 :(得分: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);

答案 2 :(得分:3)

嗯,虽然与其他人一致认为你正在使用错误的工具来完成工作,但你的问题非常简单。所以你走了:

  • 编写一个将从命令行运行的PHP脚本
  • 使用cron或Windows预定任务
  • 等工具
  • 每分钟调用cron /五分钟/等

您的脚本非常简单:

<?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在我写这篇文章的时候发布了这个,所以我会给你留下他那个解决方案的优雅答案

答案 3 :(得分:2)

您应该更好地处理日志记录,但要回答您的问题,我会使用* nix find命令。

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

这将删除五天内未修改的所有文件。根据自己的需要进行调整。

答案 4 :(得分: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);        
    

答案 5 :(得分:0)

您可以设置服务器计划任务(在* nix系统下称为Cron作业)定期运行并删除左侧日志文件。任务是执行一个可以完成工作的PHP代码。

请参阅Cron Job Overvieww