Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 预结束日志文件的最佳方法_Php - Fatal编程技术网

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这确实有帮助……但是第一个函数总体上似乎更有效——只要附加到文件中,反向读取应该不会有问题。