在PHP中自动删除日志文件

在PHP中自动删除日志文件,php,Php,可能重复: 我正在使用file\u put\u contents()将一些XML内容记录到文本文件中,以备调试时需要 在一段时间后如何删除此文件 我在日志文件夹中有一个限制性的.htaccess,但我不想将信息(将有客户地址等)长时间保留在web上。您应该使用PHP函数,它将尊重PHP.ini设置 error_log('Send to PHP error log'); error_log('Sent to my custom log', 3, "/var/tmp/my-errors.log")

可能重复:

我正在使用
file\u put\u contents()
将一些XML内容记录到文本文件中,以备调试时需要

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


我在日志文件夹中有一个限制性的
.htaccess
,但我不想将信息(将有客户地址等)长时间保留在web上。

您应该使用PHP函数,它将尊重PHP.ini设置

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

您应该使用PHP函数,该函数将遵守PHP.ini设置

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

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

find/path/to/files*-mtime+5-删除


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

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

find/path/to/files*-mtime+5-删除


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

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


请参见

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


请参见

您可以使用内置功能–跟踪日志文件的创建日期,然后删除那些足够旧的日志文件

此代码搜索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);
$logs=opendir('logs');
while(($log=readdir($logs))!==false)
{
如果($log='.| |$log=''.'))
持续

如果(filectime('logs/'.$log)您可以使用内置函数–跟踪日志文件的创建日期,然后删除那些足够旧的可以删除的日志文件

此代码搜索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);
$logs=opendir('logs');
while(($log=readdir($logs))!==false)
{
如果($log='.| |$log=''.'))
持续

如果(filectime('logs/'.$log)有两种方法可以解决此问题:

  • 如果只将日志写入一个文件,则可以使用以下方法清空该文件:

    <?php file_put_contents($logpath, "");
    
    <?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);        
    

    有两种方法可以解决这个问题:

  • 如果只将日志写入一个文件,则可以使用以下方法清空该文件:

    <?php file_put_contents($logpath, "");
    
    <?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);        
    

    好吧,虽然大家都同意你在工作中使用了错误的工具,但你的问题很简单。所以你来:

    • 编写一个从命令行运行的PHP脚本
    • 使用类似于
      cron
      或windows计划任务的工具
    • 每分钟/5分钟/etc调用
      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
             }
          }
       }
    

    好吧,虽然大家都同意你在工作中使用了错误的工具,但你的问题很简单。所以你来:

    • 编写一个从命令行运行的PHP脚本
    • 使用类似于
      cron
      或windows计划任务的工具
    • 每分钟/5分钟/etc调用
      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
             }
          }
       }
    

    您的基本概念中有一个错误:日志文件永远不应该在web上公开。只需将日志文件存储到服务器上无法通过HTTP访问的某个目录。您可以使用cronjob进行此操作。更多信息,您甚至可以使用cron jobs煮咖啡。这是一个答案吗?他问过一会儿如何删除该文件。我不知道你所需要的就是反对你的否决票……你在基本概念上有一个错误:日志文件永远不应该在web上公开。只需将文件存储到服务器上无法通过HTTP访问的某个目录。你可以使用cronjob来实现这一点。更多信息,你甚至可以使用cron jobs来煮咖啡。这是答案吗?他问如何删除我不明白你的否决票是你所需要的一切……现在放一个空内容似乎很明显。#facepalm感谢你的两个解决方案。现在放一个空内容似乎很明显。#facepalm感谢你的两个解决方案。我接受这一点,因为它回答了我的问题,即使我显然问错了我接受这个问题,因为它回答了我的问题,即使我提出的问题显然是错误的,而且通常是错误的。谢谢!如果我能接受两个解决方案,我也会接受这个方案来纠正我的基本方法。谢谢!如果我能接受两个解决方案,我也会接受这个方案这是我的基本方法。谢谢!