わかりました、この問題は私の頭のはるか上にあるようです!
私はこのコードを持っています:
$request=preg_replace('$(^'.str_replace('$','\$',$webRoot).')$i','',$requestUri);
これは私にエラーをスローします:
preg_replace(): 終了区切り文字 '$' が見つかりません
しかし、ここにあるのは、終わりの区切りが確かにあるということです。
その関数呼び出しの後、次のようにエコーアウトしました。
echo $webRoot;
echo $requestUri;
echo '$(^'.str_replace('$','\$',$webRoot).')$i';
これは、これらのエコーの結果です。
/
/en/example/
$(^/)$i
面白いのは、これを直接行うと次のようになることです。
preg_replace('$(^/)$i','',$requestUri);
..できます。しかし、これも失敗します:
$tmp=str_replace('$','\$',$webRoot);
preg_replace('$(^'.$tmp.')$i','',$requestUri);
徹底的にするために、 echo $tmp が与えるものもテストしましたが、適切な値が得られます。
/
WindowsのPHPのバグですか?Linux サーバーで試してみたところ、期待どおりに動作し、このエラーは発生しませんでした。または、何か不足していますか?
念のため、PHP を最新の Windows バージョン (5.4.2) に更新したところ、同じことが起こりました。