Habilitando a exibição de erros em PHP somente via htaccess


113

Estou testando um site online.

No momento, os erros não estão sendo exibidos (mas sei que existem).

Eu tenho acesso apenas ao .htaccessarquivo.

Como faço para que todos os erros sejam exibidos usando meu .htaccessarquivo?


Eu adicionei estas linhas ao meu .htaccessarquivo:

php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on

E as páginas agora exibem:

Erro do Servidor Interno


fiz algumas pesquisas no Google, adicionei alguns sinalizadores ao meu htaccess; e minhas páginas não podem ser exibidas novamente
Ogugua Belonwu

3
Parece que você não tem o direito de substituir essas configurações do htaccess. Você pode precisar definir AllowOverride Allna configuração do Apache, se você tiver acesso a isso.
kapa

Verifique seu log de erros do Apache. Ele terá que explicar exatamente por que você está recebendo o erro interno 500. O que você vê no navegador é, por design, inútil para fins de diagnóstico.
Marc B

Respostas:


190

.htaccess:

php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag  log_errors on
php_value error_log  /home/path/public_html/domain/PHP_errors.log

14
adicionei estas linhas ao meu htaccess: php_flag display_startup_errors em php_flag display_errors em php_flag html_errors em e as páginas mostram erro interno do servidor
Ogugua Belonwu

4
Ao usar o PHP como um módulo Apache, você também pode alterar as configurações usando diretivas nos arquivos de configuração do Apache (por exemplo, httpd.conf) e arquivos .htaccess. Você precisará dos privilégios "AllowOverride Options" ou "AllowOverride All" para fazer isso. php.net/manual/en/configuration.changes.php
silex

Crie o PHP_errors.log e faça-o 777 de outra forma que você provavelmente não verá o arquivo criado pelo apache e preenchido ... pelo menos eu tive que criá-lo.
PJunior

2
assim como o ogugua agora também tenho erro interno do servidor ao usar essas linhas.
desembarcou em

1
Se você obtiver 500, provavelmente é porque está usando php-fpm, não mod_php.
mpchadwick

41
php_flag display_errors on

Para ativar a exibição real de erros.

Para definir os tipos de erros que você está exibindo, você precisará usar:

php_value error_reporting <integer>

Combinado com os valores inteiros desta página: http://php.net/manual/en/errorfunc.constants.php

Observe que se você usar -1 para o seu inteiro, ele mostrará todos os erros e será compatível com o futuro quando adicionar novos tipos de erros.


17

Tenho vontade de adicionar mais detalhes à resposta existente:

# PHP error handling for development servers
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log /full/path/to/file/php_errors.log
php_value error_reporting -1
php_value log_errors_max_len 0

Dê permissão 777 ou 755 ao arquivo de log e, em seguida, adicione o código

<Files php_errors.log>
     Order allow,deny
     Deny from all
     Satisfy All
</Files>

no final de .htaccess. Isso protegerá seu arquivo de log.

Essas opções são adequadas para um servidor de desenvolvimento. Para um servidor de produção, você não deve exibir nenhum erro para o usuário final. Portanto, altere os sinalizadores de exibição para desligado .

Para obter mais informações, siga este link: Tratamento avançado de erros de PHP via htaccess


1
que tal fornecer chmod "0644" para o arquivo de log de erros? ainda estaria funcionando?
Andre Chenier

2

Se você quiser ver apenas erros fatais de tempo de execução:

php_value display_errors on
php_value error_reporting 4

2

Isso funciona para mim ( referência ):

# PHP error handling for production servers
# Disable display of startup errors
php_flag display_startup_errors off

# Disable display of all other errors
php_flag display_errors off

# Disable HTML markup of errors
php_flag html_errors off

# Enable logging of errors
php_flag log_errors on

# Disable ignoring of repeat errors
php_flag ignore_repeated_errors off

# Disable ignoring of unique source errors
php_flag ignore_repeated_source off

# Enable logging of PHP memory leaks
php_flag report_memleaks on

# Preserve most recent error via php_errormsg
php_flag track_errors on

# Disable formatting of error reference links
php_value docref_root 0

# Disable formatting of error reference links
php_value docref_ext 0

# Specify path to PHP error log
php_value error_log /home/path/public_html/domain/PHP_errors.log

# Specify recording of all PHP errors
# [see footnote 3] # php_value error_reporting 999999999
php_value error_reporting -1

# Disable max error string length
php_value log_errors_max_len 0

# Protect error log by preventing public access
<Files PHP_errors.log>
 Order allow,deny
 Deny from all
 Satisfy All
</Files>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.