IIS上のPHPでクライアントのOS・ブラウザを判定する(PHP5.6)

以前 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倍以上の時間が掛かる感じがした。

スポンサーリンク
Rectangle大広告
Rectangle大広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする