Pergunta

Em uma página que estou fazendo várias chamadas AJAX. Todas as chamadas retornar respostas com êxito, mas o último (não relacionada com outras chamadas AJAX) retorna 500 erro interno do servidor como código de resposta (como o Firebug diz). No entanto, apesar do código de erro, o conteúdo correto é retornado a partir dessa chamada de AJAX.

Para meu espanto, quando eu definir a opção display_errors no php.ini como On, o erro desaparece e resposta em processado na página. Tenho o registo de erros de configuração para um arquivo, mas nenhum erro é registrado correspondente ao erro interno do servidor acima indicado.

A propósito, estou usando Apache, JQuery, PHP5, a APC (se for relevante).

Nenhuma solução correta

Outras dicas

A resposta mais provável, dada a pouca informação disponível, é que o PHP está chegando a um erro fatal depois que terminou ecoando a sua saída esperada.

Para teste: na linha que é executado passado, echo algo. Se esse eco não aparecer, então você sabe que o seu script PHP está em algum lugar da parada. Nesse ponto, é apenas uma questão de depuração e rastreamento.

Isso é muito estranho ... Você está usando algum tipo de biblioteca ou outro código que você não escreveu que pode estar afetando o cabeçalho código de status independentemente do valor real voltou?

Eu tive esse mesmo problema exato, acabou por ser um erro fatal escondido. Ligue display_errors, encontrar erro, quebra de erro, desligue display_errors (provavelmente melhor para manter display_errors on para o desenvolvimento e off em produção).

O intérprete PHP simplesmente trava durante este pedido. Eu sei uma razão potencial que poderia falhar PHP:

Devido a alguns erros no GCC 4.3, PHP compilado com esta versão do compilador tem a implementação de exceções quebrados. Em alguns casos não-triviais, lançando uma exceção pelo script faz com que o segfault ea execução do script é encerrado. A tese foi confirmada pela equipe de PHP um par de meses atrás.

Para verificar, se isso acontece com você, você pode simplesmente verificar, onde a execução do script trava e se acontece logo após lançar uma exceção, você está em casa. A verificação pode ser feito colocando die() mais e futher no script e ver o que acontece. Outra maneira é usar declare(ticks=1) e registrar uma função de carrapato que salva a última entrada de debug_backtrace() para o arquivo de cada escala, de modo que você vai ter um relatório, como o script é executado.

Eu tive problema um pouco semelhante eo problema foi que o roteiro foi lançar exceções e não havia nenhum bloco catch para que a exceção seria à tona e erro fatal "exceção não pega" aconteceu. Que é o comportamento padrão, mas php em um servidor especial que você também obter o código de resposta de 500 erro interno do servidor em vez de 200 OK. Removendo exceções e substituí-los com die () declarações corrigiu o problema no servidor (que poderia fazer isso porque era simples script que realmente não beneficiam de exceções em primeiro lugar)

O problema é muitas vezes fixado por ione do seguinte. Verifique os scripts permissões, direitos e propriedade. Se voltou depois de uma chamada de ajax, verifique se não há nenhum lugar um erro fatal. Verifique se você explorou;. T uplaoded acidentalmente o arquivo para Unix no modo ASCII

Mais informações podem ser lidas em http://www.larshemel.com/forum/500_internal_server_error

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top