динамическое включение php-скриптов

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

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

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

Заранее спасибо МТС


person MoreThanChaos    schedule 21.06.2009    source источник
comment
Можете ли вы привести пример кода того, чего вы пытаетесь достичь?   -  person Dave Archer    schedule 21.06.2009
comment
Это было бы довольно сложно. Короче говоря, дело в том, что у меня есть одна или несколько переменных, таких как $page_content, содержащая содержимое, скажем, статьи, и пока я включаю в свой код другие скрипты вручную, все работает так, как я хочу. Когда я включаю функцию incsidee, все перестает работать. Я понял, что это связано с ограничениями, вызванными областью действия переменной в функции, поэтому теперь я ищу способ справиться с этой проблемой, потому что динамическое включение скриптов было бы полезно для меня.   -  person MoreThanChaos    schedule 21.06.2009


Ответы (2)


Похоже, ты занимаешься опасными вещами. Рассматривали ли вы случай, когда 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.
}
person soulmerge    schedule 21.06.2009
comment
я знаю об опасности, но я думаю, что я уже все понял на уровне, который не оставит никакого риска. Эта часть функции будет доступна только для пользователей-администраторов. Мне также пришлось поэкспериментировать и немного прочитать о решении, представленном в этом ответе, и проверить, действительно ли это то, что мне нужно. - person MoreThanChaos; 21.06.2009

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

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

ob_start();
extract($my_variables_array);
include $phpfile;
$output = ob_get_clean();
person bumperbox    schedule 21.06.2009