Я пишу код, и мне нужно написать номер в определенной строке. Вот что я до сих пор:
<?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 для этой строки, сохраняя все остальные строки.
вы можете использовать файл, чтобы получить файл в виде массива строк, затем изменить нужную строку и переписать всю партию обратно в файл.
<?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 ) );
Это должно сработать. Это будет довольно неэффективно, если файл слишком велик, так что это зависит от вашей ситуации, если это хороший ответ или нет.
$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 ответа, но это не сработало. Мне пришлось изменить его на это:
<?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)); ?>
Поскольку эти строки не работают, поскольку аргумент массива не является индексом:
$line = $stats[$offset]; $lines[$line_i_am_looking_for] = 'my modified line';
Пришлось добавить, что +1 для новой строки под искомым текстом.