PHP создает полностью белую страницу, без ошибок, журналов или заголовков.

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

Firebug сообщает нет заголовков,? байты, и это занимает только 163ms для "загрузки" (так что это не тайм-аут). Я думал о быстром потреблении памяти - но я контролировал память моего компьютера, и он не показывает никаких шипов. До сих пор ошибки и исключения работали нормально.

что в мире?

max_execution_time = 30 ;
max_input_time = 60 ; 
max_input_nesting_level = 64 ; 
memory_limit = 500M ;

error_reporting = E_ALL | E_NOTICE | E_STRICT
display_errors = On
log_errors = On

: EDIT:

Я бы не трогал @ С десятифутовым шестом. Я думаю, что ребята ruby бросают это туда, чтобы программисты бросили PHP.

В любом случае, я включил xdebug, и он не выводил никаких файлов grind. Затем я последовал совету зомбата и поместил DIE() в верхней части страницы, и это сработало. Я думаю что у меня есть очень странно код, который полностью убивает PHP. Даже если ошибки были отключены или подавлены с помощью @ Я все равно должен вернуть заголовок с сервера с пустым содержимым!

Если я найду больше, я отправлю обратно.

11 ответов


запустите страницу с консоли, и вы получите сообщение об ошибке.

// nix
php yourFile.php

// Windows
c:\path\to\php.exe yourFile.php

вы могли бы иметь .файл htaccess в этом каталоге, который изменил отчеты об ошибках.

чтобы проверить, попробуйте явно установить эти параметры в верхней части вашего PHP-скрипт, который дает вам неприятности.

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

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


остерегайтесь оператора @ (подавление ошибок), если у вас есть синтаксическая ошибка в строке с @ PHP будет тихо выйти.

для того чтобы обнаружить это условие, используйте set_error_handler и напишите свой собственный обработчик ошибок, вы все равно будете вызывать ошибки, где используется@.


вы говорите, что другие скрипты PHP работают, так что это указывает на то, что это, вероятно, не проблема Apache. Вы также, кажется, все ваши настройки ведения журнала правильные, и ничего не регистрируется, поэтому вполне возможно, что PHP выходит нормально, прежде чем он выводит что-либо. Одно из следующих предположений может быть верным:--6-->

  • странник exit() заявление? Вы работали над кодом, возможно, вы добавили quick exit() чтобы проверить что-то, и забыл удалить это?
  • нет.идея нойфельда о проверке использования @ оператор, который подавляет любые сообщения об ошибках, стоил мне часов времени отладки в прошлом. Определенно есть на что посмотреть.

в таких ситуациях, как эта, подход отладки бедного человека может дать некоторые быстрые результаты. Бросьте exit('wtf'); в качестве первой строки в рассматриваемом скрипте здесь. Это работает? Результаты этого теста сразу исключает всякие возможности ни каков результат. Если вы не получаете никакого вывода, то это, вероятно, проблема уровня сервера (конфигурация, плохой модуль и т. д.), Хотя будьте осторожны с буферизацией более высокого уровня. Если вы получаете вывод, то вы знаете, что сервер в порядке, и проблема лежит глубже в вашем скрипте, и в этом случае вы можете переместить exit() вызовите несколько строк, промойте и повторите. Не элегантный способ отладки, но он быстрый и грязный, и вы, вероятно, найдете проблему через пару минут.


проверить php.настройка ini для short_open_tag = On или short_open_tag = Off


наиболее вероятно, что apache рушится. Возможно, просмотрите журнал ошибок apache или присоедините отладчик.

подробности о поиске отладки процесса apache / php в windows можно найти по адресуhttp://bugs.php.net/bugs-generating-backtrace-win32.php


Я угадал ответ на эту проблему-оказывается, PHP 5.2.5 не может справиться с рекурсивной смертью.

<?php

class A
{
    public function __construct()
    {
        new B;
    }
}

class B 
{
    public function __construct()
    {
        new A;
    }
}

new A;

print 'Loaded Class A';

нет заголовков, ошибок, контента, журналов, дампов xdebug, всплесков памяти, всплесков процессора, сбоев сервера или чего-либо еще. Примерно через 150ms PHP просто "заканчивается". Странный.


чтобы активировать отображение ошибок в PHP-коде, если вы ничего не видите, вставьте

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

пример, где этот потенциал экономит вам много времени:

этот код в Joomla по умолчанию.файл шаблона php отображает пустую страницу без ошибок msg без строк 20 и 21

17  <?php if ($params->get('title_article_linkable')) { ?>
18      <a href="<?php 
19          $url = JRoute::_(ContentHelperRoute::getArticleRoute($item->id,$item->catid));
20          ini_set('display_errors',1);
21          error_reporting(E_ALL);
22          echo $url; ?>">
23      <?php echo $this->item->title; ?></a> // should be $item->title !!
24  <?phpLL000000 } else { ?>
25      <?php echo $item->title; ?>
26  <?php } ?>

выход:

enter image description here


проверьте журнал событий.


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

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

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

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


вы проверили свои файлы для закрытия ?> теги? А самое главное-пробелы после них...