以前 IIS上の PHPでクライアントのOS・ブラウザを判定したことを書きました。
そのときの動作環境は
- OS Windows7
- IIS 7.5
- PHP 5.4
でした。
今回開発機(Win7)をPHPを5.6.10にUpdateし、PHP5.6で動作確認をしました。あまり心配していなかったのですが、予想外の結果に!!!
PHP 5.4で正常に動いていたプログラムの
$regex = preg_replace(array(“/./”,”/*/”,”/?/”), array(“.”,”.*”,”.”), $best_pattern); のStepで
preg_replace(): Compilation failed: nothing to repeat at offset 0
の警告メッセージが
WEBをググルと escapeがどうのとか、encodingがどうのとか 書いてあるのですが 特に問題はなさそうで いろいろ試してみても結果は同じ。PHPのソースに ini_set( ‘display_errors’, 0 ); を加え、強制的にエラーメッセージの表示を抑止すればとりあえず、正常に動くが気持ち悪い・・・・
PHP5.4ではうまく動かなかったので、きっとダメだろうと半信半疑のままPHPのマニュアルに従って
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title>browscapサンプル</title> </head> <body> <?php echo $_SERVER['HTTP_USER_AGENT'] . "<br /><br /><br />"; $browser = get_browser(null, true); foreach($browser as $key => $row){ print $key.'=>'.$row."<br />"; } ?> </body> </html>
を作成して実行すると 正常に動くでは ないか !!!
PHPのVersion 正確には 内蔵されているPERLのVersionの違いに起因しているのだろうとは 想像するのですが、詳しくはわかりません。困ったときは基本に戻れということでしょうか。
今回のの動作環境は
- OS Windows7
- IIS 7.5
- PHP 5.6
なお browscap.ini は 前回同様 『セミコロンの前に “” を挿入する』加工を施したものを使用
追記
browscap.ini は、lite_php_browscap.ini・ php_browscap.ini ともに『セミコロンの前に “” を挿入する加工』が必要で、 php_browscap.ini を使った場合、lite_php_browscap.ini を使った場合に比べ、情報の取得に 体感で10倍以上の時間が掛かる感じがした。