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