Como todos sabemos no PHP 5.3 tivemos diversas mudanças na estrutura do PHP e hoje falaremos de um erro que vem ocorrendo frequentemente nos meus códigos PHP antigos quando migrado para um servidor que tenha uma nova versão do PHP.
O erro falado é o Deprecated: Function ereg() is deprecated, neste artigo falaremos um pouco sobre sua extinsão e como solucionar o erro.
O que é ereg
Primeiro, antes de falar do problema temos que entender o que era a função ereg do PHP.
Esta função permitia que você procura-se uma determinada com uma expressão regular, com case sensitive, retornando a quantidade de itens encontrados ou false caso nenhum fosse encontrado.
Ela também contava com algumas variantes o eregi() que trabalhava da mesma forma, porém case insenstive e ereg_replace() que permitia substituir todas as posições encontrada assim como o eregi_replace que faz o mesmo, porém case insensitive.
Diferença entre ereg e eregi
Antigamente, para fazermos distinção entre case sensitive e case insensitive deveríamos utilizar funções diferentes, por isso existia o ereg e eregi, para a mesma função, apenas fazendo ou não distinção de cases.
Porque o ereg foi depreciado?
O ereg, apesar de ser bem mais simples que seu sucessor, ele executava a mesma ação porém com menos opções, não fazendo assim, sentido manter duas funções parecidas.
Este tipo de atitude tem sido tomada pela equipe do PHP para eliminar as funções redundantes existentes hoje, que, apesar de facilitar seu aprendisado torna bastante complexa a manutenção o código-fonte de terceiros.
Como solucionar o problema Function ereg() is deprecated
A função ereg pode ser fácilmente substituida pela função preg_match, que apresenta resultado semelhante ao ereg, tendo somente algumas diferenças em sua declaração, veja abaixo.
//Para o código:
//if(ereg("abc", "nabc,nobc,treabc")) { //faz se achar}
//será substituido por:
if(preg_match("/abc/", "nabc,nobc,treabc"))
{
// faz se achar
}
Observe que as unicas mudanças foram o nome da função de ereg() para preg_match e ao invés de “abc” para “/abc/”, estas barras servem para indicar ao interpretador de expressão regular da função que a expressão acabou, sendo necessária sempre.
No caso se você estiver tentando substituir o eregi() bastará fazer a seguinte modificação:
//Para o código:
//if(eregi("abc", "nabc,nobc,treabc")) { //faz se achar}
//será substituido por:
if(preg_match("/ABV/i", "nabc,nobc,treabc"))
{
// faz se achar
}
Sendo necessário apenas digitar o /i ao final da expressão, isso tornará a validação da expressão regular em case não sensitivo.
Como solucionar o problema Function ereg_replace() is deprecated
Assim como o ereg() o ereg_replace() também foi depreciado, sendo este substituido pelo preg_replace(), aonde a substituição pode ser feita facilmente, da seguinte foram:
//Para o código:
//$novoValor =
//ereg_replace("abc", "nabc,nobc,treabc", "Este é um texto do tipo abc");
//será substituido por:
echo preg_replace("/abc/", "def", "Este é um texto do tipo abc");
Como solucionar o problema function eregi_replace is deprecated
No caso da função eregi_replace aonde é não é feita a distinção entre letras maiúsculas e minúsculas você deve adicionar o /i após os marcadores da expressão regular, ficando bem simples conforme o exemplo abaixo:
//Para o código:
//$novoValor =
//ereg_replace("abc", "nabc,nobc,treabc", "Este é um texto do tipo abc");
//será substituido por:
echo preg_replace("/abc/i", "def", "Este é um texto do tipo abc");