PHP: я получаю полностью пустую страницу, я не знаю, как отладить это в PHP - PullRequest
2 голосов
/ 14 июля 2010

У меня есть некоторые проблемы, чтобы отладить это в php.Когда я включаю эту строку:

require_once("http://" . $_SERVER["HTTP_HOST"] . "/dompdf/dompdf_config.inc.php");

, то, что я получаю, это просто пустая страница, я не получаю HTML-код в качестве ответа.Может быть, сообщения об ошибках скрыты?

Ответы [ 5 ]

7 голосов
/ 14 июля 2010

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


Чтобы он отображался, вам необходимо:

Самый простой способ - сделать это наверху вашего PHP-скрипта с помощью некоторой части кода, подобной этой:

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


В вашем конкретном случае вы пытаетесь включить / потребовать что-то через HTTP; который часто отключается.

См. Об этом директиву allow_url_include.

Можно было бы включить его в конфигурации вашего PHP ... Но обычно это не считается хорошей идеей: он отключен по соображениям безопасности.
А отправка HTTP-запроса на включение файла происходит медленно - и это означает, что ваше приложение больше не будет работать, если удаленный сервер не отвечает!


Кроме того, здесь вы пытаетесь включить файл с удаленного сервера, который $_SERVER["HTTP_HOST"] ...

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

Если это так, вы не должны пытаться включить через HTTP; вместо этого вы должны работать с локальным файлом; таким образом (потребуется настройка) :

require_once dirname(__FILE__) . "/dompdf/dompdf_config.inc.php";

Таким образом:

  • Нет сетевого ненужного запроса (вы будете просто читать с локального диска) => быстрее и безопаснее
  • И не нужно включать allow_url_include


Я также должен добавить:

  • При включении локального файла .php содержимое файла .php включается на вашу страницу; например, если он скопирован
  • При включении файла .php через HTTP, есть вероятность, что удаленный сервер будет интерпретировать код PHP и только отправит вам выходные данные обратно.
    • Это означает, что это не PHP-код, который будет включен вашим скриптом
    • Но только результат, который вы получите, выполнив этот код PHP!
6 голосов
/ 14 июля 2010

Вы не должны требовать / включать такой удаленный файл. Вместо этого укажите локальный абсолютный или относительный путь.

Хотя это небезопасно и не рекомендуется, это технически возможно сделать, если установлены определенные параметры конфигурации. (Allow_url_include)

См. Другие ответы ниже относительно display_errors для будущих проблем отладки. Я часто использую интерпретатор командной строки PHP для получения реальной ошибки, не позволяя посетителям веб-сайта представлять подробности ошибки.

1 голос
/ 14 июля 2010

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

0 голосов
/ 14 июля 2010

Параметр в операторе require_once должен быть путем к файлу, а не URL.

Вы говорите веб-серверу импортировать файл из файловой системы, а не клиенту импортировать файл из Интернета.

Это задокументировано на странице include .

0 голосов
/ 14 июля 2010

Попробуйте добавить это в качестве первой строки вашего скрипта (после <? Php очевидно): </p>

error_reporting(E_ALL);
...