Я сделал веб-сайт, я, вероятно, не делал этого, как должен, но в то время я был новичком в 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; }
Это, конечно, предполагает, что ваш включенный файл не требует использования глобальных переменных.
Для получения дополнительной информации проверьте все функции управления выходом:
Буферизация вывода будет содержать выводимый текст в памяти вместо фактического вывода его в ответ.
Сначала создайте буфер, вызвав функцию 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');
Но на самом деле, вы должны переписать код, поэтому вам не нужно это делать.