2014-06-24 92 views
-2
$iplog = "$time EST - $userip - $location - $currentpage\n"; 
file_put_contents("iplog.txt", $iplog, FILE_APPEND); 

我想寫這個文本文件,但它把它放在底部,我寧願如果新條目在頂部。我將如何更改指針放置文本的位置?更改指針file_put_contents()

+0

可能重複的[需要用PHP開始寫文件](http://stackoverflow.com/questions/1760525/need-to-write-在開始的文件與php) – Sugar

+0

[這個問題](http://stackoverflow.com/questions/3332262/how-do-i-prepend-file-to-beginning)可能是有用的 – lelloman

回答

1

在文件的開始處預先設置是非常罕見的,因爲它需要複製文件的所有數據。如果文件很大,這可能會使性能無法接受(特別是當它是頻繁寫入的日誌文件時)。我會重新考慮如果你真的想要這樣。

用PHP做到這一點,最簡單的方法是這樣的:

$iplog = "$time EST - $userip - $location - $currentpage\n"; 
file_put_contents("iplog.txt", $iplog . file_get_contents('iplog.txt')); 
0

file_get_contents解決方案沒有一個標誌前面加上內容到一個文件中,而不是在大文件,其中記錄非常有效文件通常是。解決方法是將fopenfclose與臨時緩衝區一起使用。那麼如果不同的訪問者同時更新你的日誌文件,你可能會遇到問題,但這是另一個話題(你需要鎖定機制或其他)。

<?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拋出一個錯誤。