O Apache exibe a página de erro no meio da execução da página PHP

1

Acabei de instalar o Zend Server Community Edition em uma caixa do Windows Server 2003, no entanto, há um pequeno problema com a exibição de muitas das nossas páginas PHP. O código foi executado anteriormente com a mesma versão do PHP (5.3) no IIS sem problemas.

Pelo que parece, o Apache (instalado como parte do Zend Server) está errando durante a renderização da página quando se depara com algo que não gosta no PHP. Indo através do código, eu consegui passar por alguns dos problemas removendo o operador de supressão de erro (@) das chamadas de função e alterando o formato de algumas inclusões. No entanto, não posso fazer isso para todo o site!

Estranhamente, o código de erro é reportado como "200 OK". O trecho de código abaixo mostra como o HTML do erro do Apache interrompe o HTML regular da página.

<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

O log de erros do Apache não oferece nenhuma explicação para isso, e eu exaurei minhas habilidades de pesquisador, então qualquer ajuda seria muito apreciada. Obrigado.

    
por Shep 23.09.2009 / 13:00

2 respostas

1

Você vai querer olhar pelo seu código.

Minha linha de pensamento imediata é que você está incluindo (ou função similar) uma página ou script via HTTP (você tem allow_url_fopen habilitado), e o servidor em que a página / script está sendo executado está tendo questões.

Se você editar o php.ini (e reiniciar o Apache) para alterar allow_url_fopen para false , você terá mais segurança em seu ambiente de hospedagem, além de provavelmente obter um erro melhor, informando você onde você está tentando incluir um URL quebrado.

    
por 23.09.2009 / 16:52
0

O operador de supressão de erro @ é caro - a melhor opção é usar error_reporting (0) para desabilitar erros ou usar sua própria função.

Neste caso, vendo que você não tem nenhuma informação, você poderia tentar usar este manipulador de erro no lugar do seu manipulador padrão para ver se você pode amarrar este erro em uma função do PHP travando o 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" );
    
por 23.09.2009 / 16:58