X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> php найти, заменить или добавить строку. Нужна помощь.
scanread
scanread
Topic Starter сообщение 15.4.2014, 18:14; Ответить: scanread
Сообщение #1


ДЕТАЛИ В ПРОФИЛЕ
******

Группа: Active User
Сообщений: 1005
Регистрация: 16.12.2009
Поблагодарили: 178 раз
Репутация:   54  


В общем, есть вот такой скрипт:

Код
$fileop= "test.php";
$oldstr = "title=\'$title\',";
$newstr = "title=\'$title\',\n title_en=\'$title_en\',";
$file = file($fileop);
if (is_array($file))
    {
    foreach($file as $key => $value)
        {
        $file[$key]= preg_replace($oldstr, $newstr, $value);
        }
    }
    else
    {
    exit ("Ошибка");
    }
$fp = fopen($file, "w+");
fwrite($fp,implode("",$file));
fclose($fp);
echo "Строка заменена";


Выдает ошибку preg_replace(): Delimiter must not be alphanumeric or backslash in

и это:
Warning: fopen() expects parameter 1 to be string, array given in on line 19 Warning: fwrite() expects parameter 1 to be resource, boolean given in

и тому подобные... Мне нужно найти и заменить в пхп файле строку

Код
title='$title',
по всему файлу на
Код
title='$title',
                    title_en='$title_en',
или же просто дописать с новой строки
Код
title_en='$title_en',


Я так понимаю дело в кавычках. Подправил слешами, чтобы не экранировались, все равно не работает что-то. Объясните, кто может, пожалуйста, как искать подобные строки и заменять их или же дописывать после них нужную часть кода с последующим сохранением файла. Заранее благодарю.


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
_AXE_
_AXE_
сообщение 15.4.2014, 18:22; Ответить: _AXE_
Сообщение #2


Новичок
*

Группа: User
Сообщений: 22
Регистрация: 14.4.2014
Из: Екатеринбург
Поблагодарили: 0 раз
Репутация:   0  


Дело даже не в кавычках. Если Вам заменить в PHP-файле, то может следует прибегнуть к стандартным инструментам (поиск/замена) текстовых редакторов?
PS: в коде ошибки везде, где только это возможно, даже в форматировании кода

Сообщение отредактировал _AXE_ - 15.4.2014, 18:24


--------------------
Для благодарностей была придумана карма!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
x64
x64
сообщение 15.4.2014, 18:31; Ответить: x64
Сообщение #3


F.A.L.L.O.U.T.
*******

Группа: Super Moderator
Сообщений: 3424
Регистрация: 30.6.2011
Из: Железнодорожный (Балашиха)
Поблагодарили: 2744 раза
Репутация:   289  


регулярки для данной задачи лишнее. функции f*() — тоже
Код
$fileop = 'test.php';
$oldstr = "title=\'$title\',";
$newstr = "title=\'$title\',\n title_en=\'$title_en\',";
$buf = file_get_contents($fileop);
$buf = str_replace($oldstr, $newstr, $buf);
file_put_contents($fileop, $buf);
echo 'Строка заменена';


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
scanread
scanread
Topic Starter сообщение 15.4.2014, 18:45; Ответить: scanread
Сообщение #4


ДЕТАЛИ В ПРОФИЛЕ
******

Группа: Active User
Сообщений: 1005
Регистрация: 16.12.2009
Поблагодарили: 178 раз
Репутация:   54  


_AXE_, безусловно, текстовым редактором проще всего найти и заменить. Зачем тогда я вопросом этим задался? Вполне логично предположить, что необходимо решить вопрос с помощью php, а не чем-то другим.

x64, спасибо. Проверил. Написало, что строка изменена, но ее почему-то не изменило.... :blink:

Еще вопрос, как дописать именно после title='$title', - title_en='$title_en', ?

Сообщение отредактировал scanread - 15.4.2014, 18:52


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
x64
x64
сообщение 15.4.2014, 19:10; Ответить: x64
Сообщение #5


F.A.L.L.O.U.T.
*******

Группа: Super Moderator
Сообщений: 3424
Регистрация: 30.6.2011
Из: Железнодорожный (Балашиха)
Поблагодарили: 2744 раза
Репутация:   289  


смотрите, в чём дело: кавычки ' и " (одинарная и двойная) трактуются совершенно по разному
код:
Код
$oldstr = 'title=\'$title\',';
echo $oldstr;

выведет
Цитата
title='$title',


в то время, как в коде:
Код
$title = 'aga';
$oldstr = "title=\'$title\',";
echo $oldstr;

будет производиться подстановка переменной $title в строку, т. е. результатом работы будет уже строка
Цитата
title='aga',


исходя из того, какое поведение требуется, нужно использовать одинарные иди двойные кавычки

Цитата(scanread @ 15.4.2014, 18:45) *
как дописать именно после title='$title',

в этом случае, можно использовать функцию strpos() для поиска с последующими substr() для вырезания нужных мест с дальнейшей конкатенацией. но через замену проще.

Сообщение отредактировал x64 - 15.4.2014, 19:13


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
scanread
scanread
Topic Starter сообщение 15.4.2014, 19:17; Ответить: scanread
Сообщение #6


ДЕТАЛИ В ПРОФИЛЕ
******

Группа: Active User
Сообщений: 1005
Регистрация: 16.12.2009
Поблагодарили: 178 раз
Репутация:   54  


x64,

дело в том, что необходимо найти участок кода
Код
title='$title',


Т.е., он уже использует кавычки. И заменить его, выходит, на
Код
title='$title',
title_en='$title_en',


Или же: после одного дописать с новой строки другое. Но везде в переменных используются эти кавычки и заодно якобы и переменная. Как же тогда записать правильно? :huh:

UPD: докумекалсО...

Код
$oldstr = 'title=\'$title\',';
$newstr = 'title=\'$title\', title_en=\'$title_en\',';
$buf = file_get_contents($fileop);
$buf = str_replace($oldstr, $newstr, $buf);
file_put_contents($fileop, $buf);
echo 'Строка заменена';


спасибо.

Сообщение отредактировал scanread - 15.4.2014, 19:20


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
x64
x64
сообщение 15.4.2014, 19:19; Ответить: x64
Сообщение #7


F.A.L.L.O.U.T.
*******

Группа: Super Moderator
Сообщений: 3424
Регистрация: 30.6.2011
Из: Железнодорожный (Балашиха)
Поблагодарили: 2744 раза
Репутация:   289  


тогда используйте одинарные кавычки
Код
$fileop = 'test.php';
$oldstr = 'title=\'$title\',';
$newstr = 'title=\'$title\',' . "\n" . ' title_en=\'$title_en\',';
$buf = file_get_contents($fileop);
# $cnt — количество замен в строке
$buf = str_replace($oldstr, $newstr, $buf, $cnt);
file_put_contents($fileop, $buf);
if ($cnt) echo 'Строка заменена';
else echo 'Строка не найдена';



вы молодец :)

Сообщение отредактировал x64 - 15.4.2014, 19:25


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Что лучше, фриланс, удаленка, или работа в офисе солидной компании?
95 Levizar 7615 Сегодня, 21:57
автор: Зотов
Открытая тема (нет новых ответов) Веб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
18 qpPeW 3340 Сегодня, 13:32
автор: qpPeW
Открытая тема (нет новых ответов) Очень нужна работа
Желательно на постоянной основе
11 Yuliya_Klim 1659 Вчера, 19:26
автор: beliaev
Открытая тема (нет новых ответов) Домен .рф или .ru?
Есть ли сейчас разница для поисковых систем?
11 SuperPill 1516 Вчера, 18:14
автор: RICHHost
Открытая тема (нет новых ответов) Нужна помощь в активации аккаунта AdSense
8 dimaguru 2284 Вчера, 17:43
автор: RICHHost


 



RSS Текстовая версия Сейчас: 12.12.2017, 22:11
Дизайн