Работа с документами на сервере через PHP

S3
На сайте с 25.08.2015
Offline
0
469

Здравствуйте. И сразу спасибо, кто окажет любую помощь.

Не могу понять, как реализовать замену определенной строки в текстовом документе на сервере через PHP.

* Текстовый документ на сервере - в дальнейшем ТД.

* База данных MySQL - в дальнейшем БД.

Суть в том, что мне нужно обновлять БД и ТД через форму на сайте методом $_POST.

ТД имеет примерно следующее содержание:

Package: ru.site.prog

Version: 1.0

Package: ru.site.prog1
Version: 1.0

Package: ru.site.prog2
Version: 2.0

и так почти 2000 строк. Нужно редактировать в ТД именно значение строки "Version:" под определенной строкой "Package: ...". Package и Version можно получать из БД.

Пробовал str_replace / substr_replace, но что-то пошло не так и в ТД заменялись ВСЕ АНАЛОГИЧНЫЕ версии под любым "Package: ...", а нужно чтобы заменялось только под определенной строкой "Package: ...".

Надеюсь, что описал внятно, ибо порой это бывает сделать сложно.

Ragnarok
На сайте с 25.06.2010
Offline
239
#1

Slav3a, регуляркой?

что-то типа

$newText = preg_replace("#Package: (.*?)\r\nVersion: (.*?)#smi", "Package: $1\r\nVersion: 3.0", $textDocument);

//TODO: перестать откладывать на потом
ДП
На сайте с 23.11.2009
Offline
203
#2

Структуру БД вы можете поменять или работаете уже с тем, что есть?

А то так бы вам каждую эту пару хранить в отдельной записи - тогда и замена будет на уровне БД. А при выводе уже компоновать текстовый документ из всех нужных записей.

siv1987
На сайте с 02.04.2009
Offline
427
#3

$package = preg_quote("ru.site.prog");

$version = '1.2';

$td = preg_replace("/^(Package: {$package}\s+Version: )\S+/m", "$1{$version}", $td);

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий