我正在尝试为blueimp.net的AjaxChat编写一个非常基本的注册模块。我有一个写入用户配置文件的脚本。
$userfile = "lib/data/users.php";
$fh = fopen($userfile, 'a');
$addUser = "string_for_new_user";
fwrite($fh, $addUser);
fclose($fh);
但我需要在最后一行之前插入$addUser
,即?>
我如何使用fseek完成此操作?
答案 0 :(得分: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
的{{3}},您需要以模式fseek($fh, -2, SEEK_END)
打开文件:
注意:强>
如果您已在附加(a或+)模式下打开文件,那么您有任何数据 无论文件如何,都将始终追加写入文件 位置,调用fseek()的结果将是未定义的。
?>
将位置放在文件末尾,然后向后移动2个字节({{1}}的长度)
答案 1 :(得分: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()按字节搜索。