我正在写一些代码,我需要在特定的行上写一个数字。这是我到目前为止所做的:
<?php
$statsloc = getcwd() . "/stats/stats.txt";
$handle = fopen($statsloc, 'r+');
for($linei = 0; $linei < $zone; $linei++) $line = fgets($handle);
$line = trim($line);
echo $line;
$line++;
echo $line;
此后我不知道该在哪里继续。我需要在该行写入$ line,同时保留所有其他行。
答案 0 :(得分:16)
你可以使用file将文件作为一个行数组来获取,然后改变你需要的行,并将整批文本重写回文件。
<?php
$filename = getcwd() . "/stats/stats.txt";
$line_i_am_looking_for = 123;
$lines = file( $filename , FILE_IGNORE_NEW_LINES );
$lines[$line_i_am_looking_for] = 'my modified line';
file_put_contents( $filename , implode( "\n", $lines ) );
答案 1 :(得分:4)
这应该有效。如果文件太大,它会变得相当低效,所以如果这是一个好的答案,这取决于你的情况。
$stats = file('/path/to/stats', FILE_IGNORE_NEW_LINES); // read file into array
$line = $stats[$offset]; // read line
array_splice($stats, $offset, 0, $newline); // insert $newline at $offset
file_put_contents('/path/to/stats', join("\n", $stats)); // write to file
答案 2 :(得分:0)
我今天遇到了这个并希望使用已发布的2个答案解决,但这不起作用。我不得不改变它:
<?php
$filepathname = "./stats.txt";
$target = "1234";
$newline = "after 1234";
$stats = file($filepathname, FILE_IGNORE_NEW_LINES);
$offset = array_search($target,$stats) +1;
array_splice($stats, $offset, 0, $newline);
file_put_contents($filepathname, join("\n", $stats));
?>
因为这些行不起作用,因为数组的arg不是索引:
$line = $stats[$offset];
$lines[$line_i_am_looking_for] = 'my modified line';
必须添加+1才能在搜索到的文本下面添加新行。