POR QUE ISSO ESTÁ ACONTECENDO?
Com o tempo, o PHP se tornou uma linguagem mais focada na segurança. As configurações que costumavam ser desativadas por padrão agora estão ativadas por padrão. Um exemplo perfeito disso é E_STRICT
, que foi ativado por padrão a partir do PHP 5.4.0 .
Além disso, de acordo com a documentação do PHP, por padrão, E_NOTICE
está desativado no php.ini. Os documentos do PHP recomendam ativá-lo para fins de depuração . No entanto, quando faço o download do PHP no repositório Ubuntu - e na pilha do BitNami no Windows - vejo outra coisa.
; Common Values:
; E_ALL (Show all errors, warnings and notices including coding standards.)
; E_ALL & ~E_NOTICE (Show all errors, except for notices)
; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.)
; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
Observe que, error_reporting
na verdade, está definido como o valor da produção por padrão, e não como o valor "padrão" por padrão. Isso é um pouco confuso e não está documentado fora do php.ini, por isso não validei isso em outras distribuições.
Para responder sua pergunta, no entanto, esse erro é exibido agora quando não era exibido antes porque:
Você instalou o PHP e as novas configurações padrão estão um pouco mal documentadas, mas não as excluem E_NOTICE
.
E_NOTICE
avisos como variáveis indefinidas e índices indefinidos realmente ajudam a tornar seu código mais limpo e seguro. Posso dizer-lhe que, anos atrás, manter E_NOTICE
ativado me forçou a declarar minhas variáveis. Tornou muito mais fácil aprender C, não declarar variáveis é muito maior do que um incômodo.
O QUE POSSO FAZER SOBRE ISSO?
Desative E_NOTICE
copiando o "Valor padrão" E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
e substituindo-o pelo que atualmente não é comentado após a entrada de iguais error_reporting =
. Reinicie o Apache ou PHP se estiver usando CGI ou FPM. Certifique-se de editar o php.ini "certo". O correto será o Apache se você estiver executando o PHP com Apache, fpm ou php-fpm se estiver executando o PHP-FPM, cgi se estiver executando o PHP-CGI, etc. Este não é o método recomendado, mas se você tiver um código legado ser extremamente difícil de editar, pode ser sua melhor aposta.
Desative E_NOTICE
o nível de arquivo ou pasta. Isso pode ser preferível se você tiver algum código legado, mas desejar fazer as coisas da maneira "certa", caso contrário. Para fazer isso, você deve consultar o Apache2, o Nginx ou qualquer que seja o servidor de sua escolha. No Apache, você usariaphp_value
dentro do <Directory>
.
Reescreva seu código para ficar mais limpo. Se você precisar fazer isso enquanto estiver migrando para um ambiente de produção ou não quiser que alguém veja seus erros, verifique se está desabilitando qualquer exibição de erros e registrando apenas seus erros (consulte display_errors
e log_errors
em php.ini e configurações do servidor) .
Para expandir a opção 3: este é o ideal. Se você pode seguir este caminho, você deve. Se você não seguir esta rota inicialmente, considere mover essa rota eventualmente testando seu código em um ambiente de desenvolvimento. Enquanto você está nisso, livre-se ~E_STRICT
e ~E_DEPRECATED
veja o que pode dar errado no futuro. Você verá muitos erros desconhecidos, mas impedirá que você tenha problemas desagradáveis quando precisar atualizar o PHP no futuro.
O QUE SIGNIFICA ERROS?
Undefined variable: my_variable_name
- Isso ocorre quando uma variável não foi definida antes do uso. Quando o script PHP é executado, internamente, apenas assume um valor nulo. No entanto, em qual cenário você precisaria verificar uma variável antes de ser definida? Por fim, esse é um argumento para "código desleixado". Como desenvolvedor, posso dizer que adoro quando vejo um projeto de código aberto no qual as variáveis são definidas no escopo mais alto possível. Isso facilita a identificação de quais variáveis serão exibidas no futuro e a leitura / aprendizagem do código.
function foo()
{
$my_variable_name = '';
//....
if ($my_variable_name) {
// perform some logic
}
}
Undefined index: my_index
- Isso ocorre quando você tenta acessar um valor em uma matriz e ele não existe. Para evitar esse erro, execute uma verificação condicional.
// verbose way - generally better
if (isset($my_array['my_index'])) {
echo "My index value is: " . $my_array['my_index'];
}
// non-verbose ternary example - I use this sometimes for small rules.
$my_index_val = isset($my_array['my_index'])?$my_array['my_index']:'(undefined)';
echo "My index value is: " . $my_index_val;
Outra opção é declarar uma matriz vazia na parte superior da sua função. Isto nem sempre é possível.
$my_array = array(
'my_index' => ''
);
//...
$my_array['my_index'] = 'new string';
(dica adicional)
- Quando encontrei esses e outros problemas, usei o NetBeans IDE (gratuito) e ele me deu uma série de avisos e avisos. Alguns deles oferecem dicas muito úteis. Isso não é um requisito e eu não uso mais IDEs, exceto em grandes projetos. Hoje sou mais uma
vim
pessoa :).