2012-03-19 76 views
0

我想爲blueimp.net的AjaxChat編寫一個非常基本的註冊模塊。我有一個寫入用戶配置文件的腳本。使用fseek在最後一行之前插入字符串

$userfile = "lib/data/users.php"; 
$fh = fopen($userfile, 'a'); 
$addUser = "string_for_new_user"; 
fwrite($fh, $addUser); 
fclose($fh); 

但我需要它的最後一行,這是?>

我將如何做到這一點使用FSEEK之前插入$addUser

回答

2

如果總是知道該文件以>結束,僅此而已,你可以:?

$userfile = "lib/data/users.php"; 
$fh = fopen($userfile, 'r+'); 
$addUser = "string_for_new_user\n?>"; 
fseek($fh, -2, SEEK_END); 
fwrite($fh, $addUser); 
fclose($fh); 

爲了進一步增強了答案:你會想打開你的文件模式r+因爲following note關於fseek

注:

如果以appeat(a或a +)模式打開文件,則無論文件位置爲 位置如何, 寫入文件的任何數據都將被追加,並且調用fseek()的結果將不確定。

fseek($fh, -2, SEEK_END)將放置的位置在文件的結尾,再由2個字節(的?>的長度)

0

另一種方式向後移動它來完成,這是使用的SplFileObject class(可作爲PHP的5.1)。

$userfile = "lib/data/users.php"; 
$addUser = "\nstring_for_new_user\n"; 
$line_count = 0; 

// Open the file for writing 
$file = new SplFileObject($userfile, "w"); 

// Find out number of lines in file 
while ($file->valid()) { 
    $line_count++; 
    $file->next(); 
} 

// Jump to second to last line 
$file->seek($line_count - 1); 

// Write data 
$file->fwrite($add_user); 

我還沒有測試過這個(我不能在我現在使用的計算機上),所以我不確定它的工作原理是否如此。這裏的要點真的是SplFileObject的很酷的seek()方法,它可以按行查找,而不是按字節查找fseek()。

相關問題