Como corrigir o erro Deprecated: Function ereg() is deprecated

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 extinçã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 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 o ereg_replace() que permitia substituir todas as posições encontrada assim como o eregi_replace() que faz o mesmo, mas em 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.

Por que 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 aprendizado 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 facilmente substituída 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 únicas 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(), onde 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");

Atualizado em 09/05/2022
  • 171 Bu dökümanı faydalı bulan kullanıcılar:
Bu cevap yeterince yardımcı oldu mu?

İlgili diğer dökümanlar

Erro: Warning: Parameter 1 to modMainMenuHelper::buildXML() expected to be a reference.

Este é um erro típico do Joomla em relação ao PHP5.3 - sugerimos fortemente uma atualização de...