写入PHP中的特定行

时间:2010-07-19 01:40:39

标签: php

我正在写一些代码,我需要在特定的行上写一个数字。这是我到目前为止所做的:

<?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,同时保留所有其他行。

3 个答案:

答案 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才能在搜索到的文本下面添加新行。