- 在 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
希望这对某人有所帮助!这是一个奇怪的...