2012-03-19 1 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+fseekに関するfollowing noteの理由:

注:

append(aまたはa +)モードでファイルを開いた場合、ファイル の位置に関係なく、ファイルに書き込むデータが常に追加され、fseek()の呼び出し結果は未定義になります。

fseek($fh, -2, SEEK_END)はファイルの末尾位置を配置し、次に2バイト(?>の長さ)

0

によって後方にこれを達成する別の方法でそれを移動するPHPのようSplFileObject class(利用可能なを使用しています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); 

私はこれをテストしていません(私はコンピュータ上で私が今使っていることができない)ので、それはまさにそのように動作するか私はわかりません。ここでのポイントは、実際には、fseek()がバイト単位でシークするのではなく、行単位でシークできるSplFileObjectの涼しいseek()メソッドです。

関連する問題