Я только что установил Zend Server Community Edition на компьютере с Windows Server 2003, однако есть небольшая проблема с отображением многих наших страниц PHP. Код ранее работал под той же версией PHP (5.3) в IIS без каких-либо проблем.
Судя по всему, Apache (установленный как часть Zend Server) выдает ошибку во время рендеринга страницы, когда сталкивается с чем-то, что ему не нравится в PHP. Проходя код, я смог обойти некоторые проблемы, удалив оператор подавления ошибок (@) из вызовов функций и изменив формат некоторых включений. Однако я не могу сделать это для всего сайта!
Как ни странно, код ошибки отображается как «200 OK». Приведенный ниже фрагмент кода показывает, как HTML-код ошибки Apache прерывает обычный 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,
example@example.com 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, поэтому любая помощь будет принята с благодарностью. Спасибо.
Вы захотите просмотреть свой код.
Я сразу же думаю, что вы включаете () (или аналогичную функцию) страницу или скрипт через HTTP (у вас есть allow_url_fopen
включен), и на сервере, на котором работает включенная страница / сценарий, возникают проблемы.
Если вы отредактируете php.ini (и перезапустите Apache), чтобы изменить allow_url_fopen
к ложный, вы будете лучше защищены в своей среде хостинга, а также, скорее всего, получите лучшую ошибку, сообщающую вам, где вы пытаетесь включить неработающий URL.
Оператор подавления ошибок @ дорогостоящий - лучший вариант - использовать error_reporting (0) для отключения ошибок или использовать вашу собственную функцию.
В этом случае, поскольку у вас вообще нет информации, вы можете попробовать использовать этот обработчик ошибок вместо обработчика по умолчанию, чтобы увидеть, можете ли вы связать эту ошибку с функцией PHP, вызывающей сбой apache.
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" );