UMARIZAL 1 Denunciar post Postado Janeiro 21, 2015 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: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
Beraldo 864 Denunciar post Postado Janeiro 21, 2015 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
UMARIZAL 1 Denunciar post Postado Janeiro 21, 2015 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
Beraldo 864 Denunciar post Postado Janeiro 21, 2015 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
UMARIZAL 1 Denunciar post Postado Janeiro 21, 2015 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
Beraldo 864 Denunciar post Postado Janeiro 21, 2015 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
UMARIZAL 1 Denunciar post Postado Janeiro 22, 2015 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
Beraldo 864 Denunciar post Postado Janeiro 22, 2015 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