Eu uso o aplicativo frontend do banco de dados dbkiss (veja o código: github / dbkiss.php ), que agora parece não ser suportado. Ele funciona com PHP5, mas agora quebra com PHP7 com o seguinte erro:
preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
In dbkiss.php on line 308.
Backtrace#1 preg_replace(#([a-z]+://[a-zA-Z0-9\.\,\;\:\[\]\{\}\-\_\+\=\!\@\#\%\&\(\)\/\?\`\~]+)#e, create_links_eval("\1"), GG3) called at [/var/www/html/r4stdb/dbkiss.php:308]
#2 create_links(GG3) called at [/var/www/html/r4stdb/dbkiss.php:4732]
Eu encontrei 26 linhas que usam a função preg_replace () obsoleta. Abaixo está uma amostra das linhas afetadas:
$trace = preg_replace("/^#0[\s\S]+?\n#1/", "#1", $trace); // Remove call to errorHandler() from trace.
$text = preg_replace('#([a-z]+://[a-zA-Z0-9\.\,\;\:\[\]\{\}\-\_\+\=\!\@\#\%\&\(\)\/\?\`\~]+)#e', 'create_links_eval("\\1")', $text);
$query = preg_replace('#^([\s\S]+)LIMIT\s+\d+\s+OFFSET\s+\d+\s*$#i', '$1', $query);
$query = preg_replace('#^([\s\S]+)LIMIT\s+\d+\s*,\s*\d+\s*$#i', '$1', $query);
$query = preg_replace("#^({$words})(\s)#i", '<font color="'.$color.'">$1</font>$2', $query);
$query = preg_replace("#(\s)({$words})$#i", '$1<font color="'.$color.'">$2</font>', $query);
$query = preg_replace("#([\s\(\),])({$words})([\s\(\),])#i", '$1<font color="'.$color.'">$2</font>$3', $query);
$query = preg_replace("#([\s\(\),])({$words})([\s\(\),])#i", '$1<font color="'.$color.'">$2</font>$3', $query);
...
Esta é uma ferramenta de código aberto muito útil que deve permanecer atualizada! Eu ficaria grato se alguém pudesse bifurcar este código no github e atualizá-lo para trabalhar com PHP7 e um banco de dados Postgres (v10.6) com tabelas e visualizações.
É uma pergunta bem conhecida, dê uma olhada no stackoverflow.com/q/15454220/372239
—
Toto
preg_replace não está obsoleto, é o uso do modificador "e" no regexp, isto é, no seu código isso afeta apenas o segundo regexp. Que beeing disse que realmente não parece particularmente grande código php ...
—
silmaril