Настройка:
У меня есть стандартный файл .php (index.php), который содержит два файла: один для заголовка (header.php) и один для нижнего колонтитула (footer.php). Файл index.php выглядит следующим образом:
index.php
<?php
include header.php;
?>
<h2>Hello</h2>
<p class="editable">Lorem ipsum dolar doo dah day</p>
<?php
include footer.php;
?>
header.php вот так:
<html>
<head>
<title>This is my page</title>
</head>
<body>
<h1 class="editable">My Website rocks</h1>
и footer .php вот так:
<p>The end of my page</p>
</body>
Я пишу скрипт PHP, который позволяет вам редактировать любые элементы ".editable" на странице. Моя проблема в том, что эти редактируемые области могут появляться в любых включаемых файлах, а также в основной части index.php.
Мой php-код захватывает файл index.php с помощью file_get_contents (); который работает хорошо. Я также могу редактировать и сохранять любые «.editable» регионы в index.php.
Моя проблема:
Мне не удалось найти способ «найти» включения и проанализировать их для «.editable» регионов. Я ищу предложения о том, как мне работать со всеми включениями в index.php - проверяя их на наличие редактируемых областей. Нужно ли использовать регулярные выражения, чтобы найти «include * .php»? Я не уверен, с чего начать ...
Для тех из вас, кто хочет увидеть мой PHP-код. Я использую класс PHP: [текст ссылки] [1], который позволяет мне писать код вроде:
// load the class and file
$html = new simple_html_dom();
$html->load_file("index.php");
// find the first editable area and change its content to "edited"
$html->find('*[class*=editable]', 0)->innertext = "Edited";
// save the file
$html->save(index.php);
[1]: http://simplehtmldom.sourceforge.net/manual_api.htm простой парсер php dom
ОБНОВЛЕНИЕ
Я играл с регулярными выражениями, чтобы попытаться сопоставить включения. Я довольно мусор в регулярных выражениях, но я думаю, что приближаюсь. Вот что у меня есть:
$findinclude = '/(?:include|include_once|require|require_once)\s*(?:[a-z]|"|\(|\)|\'|_|\.|\s|\/)*(?=(?:[^\<\?]|[^\?\>])*\?>)/i';
Это соответствует довольно хорошо, хотя, похоже, возвращает нечетное) и 'при использовании preg_match. Я пытаюсь добавить немного безопасности в регулярное выражение, чтобы обеспечить совпадение только между тегами php - эта часть: (? = (?: [^ \ <\?] | [^ \?>]) * \?>) - но он возвращает только первое включение на странице. Любые советы о том, как улучшить это регулярное выражение? (Я был у него около 6 часов)