get_browser() returns FALSE


get_browser() returns FALSE

- 在 Linux 上运行 PHP 5.3.8

-

首先,我们已经解决了这个问题,直到函数返回预期值。然而,我仍然有很多未解决的问题,而"解决方案"更像是一种黑客攻击。

我已经在这个问题上花了大半天的时间,所以请耐心等待我解释所做的事情。首先,问题是get_browser()的返回值是 FALSE ,这不是记录的返回值。这让我假设返回FALSE意味着函数中的某种错误状态。

经过多次迭代,测试代码变成了一个简单的var_dump(get_browser($agent, true))。我运行了测试,既直接传递用户代理字符串,又不传递参数,例如 var_dump(get_browser()),它们都具有相同的返回值。

尝试/验证了什么,返回值没有变化:

浏览.ini:

  • 拥有最新版本,还测试了一些以前的版本

权限:

  • bowscap.ini - 初始权限是 644,但我已经尝试了 644-777 的所有内容

  • 包含浏览帽的目录.ini - 初始权限为 755,也尝试了 777

  • 已验证PHP可以使用其他函数访问文件和目录,例如file()

用户代理

  • 尝试传递手动用户代理字符串

  • 尝试传递 $_SERVER['HTTP_USER_AGENT']

  • 与遥远土地上的朋友验证了我的用户代理字符串 - get_browser()按预期返回了值。

PHP.ini

  • 浏览标题设置指向正确的位置

  • 再次通过echo count(file(ini_get('browscap')));验证

错误日志

  • 检查了PHP和Apache的错误日志,是否有任何提到"browscap"或任何密切相关的东西 - 没有什么不寻常的。

文件结构

这就是我怀疑错误的来源。 browscap.ini 住在 /var/php/ ,它具有如上所述的适当权限。我的想法是,也许PHP无法访问这个目录,或者类似的东西。但是,此目录也是存储会话的位置,因此不太可能。

"解决方案">

解决这个问题的是将browscap.ini移动到公共Web目录。我很好奇为什么会这样,特别是考虑到未记录的返回值。"解决方案"有效,但不是我认为我会找到的解决方案......

get_browser()是否有特殊权限要求或类似要求? file()可以很好地访问目录和文件,但get_browser()不能(大概(。我几乎已经在这个问题上拔掉了头发,并希望得到一些解决方案!

感谢您的阅读!

您已经尝试了每种必需的方法。

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

为了使其正常工作,php.ini中的浏览配置设置必须指向系统上browscap.ini文件的正确位置。

browscap.ini 没有与 PHP 捆绑在一起,但您可以在此处找到最新的php_browscap.ini文件。

虽然browscap.ini包含许多浏览器的信息,但它依赖于用户更新来保持数据库最新。文件的格式是不言自明的。

<小时 />

解决问题的是将 browscap.ini 移动到公共 Web 目录。

它可能指向该位置。 即公共网络目录

get_browser(( 是否有特殊权限要求或类似要求?

仅需要读取权限。

实际上,即使手册页上没有记录,get_browser函数也可以出于多种原因返回FALSE

至少看看底层源代码可以让人假设这一点。

我建议你看看那里,然后如果你有其他问题,请告诉我。到时候我也许可以回答他们。

我遇到了与原始海报完全相同的问题。解决方案是什么?PHP.ini 需要 browscap.ini 文件的绝对路径。

因此,即使PHP找到了该文件并且它出现在phpinfo()的输出中,以下行也是问题所在:

browscap = browscap.ini

有了那条线,getBrowser()返回了false.

但是,将其更改为绝对路径是有效的,如下所示:

browscap = /etc/browscap.ini

希望这对某人有所帮助!这是一个奇怪的...