назначить вывод выполнения PHP-скрипта на переменную? - PullRequest
5 голосов
/ 03 мая 2011

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

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

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

Спасибо

Ответы [ 9 ]

10 голосов
/ 03 мая 2011

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

Код:

Используемые вещи: 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;
}
2 голосов
/ 03 мая 2011

Вы захотите попробовать 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");
2 голосов
/ 03 мая 2011

Это должно сработать:

ob_start();
require('../photos_page.php');
$html = ob_get_contents();
ob_end_clean();
1 голос
/ 03 мая 2011

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

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

ob_start();
include "../photos_page.php";
$html = ob_get_clean();
1 голос
/ 03 мая 2011

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

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

1 голос
/ 03 мая 2011

Вы должны использовать 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();

?>
0 голосов
/ 03 мая 2011

Если ваш 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');

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

0 голосов
/ 03 мая 2011

Вы хотите взглянуть на метод 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();
0 голосов
/ 03 мая 2011

Полагаю, вы разместили псевдокод.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...