-LinuxでのPHP5.3.8の実行-
まず、関数が期待値を返すところまでこの問題を解決しました。しかし、私が持っている未回答の質問はまだたくさんあり、「解決策」は何よりもハックアラウンドです。
私はこの問題に一日の大部分を費やしたので、何が行われたかを説明するときは我慢してください。まず、問題はの戻り値がであるというget_browser()
ことFALSE
です。これは文書化された戻り値ではありません。これによりFALSE
、返されることは関数内のある種のエラー状態を意味すると思います。
テストコードは、何度も繰り返した後、単純なものになりましたvar_dump(get_browser($agent, true))
。var_dump(get_browser())
ユーザーエージェント文字列を直接渡すことと、すべて同じ戻り値を持つ引数を渡さないことの両方でテストを実行しました。
戻り値に変更がない、試行/検証されたもの:
browscap.ini:
- 最新バージョンを入手し、以前のいくつかのバージョンもテストしました
権限:
bowscap.ini-初期権限は644でしたが、私は644から777まですべてを試しました
browscap.iniを含むディレクトリ-初期権限は755でしたが、777も試しました
PHPが次のような他の関数でファイルとディレクトリにアクセスできることを確認しました
file()
ユーザーエージェント
手動ユーザーエージェント文字列を渡そうとしました
$_SERVER['HTTP_USER_AGENT']を渡してみました
遠く離れた土地にいる友人とユーザーエージェント文字列を確認しました-
get_browser()
期待どおりの値を返しました。
php.ini
browscap設定は正しい場所を指しています
で再度検証
echo count(file(ini_get('browscap')));
エラーログ
- PHPとApacheのエラーログをチェックして、「browscap」または密接に関連するものについての言及がないかどうかを確認しました。
ファイル構造
これがエラーの原因だと思います。browscap.iniはに住んでおり/var/php/
、上記のように適切な権限があります。私の考えでは、PHPはこのディレクトリ、またはそれらの線に沿った何かにアクセスできなかったのかもしれません。ただし、このディレクトリはセッションが保存される場所でもあるため、その可能性は低くなります。
ソリューション"
この問題を解決したのは、browscap.iniをパブリックWebディレクトリに移動することでした。特に文書化されていない戻り値を考えると、なぜこれが当てはまるのか興味があります。「解決策」は機能しますが、私が見つけたと思っていた解決策ではありません...
get_browser()
特別な権限要件、またはそのようなものがありますか?file()
ディレクトリとファイルに問題なくアクセスできましたget_browser()
が、(おそらく)できませんでした。私は実際にこの問題について髪を抜いてきました、そしていくつかの解決策が大好きです!
読んでくれてありがとう!