Apache отображает страницу с ошибкой на полпути выполнения PHP-страницы
Я только что установил Zend Server Community Edition на Windows Server 2003, однако есть проблема с отображением многих наших страниц PHP. Код ранее работал под той же версией PHP (5.3) на IIS без каких-либо проблем.
Судя по всему, Apache (установленный как часть Zend Server) выдает ошибку во время рендеринга страницы, когда сталкивается с тем, что ему не нравится в PHP. Проходя через код, я смог обойти некоторые проблемы, удалив оператор подавления ошибок (@) из вызовов функций и изменив формат некоторых включений. Однако я не могу сделать это для всего сайта!
Как ни странно, код ошибки сообщается как "200 OK". Фрагмент кода ниже показывает, как ошибка Apache HTML прерывает обычный HTML-код страницы.
<p>Ma quande lingues coalesce, li grammatica del resultant lingue es plu simplic e regulari quam ti del coalescent lingues.</<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>200 OK</title>
</head><body>
<h1>OK</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator,
[email protected] and inform them of the time the error occurred,
and anything you might have done that may have
caused the error.</p>
<p>More information about this error may be available
in the server error log
Журнал ошибок Apache не дает никакого объяснения этому, и я исчерпал свои навыки поиска в Google, поэтому любая помощь будет принята с благодарностью. Благодарю.
2 ответа
Вы хотите, чтобы просмотреть свой код.
Мое непосредственное мнение заключается в том, что вы включаете () в (или аналогичную функцию) страницу или скрипт через HTTP (у вас есть allow_url_fopen
включен), и на сервере, на котором выполняется включенная страница / скрипт, возникают проблемы.
Если вы редактируете php.ini (и перезапускаете Apache), чтобы изменить allow_url_fopen
в false вы будете лучше защищены в своей хостинговой среде, а также, скорее всего, получите лучшую ошибку, сообщающую вам, где вы пытаетесь включить неработающий URL.
Оператор подавления ошибок @ стоит дорого - лучше использовать error_reporting( 0), чтобы отключить ошибки, или использовать собственную функцию.
В этом случае, поскольку у вас вообще нет информации, вы можете попробовать использовать этот обработчик ошибок вместо вашего обработчика по умолчанию, чтобы проверить, можете ли вы связать эту ошибку с ошибкой Apache в функции PHP.
function Andy_errorHandler( $errno, $errstr, $errfile, $errline ) {
$stack_trace = '';
switch ( $errno ) {
case E_NOTICE:
case E_USER_NOTICE:
case E_STRICT:
return;
break;
default:
try {
throw new Exception( $errstr, $errno );
} catch( Exception $e ) {
//build stack trace
$stack_trace .= "File: <b>$errfile</b> Line: <b>$errline\n" . $e->getMessage() . "</b>\n" . "Error No: ".$e->getCode(). "\n";
$stack_trace .= $e->getTraceAsString();
}
break;
}
if( ! isset( $GLOBALS['error_handler_output'] ) ) {
$GLOBALS['error_handler_output'] = nl2br( $stack_trace ) . '<p/>';
} else {
$GLOBALS['error_handler_output'] .= nl2br( $stack_trace ) . '<p/>';
}
return true;
}
$old_error_handler = set_error_handler( "Andy_errorHandler" );