как заменить определенную строку с помощью php. Я не знаю номер строки. Я хочу заменить строку, содержащую определенное слово.
Как заменить определенную строку в текстовом файле с помощью php?
Ответ 1
Один подход, который вы можете использовать для небольших файлов, которые могут вставляться в вашу память дважды:
$data = file('myfile'); // reads an array of lines
function replace_a_line($data) {
if (stristr($data, 'certain word')) {
return "replaement line!\n";
}
return $data;
}
$data = array_map('replace_a_line',$data);
file_put_contents('myfile', implode('', $data));
Быстрая заметка, PHP > 5.3.0 поддерживает функции лямбда, поэтому вы можете удалить декларацию названной функции и сократить карту до:
$data = array_map(function($data) {
return stristr($data,'certain word') ? "replacement line\n" : $data;
}, $data);
Теоретически вы могли бы сделать это одним (сложнее следовать) выражением php:
file_put_contents('myfile', implode('',
array_map(function($data) {
return stristr($data,'certain word') ? "replacement line\n" : $data;
}, file('myfile'))
));
Другой (менее интенсивный объем памяти) подход, который вы должны использовать для больших файлов:
$reading = fopen('myfile', 'r');
$writing = fopen('myfile.tmp', 'w');
$replaced = false;
while (!feof($reading)) {
$line = fgets($reading);
if (stristr($line,'certain word')) {
$line = "replacement line!\n";
$replaced = true;
}
fputs($writing, $line);
}
fclose($reading); fclose($writing);
// might as well not overwrite the file if we didn't replace anything
if ($replaced)
{
rename('myfile.tmp', 'myfile');
} else {
unlink('myfile.tmp');
}
Ответ 2
Вы должны перезаписать весь файл.
Итак, для относительно небольшого файла прочитать файл в массив, найти слово, заменить найденную строку, написать все остальное в file.
Для большого файла алгоритм немного отличается, но в целом он вообще такой же.
Важная часть блокировка файла
почему мы предпочитаем базу данных.
Ответ 3
Вы также можете использовать многострочный режим с регулярными выражениями
preg_match_all('/word}/m', $textfile, $matches);
Это, конечно же, предполагает, что это маленький документ на готовом и загруженном. В противном случае другие ответы гораздо более "реальны" для решения.
Ответ 4
$filedata = file('filename');
$newdata = array();
$lookfor = 'replaceme';
$newtext = 'withme';
foreach ($filedata as $filerow) {
if (strstr($filerow, $lookfor) !== false)
$filerow = $newtext;
$newdata[] = $filerow;
}
Теперь $newdata
содержит содержимое файла в виде массива (используйте implode()
, если вы не хотите, чтобы массив), а строка, содержащая замену replaceme, была заменена на "tome".
Ответ 5
Если вы не знаете строку, вам придется искать по всем строкам.
Либо итерация по файлу строка за строкой, либо читает файл в памяти сразу.
Затем либо найдите слово с комбинацией strpos
и str_replace
или
используйте preg_replace
.
Если вы выполните итерацию, просто используйте strpos
и замените строку, если она не вернет FALSE. Затем сохраните файл на диске.
Ответ 6
Это хорошо, если вы ищете подстроку (ID) в строке и хотите заменить старую строку новой строкой.
Код:
$id = "123";
$new_line = "123,Programmer\r"; // We're not changing the ID, so ID 123 remains.
$contents = file_get_contents($dir);
$new_contents= "";
if( strpos($contents, $id) !== false) { // if file contains ID
$contents_array = preg_split("/\\r\\n|\\r|\\n/", $contents);
foreach ($contents_array as &$record) { // for each line
if (strpos($record, $id) !== false) { // if we have found the correct line
$new_contents .= $new_line; // change record to new record
}else{
$new_contents .= $record . "\r";
}
}
file_put_contents($dir, $new_contents); // save the records to the file
echo json_encode("Successfully updated record!");
}
else{
echo json_encode("failed - user ID ". $id ." doesn't exist!");
}
Пример:
Старый файл:
ID, род занятий
123, студент
124, слой кирпича
Запуск кода изменит файл на:
Новый файл:
ID, род занятий
123, программист
124, слой кирпича
Ответ 7
Возможно, это могло бы помочь:
$data = file("data.php");
for($i = 0;$i<count($data);$i++){
echo "<form action='index.php' method='post'>";
echo "<input type='text' value='$data[$i]' name='id[]'><br>";
}
echo "<input type='submit' value='simpan'>";
echo "</form>";
if(isset($_POST['id'])){
file_put_contents('data.php',implode("\n",$_POST['id'])) ;
}