Php как перезаписать часть строки из файла
Перейти к содержимому

Php как перезаписать часть строки из файла

substr_replace

substr_replace() заменяет часть строки string , начинающуюся с символа с порядковым номером start и (необязательной) длиной length , строкой replacement и возвращает результат.

Список параметров

Также можно указать массив строк, в этом случае замены будут происходить с каждой предоставленной строкой. В этом случае параметры replacement , start и length могут быть как скалярными значениями — в этом случае эти значения будут применены к каждой строке, так и массивами — в этом случае соответствующие элементы массивов будут применены к каждой предоставленной строке.

Если start положителен, замена начинается с символа с порядковым номером start строки string .

Если start отрицателен, замена начинается с символа с порядковым номером start , считая от конца строки string .

Если аргумент положителен, то он представляет собой длину заменяемой подстроки в строке string . Если этот аргумент отрицательный, он определяет количество символов от конца строки string , на которых заканчивается замена. Этот аргумент необязателен и по умолчанию равен strlen( string );, т.е. замена до конца строки string . Разумеется, если length равен нулю, то это эквивалентно вставке replacement в string на указанной позиции start .

Возвращаемые значения

Возвращает результирующую строку. Если string является массивом, то возвращает массив.

Примеры

Пример #1 Простой пример использования substr_replace()

<?php
$var = ‘ABCDEFGH:/MNRPQR/’ ;
echo «Оригинал: $var <hr />\n» ;

/* Обе следующих строки заменяют всю строку $var на ‘bob’. */
echo substr_replace ( $var , ‘bob’ , 0 ) . «<br />\n» ;
echo substr_replace ( $var , ‘bob’ , 0 , strlen ( $var )) . «<br />\n» ;

/* Вставляет ‘bob’ в начало $var. */
echo substr_replace ( $var , ‘bob’ , 0 , 0 ) . «<br />\n» ;

/* Обе следующих строки заменяют ‘MNRPQR’ in $var на ‘bob’. */
echo substr_replace ( $var , ‘bob’ , 10 , — 1 ) . «<br />\n» ;
echo substr_replace ( $var , ‘bob’ , — 7 , — 1 ) . «<br />\n» ;

/* Удаляет ‘MNRPQR’ из $var. */
echo substr_replace ( $var , » , 10 , — 1 ) . «<br />\n» ;
?>

Пример #2 Использование substr_replace() для одновременной множественной замены строк

<?php
$input = array( ‘A: XXX’ , ‘B: XXX’ , ‘C: XXX’ );

// Простой случай: заменяем XXX на YYY в каждой строке.
echo implode ( ‘; ‘ , substr_replace ( $input , ‘YYY’ , 3 , 3 )). «\n» ;

// Более сложный случай с уникальными заменами.
$replace = array( ‘AAA’ , ‘BBB’ , ‘CCC’ );
echo implode ( ‘; ‘ , substr_replace ( $input , $replace , 3 , 3 )). «\n» ;

// Замены с разными количествами символов.
$length = array( 1 , 2 , 3 );
echo implode ( ‘; ‘ , substr_replace ( $input , $replace , 3 , $length )). «\n» ;
?>

Перезаписать строку в файле с помощью PHP

Как лучше всего перезаписать определенную строку в файле? В основном я хочу найти в файле строку «@parsethis» и перезаписать оставшуюся часть этой строки чем-то еще.

Что такое cURL в PHP? Встроенные функции и пример GET запроса

Что нового в PHP 8.1?

Разработка LMS на заказ для повышения эффективности работы и обучения

Ответы 7

Если файл не слишком большой, лучшим способом, вероятно, будет считывание файла в массив строк с файл(), поиск в массиве строк для вашей строки и редактирование этой строки, затем взорваться () массив обратно вместе и fwrite () его вернуться к файлу.

Я всегда так делал. Мне будет любопытно узнать, есть ли способ изменять файлы на месте.

Если вы используете file () для in, после взрыва вы, вероятно, захотите, чтобы file_put_contents () тоже выполняла это в одной строке.

Скорее всего, я сделаю то, что предложил Джереми, но просто альтернативный способ сделать это — другое решение. Это не тестировалось и не использовалось и предназначено для систем * nix.

Основная проблема заключается в том, что длина новой строки может отличаться от длины старой. Если вам нужно изменить длину строки, нет возможности перезаписать хотя бы весь файл после измененной строки. Самый простой способ — создать новый измененный файл, а затем переместить его поверх исходного. Таким образом, читателям всегда доступен полный файл. Используйте блокировку, чтобы убедиться, что только один сценарий изменяет файл одновременно, и, поскольку вы собираетесь заменить файл, выполните блокировку для другого файла. Проверьте flock() .

Если вы уверены, что новая строка будет такой же длины, как и старая строка, вы можете открыть файл в режиме чтения / записи (используйте r+ в качестве второго аргумента для fopen() ) и вызвать ftell() , чтобы сохранить позицию, с которой начинается строка. время, прежде чем вызвать fgets() , чтобы прочитать строку. Как только вы найдете строку, которую хотите перезаписать, вы можете использовать fseek() для возврата к началу строки и fwrite() для новых данных. Один из способов заставить линию всегда быть одинаковой длины — это растянуть ее до максимально возможной длины.

Если файл действительно большой (файлы журналов или что-то в этом роде), и вы готовы пожертвовать скоростью ради потребления памяти, вы можете открыть два файла и, по сути, выполнить предложенный трюк Джереми Рутен, используя файлы вместо системной памяти.

Перезаписать строку в файле с помощью PHP

каков наилучший способ перезаписи определенной строки в файле? Я в основном хочу найти файл для строки «@parsethis » и перезаписать остальную часть этой строки чем-то другим.

5 ответов

Если файл не слишком большой, лучшим способом, вероятно, было бы прочитать файл в массив строк с file () поиск по массиву строк для строки и редактировать эту линию, затем implode () массив и fwrite() он возвращается в файл.

Если файл действительно большой (файлы журналов или что-то вроде этого), и вы готовы пожертвовать скоростью для потребления памяти, вы можете открыть два файла и по существу сделать трюк Джереми Рутен предложено использовать файлы вместо системной памяти.

ваша главная проблема заключается в том, что новая строка может быть не такой же длины, как старая. Если вам нужно изменить длину строки, нет никакого способа переписать хотя бы весь файл после измененной строки. Самый простой способ-создать новый, измененный файл, а затем переместить его поверх оригинала. Это есть полный файл доступен для читателей. Используйте блокировку, чтобы убедиться, что только один скрипт изменяет файл сразу, и так как вы собираетесь замените файл, сделайте блокировку на другом файле. Проверьте flock() .

если вы уверены, что новая строка будет такой же длины, как и старая, вы можете открыть файл в режиме чтения/записи (используйте r+ в качестве второго аргумента fopen() ) и вызов ftell() сохранить позицию линия начинается каждый раз перед вызовом fgets() читать линию. Как только вы найдете строку, которую хотите перезаписать, вы можете использовать fseek() вернуться к началу строки и fwrite() новые данные. Один из способов заставить линию всегда быть одинаковой длины-это разместить ее на максимально возможной длине.

или если ваш файл не слишком большой:

вам нужно будет выбрать разделители’#’, которых нет в файле.

Я бы, скорее всего, сделал то, что предложил Джереми, но только для альтернативного способа сделать это здесь другое решение. Это не было протестировано или использовано и предназначено для систем *nix.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *