Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

UMARIZAL

preg_replace no PHP 5.5

Recommended Posts

Olá amigos, tudo bom?

Há alguns anos estou rodando o script Arfooo 2.0.2 (http://script.arfooo.net) em meu servidor LAMP para gerir um site de classificados.

No entanto, após a última atualização que fiz no servidor, deixando o PHP na versão 5.5.20, comecei a ter problemas com este script em particular, que apresenta a seguinte mensagem de erro ao tentar acessar o painel de controle da administração, vejam:
error_login_arfooo_admin_panel.gif

Pelo que entendi, a versão 5.5 em diante do PHP não suportará mais a função preg_replace que deverá ser substituída por preg_replace_callback(), mas não faço a mínima ideia de como fazê-lo.

Como não entendo quase nada de programação, pois sempre usei o script pronto e no máximo fiz algumas alterações no tema e estilo, estou meio perdido. Não quero voltar o PHP à versão anterior no servidor, visto que até onde entendo, usar sempre a versão estável mais atual é uma forma de ganhar em performance e principalmente, em segurança. Por isso, pretendo até, quem sabe, atualizar para a versão 5.6.4, quem sabe...

Com isso, gostaria de saber se vocês conseguem me dizer como posso fazer para solucionar este problema. Fui às linhas informadas no erro e substituí a função preg_replace por preg_replace_callback() mas acho que não é tão simples assim, pois novos erros surgiram.

Como o desenvolvedor do script o abandonou há alguns anos, estou pensando em migrar para outro do mesmo gênero, gratuito e com uma equipe voluntária realmente colaborativa e atuante, ou seja, migraria do Arfooo para o Osclass, embora não faria migração do conteúdo, apenas "recomeçaria" do zero, pois migrar o conteúdo seria algo realmente trabalhoso ou demandaria algum script para isso, que não possuo e não tenho capacidade técnica para criar ou financeira para contratar / comprar.

O pedido de ajuda com o Arfooo seria apenas para "quebrar um galho" e poder ganhar mais alguns meses usando o script e todo o conteúdo já existente no site, até estar preparado para migrar para um novo sistema e ter alertado a todos os anunciantes do sistema antigo da migração.

Desde já, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

preg_replace não está obsoleto. Apenas o modificador e está

 

Veja

 


5.5.0 O modificador /e está obsoleto. Use preg_replace_callback() como alternativa. Veja a documentação PREG_REPLACE_EVAL para adicionais informações sobre riscos de segurança.

Fonte: http://php.net/preg_replace

 

Nesse mesmo link há exemplos de como usar preg_replace_callback em vez de usar o modificador e

Compartilhar este post


Link para o post
Compartilhar em outros sites

preg_replace não está obsoleto. Apenas o modificador e está

 

Veja

 

Fonte: http://php.net/preg_replace

 

Nesse mesmo link há exemplos de como usar preg_replace_callback em vez de usar o modificador e

 

Amigo, como disse, não entendo quase nada. Já havia lido esta página do PHP mas não entendi.

 

Se eu postar o código do arquivo citado no erro "\arfooo\components\template_lite\class.compiler.php" você pode me dizer o que tenho que alterar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve alterar as linhas onde preg_replace é usada com o modificador "e". Essas linhas devem ser trocadas pela equivalente usando preg_replace_callback.

 

As outras chamadas a preg_replace não precisam ser alteradas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve alterar as linhas onde preg_replace é usada com o modificador "e". Essas linhas devem ser trocadas pela equivalente usando preg_replace_callback.

 

As outras chamadas a preg_replace não precisam ser alteradas

 

Caro amigo, como disse, não entendo muita coisa de PHP, mas vamos lá... se puder me ajudar agradeço.

 

A linha em questão (do erro) é esta:

		$file_contents = preg_replace("!{$ldq}\*.*?\*{$rdq}!se","",$file_contents);

Tentei alterar para isso aqui e deu erro:

		$file_contents = preg_replace_callback("!{$ldq}\*.*?\*{$rdq}!se","",$file_contents);

Aí pensei em fazer uma gambiarra e tirei a letra "e" assim e deu certo:

		$file_contents = preg_replace("!{$ldq}\*.*?\*{$rdq}!s","",$file_contents);

Mas não sei até onde isso que eu fiz pode prejudicar o funcionamento do script. Fiz vários testes incluindo anúncios, removendo, aprovando, desaprovando, etc... e parece estar tudo funcionado.

 

Me parece que o sistema ficou mais lento, talvez esteja gerando algum erro oculto? Sei lá...

 

Sabe me dizer, na linha citada acima (a primeira) como faço para substituir de forma correta pelo preg_replace_callback? Apenas substituindo o termo não deu certo... gera outros erros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, o modificador "e" não fazia absolutamente nada naquele trecho de código. Por isso que o sistema continuou funcionando 100% depois de removê-lo

 

Para que esse modificador tivesse efeito, o segundo parâmetro de preg_replace deveria ser um código PHP. Porém é uma string vazia. Então não surte efeito algum

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Beraldo, agradeço muito sua ajuda.

 

Sou muito newbie e fiquei até com medo de postar aqui e me tratarem mau por ser tão inexperiente. Você me ajudou muito com suas orientações.

 

Que Deus o abençoe.

 

Abração ;-)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou muito newbie e fiquei até com medo de postar aqui e me tratarem mau por ser tão inexperiente. Você me ajudou muito com suas orientações.

Não hesite em tirar dúvidas aqui. Foi assim que eu e muitos outros começamos nesse mundo maluco da Programação. :thumbsup:

 

 

Bons estudos :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.