Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://s25.postimg.org/4b1twbhr3/error_login_arfooo_admin_panel.gif&key=6ac3d5d3dba964e9d0881a1406c7b5731faa7902060efb2fd1e74b7ea2c9a2c7" alt="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.
>
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?
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
>
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.
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
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 ;-)
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 :)
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