PHP fwrite()如何在某些特定行之后插入新行
Posted
技术标签:
【中文标题】PHP fwrite()如何在某些特定行之后插入新行【英文标题】:PHP fwrite() how to insert a new line after some specific line 【发布时间】:2013-05-11 23:02:51 【问题描述】:我是新来的。 无论如何,我对 fwrite() 进行了研究,但找不到解决方案,所以我正在寻求帮助。 我想要的是 f.e.在其他特定行之后添加新的文本行。 F.e.我有一个 .txt 文件,其中有:
//Users
//Other stuff
//Other stuff2
现在我想做的是能够在 //Users 下方添加一个新用户,而无需触摸“Other Stuff”和“Other Stuff 2”。所以它应该看起来像这样:
//Users
Aneszej
Test321
Test123
//Other stuff
//Other stuff2
到目前为止我所拥有的:
$config = 'test.txt';
$file=fopen($config,"r+") or exit("Unable to open file!");
$date = date("F j, Y");
$time = date("H:i:s");
$username = "user";
$password = "pass";
$email = "email";
$newuser = $username . " " . $password . " " . $email . " " . $date . " " . $time;
while (!feof($file))
$line=fgets($file);
if (strpos($line, '//Users')!==false)
$newline = php_EOL . $newuser;
fwrite($file, $newline);
fclose($file);
test.txt 文件
//Users
//Something Else
//Something Else 2
但这只会将用户写入 .txt 文件的末尾。
非常感谢大家的帮助!解决了。
【问题讨论】:
我认为当您的文件操作开始有点复杂时,您应该使用数据库。试试 SQLite,应该很适合你... 这只是一个例子,我打算用它来做其他事情。感谢您提供信息。 【参考方案1】:您在读取结束时写入新内容,因此必须在文件末尾写入 - 读取所有行后光标就在那里。
要么将所有内容存储在 php-variable 中并最终覆盖文件,要么像 Robert Rozas 评论中提到的那样使用 fseek 倒回光标。这应该在您阅读“其他”行后立即完成。
【讨论】:
【参考方案2】:试试 fseek:
<?php
$file = fopen($filename, "c");
fseek($file, -3, SEEK_END);
fwrite($file, "whatever you want to write");
fclose($file);
?>
PHP 文档:http://php.net/manual/en/function.fseek.php
【讨论】:
【参考方案3】:找到“//Users”后需要break
。你一直读到文件的末尾。
【讨论】:
【参考方案4】:我修改了你的代码,我认为以下是你需要的,我也发表了评论,下面的函数会不断添加新用户,你可以添加条件来检查用户是否存在。
$config = 'test.txt';
$file=fopen($config,"r+") or exit("Unable to open file!");
$date = date("F j, Y");
$time = date("H:i:s");
$username = "user";
$password = "pass";
$email = "email";
$newuser = $username . " " . $password . " " . $email . " " . $date . " " . $time."\r\n"; // I added new line after new user
$insertPos=0; // variable for saving //Users position
while (!feof($file))
$line=fgets($file);
if (strpos($line, '//Users')!==false)
$insertPos=ftell($file); // ftell will tell the position where the pointer moved, here is the new line after //Users.
$newline = $newuser;
else
$newline.=$line; // append existing data with new data of user
fseek($file,$insertPos); // move pointer to the file position where we saved above
fwrite($file, $newline);
fclose($file);
【讨论】:
以上是关于PHP fwrite()如何在某些特定行之后插入新行的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用 REXX 编辑 ps 数据集并在特定行之后插入字符串?