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

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

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

Что в мире?

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:

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

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

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

Ответы

Ответ 1

Я угадал ответ на эту проблему - оказывается, что 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, всплесков памяти, всплесков CPU, сбоев сервера или чего-либо еще. После примерно 150 мс PHP просто "кончается". Weird.

Ответ 2

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

// nix
php yourFile.php

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

Ответ 3

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

Чтобы проверить, попробуйте явно установить эти параметры в верхней части вашего php script, что дает вам проблемы.

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

Проверьте настройку php.ini для short_open_tag = Вкл. или short_open_tag = Выкл.

Ответ 7

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

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

Ответ 8

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

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

Пример, когда эта потенциальная возможность сэкономит вам много времени:

Этот код в файле шаблона joomla default.php отображает пустую страницу без сообщений об ошибках без строк 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

Ответ 9

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

Ответ 10

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

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

И, хотя все ошибки ДОЛЖНЫ сообщаться, я обнаружил, что на самом деле не все сообщения об ошибках, возможно, из-за настроек ini на общем хосте, который недоступен.

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

Ответ 11

Вы проверяли свои файлы для закрытия тегов ?>? Или, что более важно, любые пробелы после них...