【发布时间】:2012-02-13 22:36:50
【问题描述】:
是否可以只有一个 php.ini 文件,例如在 webroot 中(或者甚至在它之外以防止人们通过 GET 访问它),并快速轻松地告诉 PHP 它在哪里?
我知道您可以在.htaccess 中设置 php.ini 指令,但是否可以定义要使用的特定 php.ini 文件?
【问题讨论】:
是否可以只有一个 php.ini 文件,例如在 webroot 中(或者甚至在它之外以防止人们通过 GET 访问它),并快速轻松地告诉 PHP 它在哪里?
我知道您可以在.htaccess 中设置 php.ini 指令,但是否可以定义要使用的特定 php.ini 文件?
【问题讨论】:
将此添加到您的服务器配置中...
<VirtualHost 1.2.3.4:80>
PHPINIDir /path/to/new/php_ini
</VirtualHost>
确保只包含目录的路径,而不是文件的完整路径。
然后重新启动 Apache。
检查它是否与phpinfo() 一起使用。
【讨论】:
查看 php 文档中的 .user.ini 部分。
自 PHP 5.3.0 起,PHP 包含对 .htaccess 样式的 INI 文件的支持 每个目录的基础。
但除了 .unser.ini 解决方案之外,您还可以在“已解析的其他 .ini 文件”目录中放置一个额外的 ini 文件。在那里,您可以使用一个 ini 文件覆盖所有其他设置。以zzz开头命名,最后解析。这也很容易让您的主机部署而不会破坏他的设置。
【讨论】:
Kolink,我怀疑您使用的是共享主机服务,在这种情况下,您的主机可能正在使用一种叫做 suPHP 的东西。在这种情况下——正如你所描述的——PHPINIDir 指令不起作用,在这种情况下有一个suPHP_ConfigPath 指令。
在访问方面,我的DOCROOT/.htaccess中有一个标准的mod_rewrite:
RewriteEngine On
RewriteBase /
# if a forbidden directory or file name (starting with a . or /) then raise 404 Fatal
RewriteRule (^|/)[_.] - [F]
它的作用是禁止任何以. 或_ 为前缀的文件名或目录的请求。我有一个DOCROOT/_private 为我保存这些东西:
suPHP_ConfigPath DOCROOT/_private
您需要将 DOCROOT 替换为服务上的本地设置。在 phpinfo() 列表中查找 DOCUMENT_ROOT。
【讨论】: