8

我是新来的。
无论如何,我对 fwrite() 进行了研究,但我找不到解决方案,所以我正在寻求帮助。我想要的是 fe 在其他特定行之后添加新的文本行。Fe 我有一个 .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);

测试.txt 文件

//Users

//Something Else

//Something Else 2

但这只会将用户写入 .txt 文件的末尾。

非常感谢大家的帮助!解决了。

4

4 回答 4

7

我修改了你的代码,我认为下面是你需要的,我也发表了评论,下面的函数会不断添加新用户,你可以添加条件来检查用户是否存在。

$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);
于 2013-05-16T22:37:48.163 回答
0

您在读取结束时写入新内容,因此必须在文件末尾写入 - 读取所有行后光标就在那里。

要么将所有内容存储在 php-variable 中并最终覆盖文件,要么像 Robert Rozas 评论中提到的那样使用 fseek 倒回光标。这应该在您阅读“其他”行后立即完成。

于 2013-05-16T21:46:31.240 回答
0

试试 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

于 2013-05-16T21:46:37.513 回答
0

您需要break在找到“//用户”之后。你一直读到文件的末尾。

于 2013-05-16T21:47:46.380 回答