我正在使用file_put_contents()
将一些XML内容记录到文本文件中,以防我需要它进行调试。
如何在一段时间后删除此文件?
我在日志文件夹中有一个限制性的.htaccess
,但我宁愿不在网上留下信息(将有客户的地址等)。
好吧,虽然同意其他人,你正在使用错误的工具来完成工作,但你的问题非常简单。所以你走了:
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在我写这篇文章时发布了这个,所以我将给你留下他对该解决方案的优雅答案。
你应该使用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");
您应该更好地处理日志记录,但要回答您的问题,我将使用* nix find
命令。
find /path/to/files* -mtime +5 -delete
这将删除五天内未修改的所有文件。根据自己的需要进行调整。
您可以使用内置函数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);
有两种方法可以解决它:
<?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);
您可以设置服务器计划任务(在* nix系统下称为Cron作业)以定期运行并删除左侧日志文件。任务是执行一个可以完成工作的PHP代码。