1

我正在尝试使用 PHP 的内置函数get_browser()。我按照 这篇有用的帖子中的说明进行操作,但仍然出现错误

browscap ini 指令未设置。

我下载了 php_browscap.ini 文件并将其移动到与我的 .htaccess 文件相同的目录中,因此它的位置是home/hostname/subdomain/php_browscap.ini由于我无权访问我的php.ini文件,我正在尝试使用 .htaccess 编辑 browscap 属性。这是我输入的:

php_value browscap home/hostname/subdomain/php_browscap.ini

我不知道这是否重要,但下面有一些重写引擎代码。

如前所述,我仍然收到上述错误。我做错什么了?

谢谢。

4

4 回答 4

4

browscapPHP 值具有可变模式,意味着PHP_INI_SYSTEM它只能在 php.ini 或 httpd.conf(不是 .htaccess)中设置。

于 2012-02-25T13:10:19.670 回答
3

执行 phpinfo() 以了解您的 PHP 运行时配置。如果您的系统配置为“CGI/FastCGI”,那么它可能正在运行 suPHP 作为 PHP 启动器。在这种情况下,您可以指定自己的 php.ini 文件。默认情况下,suPHP 在脚本目录中查找,但您可以通过 .htaccess 文件中的以下指令覆盖它:

suPHP_ConfigPath (expects a path name)

此选项告诉 mod_suphp 将哪个路径传递给 PHP 解释器(通过设置 PHPRC 环境变量)。不要引用文件,而是引用文件所在的目录。

例如:如果要使用“/path/to/server/config/php.ini”,请使用“suPHP_Config/path/to/server/config”。

如果您不使用此选项,PHP 将使用其在默认路径中编译。 此外,您必须在 browsercap 指令中使用格式正确的路径,例如

browscap="/home/hostname/subdomain/php_browscap.ini"

(注意前导/

附录

我刚刚检查了 Dreamhost 共享托管计划使用 suEXEC。使用 suEXEC,您通常可以通过将系统 php.ini(phpinfo() 告诉您在哪里找到它)复制到私有目录来覆盖 php.ini 补丁,例如_private以及 browsercap.ini 然后添加

SetEnv PHPRC /home/hostname/_private

到您的 .htaccess 文件。如果这不起作用,那么问题是 Dreamhost 的 suEXEC 配置所特有的,您需要在http://discussion.dreamhost.com/上询问这个 Q

于 2012-02-25T15:18:58.030 回答
0

这里有两个潜在的问题。

  1. 也许您的主机不允许您覆盖 .htaccess 文件中的 ini 设置。
  2. 也许 browscap 不喜欢您提供的路径。尝试:

    php_value browscap /home/hostname/subdomain/php_browscap.ini
    

    并确保该文件的权限允许网络用户读取它。

于 2012-02-25T13:03:34.820 回答
0

如果您在共享主机上并且无权访问系统 php.ini,那么您可以使用以下独立替换 php 的本机“get_browser()”实现。

https://github.com/garetjax/phpbrowscap

于 2012-02-25T14:58:01.213 回答