Desativando padrões rígidos no PHP 5.4

95

Atualmente, estou executando um site no php 5.4, antes disso, estava executando meu site no 5.3.8. Infelizmente, php 5.4 combina E_ALLe E_STRICT, o que significa que minha configuração anterior para error_reportingnão funciona agora. Meu valor anterior era E_ALL & ~E_NOTICE & ~E_STRICTDevo apenas habilitar um valor de cada vez?

Tenho muitos erros e os arquivos contêm muito código para corrigir.

icomrade
fonte
11
Conselho ... Corrija o código ou os bugs ficariam melhores e mais difíceis de depurar
Baba
7
s / Infelizmente / Felizmente
NikiC
96
Obrigado pelo conselho, no entanto, não tenho o conhecimento necessário para reescrever todo o plugin jfusion phpbb3. obrigado por ser condescendente embora.
icomrade
12
Concordo com nossos amigos que você deve tentar consertar os erros, eles podem vir e morder seu tornozelo, também escondendo todos os erros dificultam a depuração. Mas também não acho justo julgar o pôster por esta questão solitária, se você nunca teve que escrever algum trabalho horrível porque seu cliente está no telefone enfeitiçando seus filhos não nascidos você não trabalhou com TI por muito tempo
Jonathan dos Santos
7
Esta é uma pergunta perfeitamente razoável, e sim @icomrade - você está certo sobre a condescendência e o sarcasmo aqui. É uma das características menos atraentes do StackOverflow. Dito isso, eu recomendo que você aborde pelo menos alguns dos avisos que está recebendo - mesmo se você não puder fazer todos eles.
halfer

Respostas:

139

Como os comentadores afirmaram, a melhor opção é corrigir os erros, mas com tempo ou conhecimento limitado, nem sempre isso é possível. Em sua mudança php.ini

error_reporting = E_ALL

para

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Se você não tiver acesso ao php.ini, você pode colocá-lo em seu arquivo .htaccess:

php_value error_reporting 30711

Este é o valor E_ALL (32767) e a remoção dos valores E_STRICT (2048) e E_NOTICE (8).

Se você não tiver acesso ao arquivo .htaccess ou se ele não estiver habilitado, você provavelmente precisará colocar isso no topo da seção PHP de qualquer script que seja carregado a partir de uma chamada de navegador:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

Um deles deve ajudá-lo a usar o software. Os avisos e coisas restritas são indicadores de problemas ou problemas potenciais e você pode descobrir que parte do código não está funcionando corretamente no PHP 5.4.

David Stockton
fonte
11
Estou usando o php 5.4.5 e tentei todas as opções acima, mas não consegui desativar as notificações estritas :( alguma outra ideia?
ro ko
2
Você pode tentar colocar & ~ E_DEPRECATED junto com as outras partes em error_reporting (). Que mensagens você está vendo?
David Stockton
4
@roko É possível que seu código esteja substituindo isso em algum lugar? Eu ainda estava vendo erros estritos após desabilitá-lo no php.ini, então percebi que era apenas para alguns sites, aqueles que usam Drupal, onde o valor estava sendo definido no código
andrewtweber
1
@AndrewSpear Isso é estranho. Em teoria, a configuração error_reporting deve afetar os erros que são mostrados em qualquer lugar em que são mostrados. A configuração display_errors deve afetar se você obtém ou não os erros na saída (nas páginas PHP) e o error_log afetaria onde os erros são gravados no log. Se display_errors estiver ativado, você deverá ver os mesmos erros na tela e no log.
David Stockton
4
+1 para responder a uma pergunta simples com uma resposta simples sem se tornar um StackOverflow Smuglord ™.
Joshua Pech
2

.htaccess php_value está funcionando apenas se você usar a API do servidor PHP como módulo do servidor Web Apache. Use a sintaxe IfModule:

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

Se você usa PHP Server API CGI / FastCGI, use

ini_set('error_reporting', 30711);

ou

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

em seu código PHP ou arquivos de configuração PHP .user.ini | modificação php.ini:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

em seu host virtual, nível de servidor.

Taras
fonte
1

Funcionou para mim, quando eu defini error_reporting em dois lugares ao mesmo tempo

em algum lugar no código PHP

ini_set('error_reporting', 30711);


e no arquivo .htaccess

php_value error_reporting 30711
Guzik
fonte
A única coisa que funcionou para mim sem ter acesso ao php.ini, outro dos anteriores não funcionava sozinho, retornou apenas um erro 500. Ambos juntos baby !!!
Jamie Hutber de
1

Se você precisar desativar E_DEPRACATED também, use:

php_value error_reporting 22527

No meu caso, o CMS Made Simple reclamava "E_STRICT está habilitado no error_reporting" e "E_DEPRECATED está habilitado". Adicionar essa linha ao .htaccess resolveu as duas configurações incorretas.

ux.engineer
fonte
0

Atenção, você pode precisar reiniciar o LAMP, Apache ou o que quer que esteja usando para que isso tenha efeito. Nós pensamos por um tempo nisso, parecia não fazer efeito até que os serviços fossem reiniciados, provavelmente porque o site estava em cache.

Lua
fonte
Não. É porque o Apache precisa recarregar as configurações do PHP. Isso é AFAIK feito apenas quando o serviço é iniciado.
svin83