Як завантажити файл PHP в змінну?


98

Мені потрібно завантажити 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 та безпосередньо використовувати шлях?
Оса,

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

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

1
Я не бачу, як це пройде POST або GET. Я думаю, що відповідь необі була б більш правильною і доречною, оскільки зовнішній файл 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.
Франческо Беладонна

Як щодо зображень?
kta

1
Порада: Починаючи з PHP 4.3.0, ви можете скоротити останні два рядки просто $myvar = ob_get_clean();(див. Документацію ob_get_clean )
ADTC

Ідеально! Дякую.
lowtechsun

7

Якщо ви використовуєте http: // , як запропонував eyze, ви зможете лише прочитати вихід сценарію PHP. Ви можете прочитати сам сценарій PHP, лише якщо він знаходиться на тому ж сервері, що і ваш запущений сценарій. Тоді ви могли б використовувати щось подібне

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

привіт, це тільки статичний HTML. дивись цей приклад. якщо це файл, який ми збираємося завантажити; //////////////////?? php echo ("text1"); ?> Text2 //////////////// це вихід, який я отримав; //////////////////// Текст2 /////////////////////
Комбува

@Kombuwa, чи не могли б ви уточнити свою відповідь у редакції на своє початкове запитання, де у вас є більше місця для чіткого пояснення? Дякую =)
Девід каже відновити Моніку

7

Якщо ви хочете завантажити файл, не запускаючи його через веб-сервер, має працювати наступне.

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

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


Мені подобається цей метод. Просто мій файл не повністю сформований тегами <? Php та?> Для оцінки eval. Чи є інший спосіб?
ItsMeDom

Це не працює, якщо ви пишете php-код у цей файл.php
Фернандо Торрес

4

Теоретично ви можете просто використовувати fopen, а потім використовувати stream_get_contents.

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

Це повинно прочитати вам весь файл у рядку $, і не повинно оцінювати його. Хоча я здивований, що file_get_contents не працював, коли ви вказали локальний шлях ....


3

Крім того, ви можете почати вихідну буферизацію, зробити включення / вимагати, а потім зупинити буферизацію. За допомогою ob_get_contents () ви можете просто отримати речі, які були виведені цим іншим файлом PHP, в змінну.


3

Якщо у вашому файлі є такий варіант повернення:

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

Ви можете отримати це до такої змінної:

$data = include $filePath;

1
плюс1 Дякую, саме це я шукав
whitesiroi

1

file_get_contents () не працюватиме, якщо на вашому сервері вимкнено allow_url_fopen . У більшості спільних веб-хостів його вимкнено за замовчуванням через ризики безпеки. Чи не Крім того , в PHP6 , то allow_url_fopen варіант більше не існує , і всі функції будуть діяти так , як ніби вона permenantly відключена. Отже, це дуже поганий метод для використання.

Найкращим варіантом для використання, якщо ви отримуєте доступ до файлу через http, є cURL

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.