Как загрузить файл PHP в переменную?


99

Мне нужно загрузить файл PHP в переменную. подобноinclude();

Я загрузил такой простой HTML-файл:

$Vdata = file_get_contents("textfile.txt");

Но теперь мне нужно загрузить файл PHP.

Ответы:


116

Я полагаю, вы хотите получить контент, созданный PHP , если да, используйте:

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

В противном случае, если вы хотите получить исходный код файла PHP , он такой же, как файл .txt:

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

6
что, если я хочу получить «контент, созданный PHP» без использования http и напрямую использовать путь?
Osa

4
@Osa: в зависимости от ваших потребностей вы, вероятно, можете использовать eval()или, если вы имеете дело с более сложным кодом: github.com/nikic/PHP-Parser .
Аликс Аксель

2
реализация парсера php только для этого кажется огромным излишеством
Дэвид Фаринья

1
Я не понимаю, как это пройдет POST или GET. Я думаю, что ответ neobie будет более правильным и уместным, поскольку внешний файл PHP будет обрабатываться в контексте текущего.
ADTC

Используя приведенный выше пример, вы можете использовать get_template_directory_uri () и присоединиться к пути к вашему файлу. Это решит проблему использования прямого пути. $Vdata = file_get_contents(get_template_directory_uri() . '/path/to/file/in/theme.text');
Ян Брюс,

124
ob_start();
include "yourfile.php";
$myvar = ob_get_clean();

ob_get_clean ()


1
Это работает! Но всякий раз, когда я пытаюсь включить: yourfile.php? Id = 3, это не сработает. Какие-либо предложения?
tvgemert

1
Поскольку вы больше не используете http, в этом случае вам нужно передавать значения через $ _GET.
Francesco Belladonna

Как насчет изображений?
kta

1
Совет: Начиная с PHP 4.3.0, вы можете сократить последние две строки до простого $myvar = ob_get_clean();(см. Документацию ob_get_clean )
ADTC

Отлично! Спасибо.
lowtechsun

8

Если вы используете http: // , как было предложено eyze, вы сможете только прочитать вывод PHP-скрипта. Вы можете читать сам скрипт PHP, только если он находится на том же сервере, что и ваш запущенный скрипт. Затем вы можете использовать что-то вроде

$Vdata = file_get_contents('/path/to/your/file.php");

привет, это только статический HTML. см. этот пример. если это файл, который мы собираемся загрузить; ///////////////// <? php echo ("text1"); ?> Text2 /////////////// это результат, который я получил; //////////////////// Text2 ///////////////////
Kombuwa

@Kombuwa, не могли бы вы пояснить свой ответ в отредактированном виде на исходный вопрос, где у вас есть больше места для четких объяснений? Спасибо =)
Дэвид просит восстановить Монику

7

Если вы хотите загрузить файл, не запуская его через веб-сервер, должно работать следующее.

$string = eval(file_get_contents("file.php"));

Это загрузит, а затем оценит содержимое файла. Файл PHP необходимо будет полностью сформирован с <?phpи ?>теги для evalоценки его.


Мне нравится этот метод. Просто мой файл не полностью сформирован с помощью тегов <? Php и?>, Чтобы eval мог его оценить. Есть ли другой путь?
ItsMeDom 08

Это не сработает, если вы напишете php-код в этот файл .php
Фернандо Торрес,

4

Теоретически вы можете просто использовать fopen, а затем использовать stream_get_contents.

$stream = fopen("file.php","r");
$string = stream_get_contents($stream);
fclose($stream);

Это должно прочитать весь файл в $ string для вас, а не оценивать его. Хотя я удивлен, что file_get_contents не работал, когда вы указали локальный путь ....


3

В качестве альтернативы вы можете запустить буферизацию вывода, выполнить include / require и затем остановить буферизацию. С помощью ob_get_contents () вы можете просто получить то, что было выведено другим файлом PHP, в переменную.


3

Если в вашем файле есть такой оператор возврата:

<?php return array(
  'AF' => 'Afeganistão',
  'ZA' => 'África do Sul',
  ...
  'ZW' => 'Zimbabué'
);

Вы можете получить это в такой переменной:

$data = include $filePath;

1
plus1 Спасибо, это то, что я искал
whitesiroi

1

file_get_contents () не будет работать, если на вашем сервере отключен allow_url_fopen . На большинстве общих веб-хостов он отключен по умолчанию из-за угроз безопасности. Кроме того, в PHP6 параметр allow_url_fopen больше не будет существовать, и все функции будут действовать так, как если бы он был постоянно отключен. Так что это очень плохой метод для использования.

Если вы обращаетесь к файлу через http, лучше всего использовать cURL.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.