eval()
и include
фактически одинаковы.Так что eval()
работает с несколькими строками - только к вашему сведению.Однако я бы предпочел include
здесь, я всегда думаю, что это быстрее.Может быть, я ошибаюсь, не знаю.
Тем не менее, я думаю, что вы должны отладить свой код, я не вижу причины как таковой, почему он не должен работать.Возможно, вам понадобится rewind
указатель (вы это прокомментировали), но вы должны проверить из первых рук, , что ваша конфигурация PHP позволяет включать URL .Я знаю, что этот параметр запрещает использование data://
URI, поэтому вы можете включить это.
Также вы всегда можете попробовать, если PHP может открыть память, используя file_get_contents
и выгрузку.Это должно дать вам код.Если нет, то вы уже сделали какую-то ошибку (например, без перемотки или чего-то подобного).
Редактировать: Я не зашел так далеко ( demo ):
<?php
/**
* Include from “php://memory” stream
* @link https://stackoverflow.com/q/9944867/367456
*/
$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);
var_dump(stream_get_contents($fp));
Это то, что я узнал:
- Не стоит закрывать «файл».
php://memory
является потоком после закрытия, он исчезнет. - Вам необходимо получить доступ к
$fp
как к потоку, что невозможно для include
из коробки AFAIK. - Затем вам нужно будет создать потоковую оболочку, которая отображает ресурс потока на имя файла.
- Когда вы это сделаете, вы можете включить поток памяти.
- Необходимые вам настройки PHPпроверить в любом случае.Их более одного, обратитесь к руководству по PHP.
Возможно, будет проще использовать URI данных ( demo ):
<?php
/**
* Include from “php://memory” stream
* @link https://stackoverflow.com/q/9944867/367456
*/
$thing = <<<TEST
<?php
\$thing = array();
print "Testing code in here.";
var_dump(\$thing);
TEST;
include 'data://text/plain;,'. urlencode($thing);
См. Какхорошо: Включите код из потока PHP