Хотел удалить определенный кусок кода в php-файле, решил сделать это с str_replace(). Таким образом:
$filename = 'check.php';
$a = 'public function actionTitle1()
{
$this->title = "Title 1";
$this->meta_author = "Arandar";
$this->meta_copyright = "Copyright © 2018 Arandar. All Rights Reserved.";
$content = $this->view->render("title1", array(), true);
$this->render($content);
}';
$b = '';
$file1 = file_get_contents($filename);
$file1 = str_replace($a, $b, $file1);
file_put_contents($filename, $file1);
Вот так выглядит файл, где нужно удалить файл с соблюдением табуляции и переносов:
public function actionTitle1()
{
$this->title = "Title 1";
$this->meta_author = "Arandar";
$this->meta_copyright = "Copyright © 2018 Arandar. All Rights Reserved.";
$content = $this->view->render("title1", array(), true);
$this->render($content);
}
Но увы, не работает. Файл обновляется, однако остается без изменений. Подскажите, будьте добры, в чем ошибка, ибо уже все облазил, нашел какие-то варианты на JS, однако хотелось бы на PHP.
Для вашего текущего кода (контроллер actionTitle()) вполне подойдёт такой шаблон:
'~public function actionTitle1\(.*?\)[^{]+\{[^}]+\}~s'
Как видно из начала шаблона, под удаление попадает строка, начинающаяся со слов public function actionTitle1, и заканчивающаяся фигурной скобкой }. Но если в теле метода встретится ещё пара фигурных скобок, то этот вариант сработает не корректно. Именно поэтому я в комментариях говорил, что для регулярных выражений нужно учитывать все возможные варианты подстрок.
$str = '
public function actionTitle1()
{
$this->title = "Title 1";
$this->meta_author = "Arandar";
$this->meta_copyright = "Copyright © 2018 Arandar. All Rights Reserved.";
$content = $this->view->render("title1", array(), true);
$this->render($content);
}
public function actionBody()
{
$this->title = "Title 1";
$this->meta_author = "Arandar";
$this->meta_copyright = "Copyright © 2018 Arandar. All Rights Reserved.";
$content = $this->view->render("title1", array(), true);
$this->render($content);
}
';
echo preg_replace('~public function actionTitle1\(.*?\)[^{]+\{[^}]+\}~s', '', $str);
В результате вы получите строку:
public function actionBody()
{
$this->title = "Title 1";
$this->meta_author = "Arandar";
$this->meta_copyright = "Copyright © 2018 Arandar. All Rights Reserved.";
$content = $this->view->render("title1", array(), true);
$this->render($content);
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей