- 在 Linux 上运行 PHP 5.3.8-
首先,我们已经解决了这个问题,直到函数返回预期值。但是,我仍然有很多未解决的问题,而且“解决方案”更像是一种破解方法。
我在这个问题上花了一天的大部分时间,所以请耐心等待我解释所做的事情。首先,问题在于 is 的返回值get_browser()
,FALSE
它不是记录在案的返回值。这使我假设FALSE
返回意味着函数中存在某种错误状态。
测试代码,经过多次迭代,变成了一个简单的var_dump(get_browser($agent, true))
. 我运行测试时直接传递用户代理字符串,以及不传递任何参数,例如var_dump(get_browser())
,所有参数都具有相同的返回值。
已尝试/验证的内容,返回值没有变化:
浏览器.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()
不能(大概)。在这个问题上,我几乎已经把头发拉了出来,并且希望得到一些解决方案!
谢谢阅读!