Php 预结束日志文件的最佳方法
我一直在寻找一种更快的方法来完成日志文件的前置。下面是我知道的两种方法。我还探索了正常附加文件,然后反向读取文件以显示,但(未经测试)我认为,一旦文件达到合理大小,这将花费更长的时间。预处理日志文件的最快方法是什么Php 预结束日志文件的最佳方法,php,Php,我一直在寻找一种更快的方法来完成日志文件的前置。下面是我知道的两种方法。我还探索了正常附加文件,然后反向读取文件以显示,但(未经测试)我认为,一旦文件达到合理大小,这将花费更长的时间。预处理日志文件的最快方法是什么 $start1 = microtime(true); log1(); $end1 = microtime(true); $start2 = microtime(true); // log2(); $end2 = microtime(true); $t1 = $end1-$start
$start1 = microtime(true);
log1();
$end1 = microtime(true);
$start2 = microtime(true);
// log2();
$end2 = microtime(true);
$t1 = $end1-$start1;
$t2 = $end2-$start2;
function log1(){
$stamp = date("Y-m-d @ h:i:sa");
$data = ($stamp." this has been a test of 1");
$data .= file_get_contents('./test.log');
file_put_contents('./test.log', "\r\n\r\n".$data);
}
编辑:更新了log2()
function log2(){
$stamp = date("Y-m-d @ h:i:sa");
$write = $stamp.'this has been a test of 2'.PHP_EOL;
$file = './test.log';
$handler = fopen($file, 'r+');
$len = strlen($write);
$final_len = filesize($file)+$len;
$cache_old = fread($handler, $len);
rewind($handler);
$i=1;
while(ftell($handler) < $final_len){
fwrite($handler, $write);
$write = $cache_old;
$cache_old = fread($handler, $len);
fseek($handler, $i * $len);
$i++;
}
fclose($handler);
}
函数log2(){
$stamp=日期(“Y-m-d@h:i:sa”);
$write=$stamp.“这是对2.PHP\u EOL的测试;
$file='./test.log';
$handler=fopen($file,'r+');
$len=strlen($write);
$final_len=文件大小($file)+$len;
$cache_old=fread($handler,$len);
倒带($handler);
$i=1;
而(ftell($handler)<$final_len){
fwrite($handler,$write);
$write=$cache\u old;
$cache_old=fread($handler,$len);
fseek($handler,$i*$len);
$i++;
}
fclose($handler);
}
只是有点迂腐,但如果你把它放在文件的开头,你是在预写,而不是附加。@YaakovAinspan你知道我刚刚在另一篇文章中看到了这一点,犯了同样的错误…哈哈,第二篇文章总是会清除我文件的内容,所以它不起作用-。这有帮助吗?@Waterlomatt这确实有帮助……但是第一个函数总体上似乎更有效——只要附加到文件中,反向读取应该不会有问题。