Включить - используя строку, а не имя файла - PullRequest
3 голосов
/ 07 сентября 2011

Я бы хотел запустить include для строки, а не для файла, но не знаю, как этого добиться.

//This is the desired functionality
include($filename);

//But I want to do something like this instead.
$file_contents = getFileFromCacheOrSomewhereElse($filename);
include($file_contents);  // Doens't work...
eval($file_contents);     // Also incorrect.

Обратите внимание: «eval» - это не то же самое, что include - «include» выводит содержимое файла (и выполняет любые теги PHP), тогда как «eval» выполняет строку как код PHP.

В качестве примера использования можно загрузить файл шаблона из Memcache (в виде строки), затем запустить include для этой строки, а не запустить include и полагаться на PHP filecache.

Ответы [ 3 ]

10 голосов
/ 07 сентября 2011

Если вы можете включить on настройки allow_url_fopen и allow_url_include php.ini, то альтернативой будет data потоковая оболочка ( ручная ).

include 'data:text/plain,' . urlencode($file_contents);
7 голосов
/ 07 сентября 2011
eval("?>" . $file_contents . "<?php ");

делает это.

1 голос
/ 07 сентября 2011

Хранение PHP-кода в memcache - не самая лучшая идея.
И его последующее подтверждение еще хуже.

Любой кэш кода операции, APC или EAccelerator будет кэшировать ваши PHP-файлы на лету, безстранные усилия, как это, и даже анализировать его для более быстрого выполнения.

РЕДАКТИРОВАТЬ.Учитывая результаты голосования по прошествии всех этих лет, я предполагаю, что этот вопрос привлекает только новичков, у которых такая же странная прихоть.Итак, я должен повторить: хотя это и опровергает вашу блестящую идею,

просто оставьте свои включения как есть

Они будут кэшироваться намного лучше и выполняться намного быстрее благодаря внутреннему кэшу кода операции PHP.

...