$iplog = "$time EST - $userip - $location - $currentpage\n";
file_put_contents("iplog.txt", $iplog, FILE_APPEND);
我想寫這個文本文件,但它把它放在底部,我寧願如果新條目在頂部。我將如何更改指針放置文本的位置?更改指針file_put_contents()
$iplog = "$time EST - $userip - $location - $currentpage\n";
file_put_contents("iplog.txt", $iplog, FILE_APPEND);
我想寫這個文本文件,但它把它放在底部,我寧願如果新條目在頂部。我將如何更改指針放置文本的位置?更改指針file_put_contents()
在文件的開始處預先設置是非常罕見的,因爲它需要複製文件的所有數據。如果文件很大,這可能會使性能無法接受(特別是當它是頻繁寫入的日誌文件時)。我會重新考慮如果你真的想要這樣。
用PHP做到這一點,最簡單的方法是這樣的:
$iplog = "$time EST - $userip - $location - $currentpage\n";
file_put_contents("iplog.txt", $iplog . file_get_contents('iplog.txt'));
的file_get_contents
解決方案沒有一個標誌前面加上內容到一個文件中,而不是在大文件,其中記錄非常有效文件通常是。解決方法是將fopen
和fclose
與臨時緩衝區一起使用。那麼如果不同的訪問者同時更新你的日誌文件,你可能會遇到問題,但這是另一個話題(你需要鎖定機制或其他)。
<?php
function prepend($file, $data, $buffsize = 4096)
{
$handle = fopen($file, 'r+');
$total_len = filesize($file) + strlen($data);
$buffsize = max($buffsize, strlen($data));
// start by adding the new data to the file
$save= fread($handle, $buffsize);
rewind($handle);
fwrite($handle, $data, $buffsize);
// now add the rest of the file after the new data
$data = $save;
while (ftell($handle) < $total_len)
{
$chunk = fread($handle, $buffsize);
fwrite($handle, $data);
$data = $chunk;
}
}
prepend("iplog.txt", "$time EST - $userip - $location - $currentpage\n")
?>
這應該做(代碼測試)。它需要一個初始的iplog.txt
文件雖然(或filesize
拋出一個錯誤。
可能重複的[需要用PHP開始寫文件](http://stackoverflow.com/questions/1760525/need-to-write-在開始的文件與php) – Sugar
[這個問題](http://stackoverflow.com/questions/3332262/how-do-i-prepend-file-to-beginning)可能是有用的 – lelloman