Deprecated: Function ereg_replace()、eregi() is deprecated 等のPHPエラーを解決する
Deprecated: Function ereg_replace() is deprecated in /home/dacelo/public_html/hoge.php on line 1234
Deprecated: Function eregi() is deprecated in /home/dacelo/public_html/hoge.php on line 1234
このページを見ているあなたは、これまで調子よく使っていたどこかのPHPスクリプトに、ある日こんなエラーが大量に発生して焦っているはずです。大丈夫、落ち着いてください。
あなたはおそらく、最近サーバー関連で何かをしたはずです。
・サーバーを引っ越した
・サーバーのPHPのバージョンが上がった
実は、このereg系の関数は、軒並みPHP5.3.0以降で非推奨となっていて、6.0では廃止されることになっています。
警告。かなり強い調子です。
php6で廃止されるereg系関数一覧
- ereg()
- ereg_replace()
- eregi()
- eregi_replace()
- split()
- spliti()
eregはPOSIX拡張ということで今後は廃止、これからはPerl互換(PCRE関数)のpreg系を使うべし、ということになっています。
このことは2010年には告知されていたので、おそらく、最近書かれたPHPプログラムだと普通はpreg系を使っているはず。つまりお使いのPHPプログラムは結構前に書かれた古いコードなのだろうと思います。
ereg系の代わりに使うpreg系
それぞれ、次の関数で代替します。
- ereg() → preg_match()
- ereg_replace()→ preg_replace()
- eregi()→ preg_match(//i)
- eregi_replace()→ preg_replace(//i)
- split() → preg_split()
- spliti() → preg_split(//i)
大文字小文字を区別しない「i」の扱いが、ereg系では別関数なのに対し、preg系では同じ関数の引数の中で区別する、という違いがあります。
他にもパターンのくくり方などが違うので、そのまま関数名を置き換えただけでは動作しません。
書き換え方の実例
文字列phpを探す
eregの場合
if (ereg("PHP", "PHP is the web scripting language of choice.")) { echo "A match was found."; } |
preg_matchの場合
if (preg_match("/PHP/", "PHP is the web scripting language of choice.")) { echo "A match was found."; } |
eregiの場合
if (eregi("php", "PHP is the web scripting language of choice.")) { echo "A match was found."; } |
preg_match(//i)の場合
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) { echo "A match was found."; } |
文字列htmlをphpに置換する
ereg_replaceの場合
$str = ereg_replace("html", "php", "html is the markup language."); |
preg_replaceの場合
$str = preg_replace("/html/", "php", "html is the markup language."); |
また、ereg系で”http://”などスラッシュを使ったパターンがあった場合、
Warning: preg_replace() [function.preg-replace]: Unknown modifier ‘/’ in …
のエラーになりますので、
“http:\/\/”
のようにバックスラッシュでエスケープしておく必要があります。
もしくは、デリミタを//ではなく{}にする、という方法もあるので覚えておいてください。
広告