php echo включает - PullRequest
       13

php echo включает

1 голос
/ 23 сентября 2009
echo ("<div style=\"text-align:center\">" . include ('file.php') . "</div>\n");

Я не уверен, почему, но всякий раз, когда я помещаю эту строку в мой скрипт, я получаю пустой экран: (

Ответы [ 10 ]

7 голосов
/ 23 сентября 2009
echo "<div style=\"text-align:center\">";
include ('file.php');
echo "</div>\n";

Включить не возвращает результат анализа файла, поэтому нет смысла объединять его здесь.

4 голосов
/ 23 сентября 2009

При запуске этого кода:

echo ("<div style=\"text-align:center\">" . include ('temp-2.php') . "</div>\n");

(который я скопировал из вашего примера, меняя только имя файла)

Я получаю это предупреждение:

Warning: include(temp-2.php</div> ) [function.include]: failed to open stream: No such file or directory

Не уверен, что () для директивы include делает то, что вы ожидаете ...


На самом деле, пример # 4 на странице справки include выглядит так, как будто это может объяснить это:

<?php
// won't work, evaluated as include(('vars.php') == 'OK'), i.e. include('')
if (include('vars.php') == 'OK') {
    echo 'OK';
}

// works
if ((include 'vars.php') == 'OK') {
    echo 'OK';
}
?>


И, действительно, переписав свой код так:

echo ("<div style=\"text-align:center\">" . (include 'temp-2.php') . "</div>\n");

Работает намного лучше: без предупреждения - и файл действительно включен правильно.


Как примечание: если вы получаете белый экран, возможно, это из-за того, что ваша конфигурация «скрывает» ошибки и предупреждения - что не очень хорошо для среды разработки: их отображение может немного вас остановить.

Чтобы изменить это, вы можете использовать опции error_reporting и display_errors в вашем файле php.ini.

Или, если у вас нет доступа к этому, вы можете использовать error_reporting и ini_set - что-то подобное в начале вашего сценария может делать:

error_reporting(E_ALL);
ini_set('display_errors', 'On');

Примечание: конечно, вы не хотите, чтобы в вашей производственной среде вы регистрировали ошибки (см. log_errors), а не отображали их.

1 голос
/ 23 сентября 2009

Я думаю, вам нужно сделать что-то вроде этого:

ob_start();
include('file.php');
$contents = ob_get_clean();

echo ("<div style=\"text-align:center\">" . $contents . "</div>\n");

директива include не возвращает ничего, поэтому попытка добавить ее в строку не будет работать.

1 голос
/ 23 сентября 2009

include - это не функция, а специальная языковая конструкция. Это также причина, по которой вам не нужны скобки вокруг «параметра», так как include имеет только один «параметр». Заключение в круглые скобки аналогично переносу любого другого значения в круглых скобках:

1 === (1) === ((1)) === (((1))) === …

Вместо этого вам нужно заключить всю конструкцию в круглые скобки:

echo "<div style=\"text-align:center\">" . (include 'file.php') . "</div>\n";

Но так как include не возвращает вывод включенного файла сценария, а печатает его напрямую, вам нужно будет буферизовать вывод и вернуть его в сценарий, который включил этот файл:

<?php // file.php
    ob_start();
    // …
    return ob_get_clean();

Это бы сработало. Но я не думаю, что ты хочешь это сделать. Так что это, вероятно, гораздо проще:

echo "<div style=\"text-align:center\">";
include 'file.php';
echo "</div>\n";

Кстати: echo, print, exit и die также являются специальными языковыми конструкциями. Смотрите также require_once () или die () не работает

1 голос
/ 23 сентября 2009

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

0 голосов
/ 23 сентября 2009

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

Справочное руководство предполагает, что, во всяком случае, возвращает логическое значение.

0 голосов
/ 23 сентября 2009

Посмотрите на исходный код в вашем браузере, а не только на видимую часть. Обычно вы можете сделать это, нажав Ctrl + U. Если бы он просто выводил пустой элемент div, вы бы увидели пустой экран в браузере. И имейте в виду, что .php файлы, скорее всего, анализируются в вашей настройке перед выводом, что означает, что вы никогда не увидите теги <?php ?> и код между ними.

0 голосов
/ 23 сентября 2009

Есть ли дополнительный конец строки в конце file.php?

0 голосов
/ 23 сентября 2009

Есть ли что-нибудь в file.php? Он может быть пустым или что-то в нем может вызывать ошибку.

0 голосов
/ 23 сентября 2009

для вывода содержимого файла file.php, который вы, вероятно, захотите использовать http://us3.php.net/file_get_contents

...