0

blueimp.net の AjaxChat 用の非常に基本的な登録モジュールを作成しようとしています。ユーザー構成ファイルに書き込むスクリプトがあります。

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

$addUserしかし、最後の行の前に挿入する必要があります。?>

fseekを使用してこれを達成するにはどうすればよいですか?

4

2 に答える 2

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

ノート:

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

fseek($fh, -2, SEEK_END)ファイルの末尾に位置を配置し、2 バイト (の長さ?>)だけ後方に移動します。

于 2012-03-19T01:29:35.237 に答える
0

これを実現する別の方法は、SplFileObjectクラス(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);

私はこれをテストしていません(現在使用しているコンピューターではテストできません)ので、それが正確にそのように機能するかどうかはわかりません。ここでのポイントは、実際には、fseek()がバイト単位でシークする方法ではなく、行ごとにシークできるSplFileObjectのクールなseek()メソッドです。

于 2012-03-19T01:39:23.657 に答える