Перезаписать строку в файле с помощью PHP
Каков наилучший способ перезаписи определенной строки в файле? Я в основном хочу искать файл для строки «@parsethis» и перезаписывать остальную часть этой строки чем-то другим.
5 ответов
Если файл не слишком большой, лучшим способом, вероятно, будет чтение файла в массив строк с file(), выполните поиск по массиву строк для вашей строки и отредактируйте эту строку, затем implode() массив назад и fwrite() обратно в файл.
Если файл действительно большой (файлы журналов или что-то в этом роде), и вы готовы пожертвовать скоростью для потребления памяти, вы можете открыть два файла и по существу сделать трюк Джереми Рутен, предлагаемые с использованием файлов вместо системной памяти.
Основная проблема заключается в том, что новая строка может быть не такой же длины, как у старой строки. Если вам нужно изменить длину строки, нет пути перезаписи, по крайней мере, всего файла после измененной строки. Самый простой способ — создать новый, измененный файл, а затем переместить его поверх оригинала. Таким образом, для читателей всегда доступен полный файл. Используйте блокировку, чтобы убедиться, что только один script одновременно изменяет файл, и поскольку вы собираетесь заменить файл, выполните блокировку в другом файле. Проверьте flock() .
Если вы уверены, что новая строка будет такой же длины, как и в старой строке, вы можете открыть файл в режиме чтения/записи (используйте r+ в качестве второго аргумента для fopen() ) и вызовите ftell() для сохранения позиции, в которой линия запускается каждый раз, прежде чем вы вызовете fgets() , чтобы прочитать строку. Когда вы найдете строку, которую хотите переписать, вы можете использовать fseek() , чтобы вернуться к началу строки и fwrite() новых данных. Один из способов заставить линию всегда иметь одинаковую длину, — это простое место для максимальной длины.
или если ваш файл не слишком большой:
Вам нужно будет выбрать разделители ‘#’, которые не присутствуют в файле.
Php как перезаписать часть строки из файла
Замена кода в файле средствами PHP
Здравствуйте. Имеется php-файл. В нём необходимо найти кусок кода и заменить его другим куском.
Замена строки в файле
Имеется текстовый файл, в него заносится логин и пароль типа запись, так вот к примеру пользователь.
Замена строки в файле
Здравствуйте, подскажите новичку! Проблема в следующем: например есть файл txt в нем например.
Замена строки в файле
Можно ли заменить строку по номеру? Какие вообще возможны замены? Есть много файлов, в каждой нужно.
Перезаписать строку в файле с помощью PHP
Как лучше всего перезаписать определенную строку в файле? В основном я хочу найти в файле строку «@parsethis» и перезаписать оставшуюся часть этой строки чем-то еще.
7 ответы
Если файл не слишком велик, лучшим способом, вероятно, было бы прочитать файл в виде массива строк с файл(), выполните поиск в массиве строк для вашей строки и отредактируйте эту строку, затем взорваться () массив обратно вместе и fwrite () его обратно в файл.
ответ дан 25 окт ’08, 00:10
Я всегда так делал. Мне будет любопытно посмотреть, есть ли способ изменять файлы на месте. — Марк Бик
Если вы используете file () для in, после взрыва вы, вероятно, захотите, чтобы file_put_contents () тоже выполняла это в одной строке. — Фрэнк Нок
Если файл действительно большой (файлы журнала или что-то в этом роде), и вы готовы пожертвовать скоростью ради потребления памяти, вы можете открыть два файла и, по сути, сделать трюк Джереми Рутен предлагается использовать файлы вместо системной памяти.
ответ дан 23 мая ’17, 13:05
Основная проблема заключается в том, что длина новой строки может отличаться от длины старой. Если вам нужно изменить длину строки, нет возможности перезаписать хотя бы весь файл после измененной строки. Самый простой способ — создать новый измененный файл, а затем переместить его поверх исходного. Таким образом, читателям всегда доступен полный файл. Используйте блокировку, чтобы убедиться, что только один сценарий изменяет файл одновременно, и, поскольку вы собираетесь заменить файл, заблокируйте другой файл. Проверить flock() .
Если вы уверены, что новая строка будет той же длины, что и старая строка, вы можете открыть файл в режиме чтения / записи (используйте r+ в качестве второго аргумента fopen() ) и звоните ftell() чтобы сохранить позицию, в которой линия запускается каждый раз перед вызовом fgets() прочитать строку. Как только вы найдете строку, которую хотите перезаписать, вы можете использовать fseek() вернуться в начало строки и fwrite() новые данные. Один из способов заставить линию всегда быть одинаковой длины — это растянуть ее до максимально возможной длины.
Это решение, которое работает для перезаписи только одной строки файла на месте с помощью sed из PHP. Мой файл содержит только переменные стиля и отформатирован: $ styleVarName: styleVarProperty; \ n
Для этого я сначала добавляю «:» в конец myStyleVarName, а sed заменяет оставшуюся часть этой строки новым свойством и добавляет точку с запятой. Убедитесь, что символы в myStyleVarProp правильно экранированы.

или если ваш файл не слишком большой:
Вам нужно будет выбрать разделители ‘#’, которых нет в файле.
ответ дан 25 окт ’08, 09:10
Если вы хотите полностью заменить содержимое одного файла содержимым другого файла, вы можете использовать это:
Итак, в первой строке вы создаете резервную копию файла, а во второй строке вы заменяете файл содержимым нового файла.
Насколько я могу судить, переименование возвращает логическое значение. Истина, если переименование прошло успешно, и ложь, если не удалось. Следовательно, можно было бы запустить второй шаг только в том случае, если первый шаг был успешным, чтобы предотвратить перезапись файла, если резервное копирование не было выполнено успешно. Проверить:
Надеюсь, что это кому-то пригодится.
ответ дан 16 апр.
Скорее всего, я сделаю то, что предложил Джереми, но просто альтернативный способ сделать это — другое решение. Это не тестировалось и не использовалось и предназначено для систем * nix.
ответ дан 25 окт ’08, 01:10
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками php file-io fopen fwrite or задайте свой вопрос.
file_put_contents
Функция идентична последовательным успешным вызовам функций fopen() , fwrite() и fclose() .
Если filename не существует, файл будет создан. Иначе, существующий файл будет перезаписан, за исключением случая, если указан флаг FILE_APPEND .
Список параметров
Путь к записываемому файлу.
Записываемые данные. Может быть типа string , array или ресурсом потока.
Если data является потоковым ресурсом ( stream ), оставшийся буфер этого потока будет скопирован в указанный файл. Это похоже на использование функции stream_copy_to_stream() .
Также вы можете передать одномерный массив в качестве параметра data . Это будет эквивалентно вызову file_put_contents($filename, implode('', $array)) .
Значением параметра flags может быть любая комбинация следующих флагов, соединённых бинарным оператором ИЛИ ( | ).