在PHP中将"auto_prepend_file"添加到".user.ini"文件中

3

我希望在我的项目运行任何页面时都能加载文件variables.php(该文件仅包含变量),以便我可以从任何地方使用这些变量。

我创建了一个名为.user.ini的文件(并将其放置在根文件夹中):

; Automatically add files before PHP document.
; http://php.net/auto-prepend-file
auto_prepend_file = /Volumes/www/project_name/admin/libs/variables.php

它不起作用。似乎 PHP 没有读取 .user.ini 文件。

默认情况下,php.ini 已正确配置:

user_ini.cache_ttl    300           300
user_ini.filename     .user.ini     .user.ini

我哪里做错了?


你能否将该文件的确切位置放在d:/.user.ini上,并查看它是否起作用? - Satya
你的 PHP 解释器是作为 CGI、FastCGI 或类似的 SAPI 运行的吗? - Álvaro González
从文档中可以看到:“该文件被包含时,就像使用require函数一样,所以会使用include_path。” 请将其放置在Web服务器可访问的文件夹中,并给出相对路径进行包含(例如admin/libs/variables.php),可以吗? - Aleksei Matiushkin
@Satya:上述路径是我的文件系统(Mac OSX)上的确切位置。 - Fred K
@mudasobwa:尝试使用相对路径,但还没有成功。 - Fred K
显示剩余2条评论
2个回答

7

好的,手册中已经说明了:

从 PHP 5.3.0 开始,PHP 包含对按目录配置 INI 文件的支持。这些文件仅由 CGI/FastCGI SAPI 处理。此功能使 PECL htscanner 扩展程序过时。

并且:

如果您使用 Apache,请使用 .htaccess 文件达到相同的效果。

...尽管它实际上是指 Apache 模块 (mod_php)。

如果你需要不依赖于 SAPI 的自定义设置,恐怕你必须同时使用它们。如果您保留那些最基本的设置(大多数 PHP 指令可以在 PHP 代码本身中提供),则可以将维护负担最小化。并且您需要确保在没有可用 mod_php 时,.htaccess 设置不会崩溃:

<IfModule mod_php5.c>
    php_value auto_prepend_file /Volumes/www/project_name/admin/libs/variables.php
</IfModule>

好的,在apache2handler上它能够正常工作(使用htaccess),但在cgi上我遇到了这个问题:浏览器加载了一段时间,然后显示页面,并出现了一堆关于页面中使用的任何php函数的错误,但我知道它已经加载了variables.php文件,因为有一个测试echo。 - Fred K
如果代码不正确,无论你如何加载它都没有意义 :-? - Álvaro González

1

我认为.user.ini应该位于项目的根目录下,例如/Volumes/www/project_name/.user.ini

除了主要的php.ini文件外,PHP还会在每个目录中扫描INI文件,从请求的PHP文件所在的目录开始,并逐级向上直到当前文档根目录(如$_SERVER['DOCUMENT_ROOT']所设置)。如果PHP文件位于文档根目录之外,则只会扫描其所在的目录。

.user.ini文档


从您的链接中:「自 PHP 5.3.0 起,PHP 包括对每个目录基础上的配置 INI 文件的支持。」 - Álvaro González
尝试将 .user.ini 放置在根目录中,但尚未生效。 - Fred K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接