2010-07-14 2 views
2

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

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

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

ответ

6

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

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

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

+0

Фактически вы можете, если обертка включена в конфигурации, но она очень небезопасна. – baloo

+0

'allow_url_include' действительно существует, поэтому этот ответ является простым, поскольку он сформулирован сейчас. Разумеется, вероятно, причина (allow_url_include по умолчанию для sane & save 'off), но давайте не будем искать углы и давать неверную информацию по правильным причинам. – Wrikken

+0

обновлено, чтобы исправить сообщение. – Fosco

0

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

error_reporting(E_ALL); 
7

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


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

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

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


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

См. Инструкцию allow_url_include, об этом.

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


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

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

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

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

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

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


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

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

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

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

Документировано на странице include statement.

1

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