Xoops を使っている自サイトで、カレンダー機能のpiCalが動かなくなっているのに、
気が付きました。
PHP5.3環境に移したときは、php.iniを触ってdeprecatedエラーを封じ込めたのですが…
5.3.5にバージョンアップしたころに動かなくなったのかもしれません。
面倒くさいから、最新バージョンないかと思って、製造元サイトを見てみますと、
更新はされていないようで...探し方悪いのかな? ま、それはさておき。
piCal の includes にある、patTemplate.phpにおいて、462行目あたりと504行目あたりで、
変更前
if ( eregi( “<patTemplate:([[:alnum:]]+)[[:space:]]*(.*)>”, $line, $regs ) )
と
elseif ( eregi( “</patTemplate:([[:alnum:]]+)>”, $line, $regs ) )
変更後
if ( preg_match( “/<patTemplate:([[:alnum:]]+)[[:space:]]*(.*)>/i“, $line, $regs )
と
elseif ( preg_match( “/<\/patTemplate:([[:alnum:]]+)>/i“, $line, $regs ) )
赤文字が変更・追加分です。
piCal の class にある piCal.phpにおいて、
変更前
if( ! ( ereg( “^([0-9][0-9]+)[-./]?([0-1]?[0-9])[-./]?([0-3]?[0-9])$” , $setdate , $regs )
他にも似たようなところ全6箇所ほどあります。
変更後
if( ! ( preg_match( “/^([0-9][0-9]+)[-.\/]?([0-1]?[0-9])[-.\/]?([0-3]?[0-9])$/” , $setdate , $regs )
参考にしたサイト
http://devthought.com/2009/06/09/fix-ereg-is-deprecated-errors-in-php-53/
要は、egrep(“”,$hoge,$fuga) なら、preg_match(“//”,$hoge,$fuga) とスラッシュをいれること、
egrepi(“”,$hoge,$fuga)なら、preg_match(“//i”,$hoge,$fuga)と、スラッシュの後に i を入れること、
のようですね。
あとお約束ですが、スラッシュ間にスラッシュを使っている場合は、ちゃんとエスケープすることです。
これで動作することを確認できました。ヤレヤレ。
それにしても、5.2系と5.3系で仕様が変わって動作しなくなったりするところが、
PHPを覚えようという気にはなれないところです。
4系と5系とでも仕様が違うしなぁ。
まぁ、進化とはそういうところもあるのかもしれませんが...