динамически включая сценарии php - PullRequest
0 голосов
/ 21 июня 2009

Я занимаюсь разработкой собственной CMS и хочу реализовать функциональные возможности для динамического включения существующего сценария PHP, расположенного на сервере.

есть переменная $ page_content, которая содержит содержимое страницы, включая код HTML и JS, также она содержит некоторый текст, распознаваемый регулярным выражением, распознанный текст затем обрабатывается и заменяется требуемыми динамически создаваемыми данными. Я также хотел бы инициировать включение новых сценариев с помощью этого механизма регулярных выражений, но здесь есть проблема, потому что распознавание регулярных выражений решается функцией, и кажется, что если я делаю «включить» или «требовать» внутри функции, включенный сценарий ограничен переменной функции сфера, поэтому я не могу получить поведение, которое мне нужно.

Что я должен сделать, чтобы все работало так, как я хочу, я имею в виду, что я могу более широко использовать эти динамически включенные скрипты.

Спасибо заранее MTH

Ответы [ 2 ]

1 голос
/ 21 июня 2009

Звучит так, будто вы делаете опасные вещи. Рассматривали ли вы случай, когда HTML / JS (который вставляется пользователем вашей CMS, я полагаю) содержит строки, соответствующие вашему регулярному выражению?

Что касается вопроса об определении объема: функция compact() может упаковать текущие переменные области видимости в массив, а extract() может установить их снова. Но будьте очень, очень, очень осторожны при использовании этих функций. Вы можете неожиданно перезаписать другие переменные, которые вам действительно нужны.

function test($vars) {
    extract($vars);
    # The array might have contained the key 'vars', in which case
    # your function argument is now overwritten.
}
0 голосов
/ 21 июня 2009

взгляните на функцию извлечения php, он позволяет загружать массив переменных в область, которую вы хотите

http://nz2.php.net/manual/en/function.extract.php

ob_start();
extract($my_variables_array);
include $phpfile;
$output = ob_get_clean();
...