php7中不存在Preg_replace。我能做什么?

时间:2016-08-26 09:56:40

标签: php

我有一个表单,我从输入框中获取文件名。我创建了一个目录并更改了扩展表单" gpx" to" xml"在我将文件上传到我的目录之前的文件。 在php5中我需要preg_replace,但在php中我不能再这样做了。

我有这个代码:   我的旧代码是:

  if (!file_exists($dirPath)) {
    mkdir($dirPath, 0755,true);
    }
    $target = '/'.$mappe.'/'; 
    $target = $dirPath .'/'. basename( $_FILES['gpsfilnavn']['name']); 
        $target =    preg_replace("/(\w+).gpx/ie","$1.'.xml'",$target);    
        $xmlfil = $xmlfil . basename( $_FILES['gpsfilnavn']['name']); 
        $xmlfil =    preg_replace("/(\w+).gpx/ie","$1.'.xml'",$xmlfil);     
        if(move_uploaded_file($_FILES['gpsfilnavn']['tmp_name'], $target)) {
        echo "The file ".  basename( $_FILES['gpsfilnavn']['name'])." has been  uploaded";

任何人都可以帮助我改变我的想法吗?

2 个答案:

答案 0 :(得分:0)

自PHP 7以来,preg_replace()功能发生了变化 根据{{​​3}}

  

7.0.0已删除对/ e修饰符的支持。请改用man-page

也许这有助于你?

答案 1 :(得分:0)

今天我将基于phpBB的网站从PHP5升级到PHP7时偶然发现了这个问题。我提出了三种不同的解决方法,可用于不同的场景,第二种是我唯一可行的解​​决方案,因为我在文件系统/ db中存储了基于模板的regexp而不是静态的,我无法做到这一点。容易改变。

基本上,我离开了这个:

$input = preg_replace($search, $replace, $input);

这样的事情:

$input = preg_replace($search, 
    function($m) use ($replace) { 
        $rep = $replace; 
        for ($i = 1; $i<count($m); $i++) { 
            $rep = str_replace('\\'.$i, '$m['.$i.']', $rep); 
            $rep = str_replace('\$'.$i, '$m['.$i.']', $rep); 
        }
        eval('$str='.$rep); 
        return $str;
    },
    $input);

毋庸置疑,这只不过是一个快速而肮脏的解决方法,只有&#34;可行的&#34;对于那些无法使用更新的 preg_replace_callback 函数轻松重构代码的用户而不必使用任何可能不安全的eval()调用:出于这个原因,只有在开发人员完全控制时才应使用它替换字符串/规则,并能够正确地测试/调试它们。也就是说,在我的具体情况下,我能够有效地使用它来完成工作。

重要提示: str_replace和/或eval()可能会破坏一些替换规则,除非它们是&#34;正确&#34;定义考虑上述代码。

有关此问题和其他替代解决方法的详细信息,您还可以在我的博客上阅读this post