Я пишу систему для браузерного приложения, которое будет хранить некоторые определенные php-скрипты в базе данных, а затем извлекать их и выполнять при необходимости. Сначала я попытался использовать exec() и передать в php вывод сценария, который извлекал сценарии из базы данных и распечатывал их. Это сработало в одном случае использования, но не во всех, и в любом случае кажется хрупким, поэтому я ищу лучший способ.
Сейчас я пытаюсь добиться этого, используя файловый поток PHP в памяти. Например:
$thing = <<<'TEST'
<?php
$thing = array();
print "Testing code in here.";
var_dump($thing);
?>
TEST;
$filename = "php://memory";
$fp = fopen($filename, "w+b");
fwrite($fp, $thing);
//rewind($fp);
fclose($fp);
include "php://memory";
Однако при выполнении скрипта ничего не печатается. Возможно ли это вообще с помощью этого средства, а если нет, то есть ли другой способ сделать это? Я стараюсь избегать записи временных файлов и чтения из них, так как уверен, что доступ к файловой системе замедлит работу. Есть ли URL-адрес, который я могу предоставить для «включения», чтобы он читал поток памяти, как если бы это был файл?
Я не думаю, что eval()
сделает это, поскольку, если я правильно помню, он ограничен одной строкой.
Также, пожалуйста, никаких ответов типа «eval = include = hell». Пользователи без прав администратора не имеют доступа для написания сценариев, хранящихся в базе данных, я знаю, что это требует особого отношения в течение жизненного цикла моего приложения.