- 在Linux上运行PHP 5.3.8 -
首先,我们已经解决了这个问题,使函数返回了预期的值。然而,我还有很多未解答的问题,这个“解决方案”更像是一个hack而不是真正意义上的解决方案。
我花了一整天的时间来解决这个问题,所以请容忍我解释解决方法。首先,问题在于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
使用其他函数如
file()
验证PHP可以访问文件和目录
用户代理
尝试手动传递用户代理字符串
尝试传递$_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()
不能(可能)。我几乎因这个问题而抓狂了,希望能得到一些解决方案!
谢谢阅读!
phi.ini
中的browsecap
值是什么。它是完整路径/var/php/browsecap.ini
还是相对路径browsecap.ini
?或者在测试过程中你一直在更改它? - drew010echo count(file(ini_get('browscap')));
来进行验证,它返回了预期的结果。这意味着file()
可以正常打开和读取文件,因此get_browser()
也应该能够做到。 - orourkek