Установка:Сохранение .php файла и сохранение включает в себя также (возможно)
У меня есть стандартный .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>
и сноска .php как это:
<p>The end of my page</p>
</body>
Я пишу PHP-скрипт, который позволяет вам редактировать любой элемент «.editable» на странице. Моя проблема в том, что эти редактируемые области могут появляться в любых включенных файлах, а также в основной части index.php.
Мой php-код захватывает файл index.php файлом_get_contents(); который работает хорошо. Я также могу редактировать и сохранять любые «разрешенные» регионы в 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 дом синтаксического анализ
UPDATE
Я играл с регулярными выражениями, чтобы попытаться совместить включенные. Я довольно мусор в регулярном выражении, но я думаю, что приближаюсь. Вот то, что я до сих пор:
$findinclude = '/(?:include|include_once|require|require_once)\s*(?:[a-z]|"|\(|\)|\'|_|\.|\s|\/)*(?=(?:[^\<\?]|[^\?\>])*\?>)/i';
Это соответствует довольно хорошо, хотя это, кажется, вернуть нечетные) и "при использовании preg_match. Я пытаюсь добавить немного безопасности в регулярное выражение, чтобы убедиться, что оно совпадает только между php-тегами - эта часть: (? = (?: [^ \ < \?] | [^ \?>]) * \?>) - но он возвращает только первое включение на странице. Любые советы о том, как улучшить это регулярное выражение? (Я был у него около 6 часов)
Это серьезное отверстие для безопасности. Позволить людям редактировать фактический PHP-код, который будет работать на вашем сервере, не является разумным. –
@George Edison - код PHP не редактируется. Только HTML вокруг PHP. По моему мнению (при условии, что все сохраненные данные проверены правильно) это ничем не отличается от системы, которая редактирует файлы HMTL. – Scott