11

-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()が、(おそらく)できませんでした。私は実際にこの問題について髪を抜いてきました、そしていくつかの解決策が大好きです!

読んでくれてありがとう!

4

3 に答える 3

7

必要なすべての方法を試しました。

http://php.net/manual/en/function.get-browser.php注意:

これが機能するためには、のbrowscap構成設定が、システム上のファイルphp.iniの正しい場所を指している必要があります。browscap.ini

browscap.iniはPHPにバンドルされていませんが、最新のphp_browscap.iniファイルがここにあります。

多くのブラウザに関する情報が含まれてbrowscap.iniいますが、データベースを最新の状態に保つためにユーザーの更新に依存しています。ファイルの形式はかなり自明です。


この問題を解決したのは、browscap.iniをパブリックWebディレクトリに移動することでした。

その場所を指している可能性があります。つまり、パブリックWebディレクトリ

get_browser()には特別なアクセス許可の要件、またはそのようなものがありますか?

読み取り権限のみが必要です。

于 2012-05-11T07:05:13.827 に答える
4

実際には、マニュアルページに記載されていなくても、get_browser関数はFALSE複数の理由で戻る可能性があります。

少なくとも基礎となるソースコードを調べて、それを仮定しましょう。

そちらをご覧になり、他にご不明な点がありましたらお知らせください。そうすれば答えられるかもしれません。

于 2012-05-14T13:32:53.077 に答える
4

元のポスターとまったく同じ問題がありました。ソリューション?php.iniには、browscap.iniファイルへの絶対パスが必要でした。

したがって、PHPがファイルを検出し、それがphpinfo()の出力に表示されたとしても、次の行が問題でした。

browscap = browscap.ini

その行で、getBrowser()返されfalseます。

ただし、次のように、絶対パスに変更すると機能します。

browscap = /etc/browscap.ini

これが誰かに役立つことを願っています!それは奇妙なものです...

于 2012-09-06T08:51:05.820 に答える