2016-08-26 1 views
-2

私は入力ボックスからファイル名を取得するフォームを持っています。ファイルを自分のディレクトリにアップロードする前に、ディレクトリを作成し、ファイルの拡張形式 "gpx"を "xml"に変更します。 php5では私はpreg_replaceが必要ですが、PHPではもうできません。Preg_replaceはphp7には存在しません。私に何ができる?

私はこのコードを持っている: 私の古いコードは次のとおりです。

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"; 

誰もが私は変更する必要がどのような私を助けることができますか?

+5

Um ... preg_replaceはPHP7に存在します... –

+0

'preg_replace'はPHP7で非常に利用可能です。 [PHP Documentation](http://php.net/manual/en/function.preg-replace.php) –

+3

マニュアルから:** 7.0.0/e修飾子のサポートが削除されました。代わりにpreg_replace_callback()を使用してください。**私が知ると思う奇妙な場所ですが、常に試してみる価値があります。 – RiggsFolly

答えて

0

preg_replace()機能に関するPHP 7以降の変更があります。
man-page

7.0.0による/ e修飾子のサポートが削除されました。代わりにpreg_replace_callback()を使用してください。

これはおそらくあなたを助けますか?

0

今日、phpBBベースのWebサイトをPHP5からPHP7にアップグレードする際、この問題が発生しました。私は別のシナリオで使用できる3つの異なる回避策を思いつきました.2つ目は、テンプレートベースの正規表現を静的ファイルシステムの代わりにファイルシステム/ dbに保存していたので、私にとっては実行可能なものでした。 。このような何かに

$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); 

言うまでもなく、これはのみ、間に合わせと-回避策以外の何ものでもありません更新されたpreg_replace_callback機能でコードを簡単にリファクタリングできない人には、潜在的に安全でないかもしれないeval()コールを使用する必要はありません。なぜなら、開発者が置換文字列/ルールを完全に制御でき、それらを適切にテスト/デバッグできる場合にのみ使用するべき理由です。つまり、私の具体的なシナリオでは、仕事を成し遂げるために効果的に使用することができました。

重要:彼らは「適切に」のアカウントに上記のコードを取って定義されていない限りstr_replaceおよび/またはeval()は、いくつかの代替ルールを破ることができました。

この問題に関するその他の代替案や、this postもご覧ください。

関連する問題