Включить из потока «php://memory»

Я пишу систему для браузерного приложения, которое будет хранить некоторые определенные 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». Пользователи без прав администратора не имеют доступа для написания сценариев, хранящихся в базе данных, я знаю, что это требует особого отношения в течение жизненного цикла моего приложения.

8
задан hakre 12 June 2012 в 09:40
поделиться