назначить вывод выполнения скрипта PHP переменной?

Я сделал веб-сайт, я, вероятно, не делал этого, как должен, но в то время я был новичком в PHP. Поэтому, чтобы избавить меня от большого количества попыток переписать сценарий для отображения фотографий на моем сайте, мне нужно запустить * .php-файл и сделать вывод, если он перейдет в var, называемый «$ html». Я знаю, это может показаться странным, но это то, что мне нужно.

Изнутри index.php, я включаю photos.php; В photos.php мне нужно объявить $ html с выходом скрипта под названием photos_page.php;

Например: $html = parse_my_script("../photos_page.php");

спасибо

Ответ. Для этого вы можете использовать буферизацию / управление выводами PHP. Вот некоторая простая функция, которая получает вывод скрипта и возвращает его:

Код:

Используемые вещи: ob_start() ob_get_clean() is_readable()

 function getScriptOutput($path, $print = FALSE) { ob_start(); if( is_readable($path) && $path ) { include $path; } else { return FALSE; } if( $print == FALSE ) return ob_get_clean(); else echo ob_get_clean(); } 

Применение:

 $path = '../photos_page.php'; $html = getScriptOutput($path); if( $html === FALSE) { # Action when fails } else { echo $html; } 

Вы захотите попробовать file_get_contents

 $html = file_get_contents("http://www.yourwebsite.com/pages/photos_page.php"); //this will not work since it won't run through web server //$html = file_get_contents("../photos_page.php"); 

Это должно сделать трюк:

 ob_start(); require('../photos_page.php'); $html = ob_get_contents(); ob_end_clean(); 

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

 ob_start(); include '../photos_page.php'; $html = ob_get_contents(); ob_end_clean(); 

Если вы хотите, вы можете поместить эту функциональность в функцию, чтобы она работала, как вы описали:

 function parse_my_script($path) { ob_start(); include $path; $html = ob_get_contents(); ob_end_clean(); return $html; } 

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

Для получения дополнительной информации проверьте все функции управления выходом:

http://www.php.net/manual/en/ref.outcontrol.php

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

Сначала создайте буфер, вызвав функцию ob_start() . Когда вы закончите сохранение вывода в буфере, вызовите ob_get_clean() чтобы вернуть содержимое буфера и очистить буфер.

 ob_start(); include "../photos_page.php"; $html = ob_get_clean(); 

Для этого вы должны использовать file_get_contents("http://yourdomain.com/path/to/photos_page.php") .


НО: Если бы я был вами, я бы сделал это так:

photos_page.php

 <?php function get_photos_html() { $html = // generate html return $html; } ?> 

main_file.php

 <?php include('../photos_page.php'); $html = get_photos_html(); ?> 

Я предполагаю, что вы опубликовали псевдокод.

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

Вы хотите посмотреть на методы ob_start () и ob_flush (), ob_get_contents () и т. Д. http://us.php.net/manual/en/ref.outcontrol.php

Это позволит вам выводить данные из вашего файла PHP в определенную переменную.

Вы, конечно, должны подумать о переписывании 🙂

Итак, в основном:

 ob_start(); include('yourfile.php'); $html = ob_get_contents(); ob_end_clean(); в ob_start(); include('yourfile.php'); $html = ob_get_contents(); ob_end_clean(); 

Если ваши photos_page.php работают следующим образом:

 <?php // very basic code $img = "/path/to/my/image.jpg"; echo '<img src="' . $img . '">' . PHP_EOL; ?> 

Тогда вы можете использовать:

 $html = file_get_contents('http://mysite.com/photos_page.php'); 

Но на самом деле, вы должны переписать код, поэтому вам не нужно это делать.