2013-11-30 3 views
0

Я хотел бы скопировать содержимое файла php в переменную и выполнить его, а не распечатать! я узнал, что есть 2 способа:Копирование содержимого файла в переменную

file_get_contents('http://YOUR_HOST/YOUR/FILE.php'); 

Таким образом код выполняется, но не так как я хочу, я объясню:

a.php:

<?php 
require 'file.php'; 
$output = file_get_contents('http://example.com/b.php'); 
echo $output; 
?> 

b.php:

<?php 
$hello = get_welcome_text(); 
echo $hello; 
?> 

Когда я исполняю файл a.php я получаю вызов к неопределенному ошибке функции, у меня нет язя почему он не распознает строку require, похоже, что она выполняет b.php отдельно.

Другой метод:

file_get_contents('path/to/YOUR/FILE.php'); 

Этот метод просто напечатать скрипт PHP вместо его выполнения.

Так что я хотел бы знать, есть ли способ скопировать содержимое файла php в переменную и выполнить его так же, как include/require, и, пожалуйста, не предлагайте мне использовать include/require, потому что это не то, что я ищу. благодаря!

+0

Вам нужно использовать 'exec' для выполнения вашего PHP-файла. –

+0

Пробовал и не смог, можете ли вы расширить? –

ответ

1

Файлы могут вернуть значение, поэтому да, вы можете использовать include.

included.php:

<?php 
return 2 + 2; 

parent.php:

<?php 
$number = include 'included.php'; 
echo $number; 
+0

Мои файлы не возвращают значения, они на самом деле являются большими страницами веб-сайта, которые смешиваются с java-скриптом и html. –

0

В первом методе '' сервер выполняет separare запроса для вашего file_get_contents, поэтому никакой среды от вызывающего сценария будет доступна внутри него.

Используйте второй метод, чтобы получить содержимое скрипта, а затем просто оцените его.

eval(file_get_contents('http://.../b.php.txt')); 

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

a.php

$r = eval(file_get_contents('http://.../b.php.txt')); 
if ($r) b_foo($bar); 

b.php

function b_foo($baz) { 
return 42; 
} 
return true; // module loaded ok 

Конечно, вы знаете, что выполнение непроверенного кода от третьих сторон в контексте сервера является плохой практикой, но если вам это действительно нужно .. . :)

+0

Я получаю: код eval() 'd, код, который я пытаюсь скопировать, очень большой и смешанный с java script/html и т. Д. Возможно из-за этого? –

+0

И теперь мне не удалось открыть поток: Нет такого файла или каталога :( –

+0

У вас есть доступ к удаленной конфигурации сайта или исходному коду? – shomeax

Смежные вопросы