在共享开发环境中覆盖 PHP.ini
Posted
技术标签:
【中文标题】在共享开发环境中覆盖 PHP.ini【英文标题】:Overriding PHP.ini in a shared development environment 【发布时间】:2013-07-17 00:00:03 【问题描述】:我的开发环境与我的初创公司的其他开发人员共享,并在 Rackspace 上设置。 php.ini 文件位于/etc/
文件夹中,我相信这是一个集中的位置,从那里配置每个其他开发人员的开发环境设置。我想专门为自己定制这个php.ini
文件,而不是在/etc
/ 位置进行。
特别是我在我的环境中设置XDEBUG,其他一些开发人员不想要它,所以我不想给它们出bug :)
为此,我在网上搜索了如何覆盖专门针对某个目录的 php.ini 文件,发现this page on ***
然后,我只需将 php.ini 文件复制粘贴到我的 htdocs 文件夹中,然后简单地回显phpinfo()
(我在我的一个控制器中回显了这个,(使用 Zend))。 index.php 文件位于 htdocs 文件夹中。
当我查看@“加载的配置文件”时,它仍然显示为
/etc/
而不是 ../htdocs/
有人知道怎么回事吗?
【问题讨论】:
简单操作:你重启了apache吗? 哦不,我不认为我能做到这一点......因为我无法控制它 链接 S.O.页面列出了每个 dir ini 文件的许多标准。告诉我们你已经检查了每一个,以及你是如何检查的。 嗯,这是针对xdebug的,所以我认为它需要在脚本开始执行之前设置它? 【参考方案1】:一般来说,不可能在每个目录的基础上加载php.ini
,但在某些特殊情况下(CGI/FastCGI),它是:请参阅Per-user configuration 的文档
自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 样式的 INI 文件。这些文件仅由 CGI/FastCGI SAPI 处理。此功能淘汰了 PECL htscanner 扩展。如果您使用的是 Apache,请使用 .htaccess 文件以获得相同的效果。
除了主 php.ini 文件外,PHP 还会扫描每个目录中的 INI 文件,从请求的 PHP 文件的目录开始,一直到当前文档根目录(如 $_SERVER[' DOCUMENT_ROOT'])。如果 PHP 文件位于文档根目录之外,则仅扫描其目录。
如果您在一台服务器上托管多个独立站点,则无论如何都应该考虑使用 FastCGI,以保持它们分开。使用 php5-fpm
可以很容易地设置多个工人池。
请注意,仅在 user-ini-file 中设置有限的 ini-options 子集。 正如您所说,您无法控制服务器,可能的解决方法是:
使用ini_set()
覆盖脚本中的更改。不过,并非所有配置指令都可以使用ini_set()
进行更改。
使用目录中的 .htaccess 文件覆盖 php.ini
文件中的配置。
(部分改编自#1438393)
希望这会有所帮助!
【讨论】:
我不认为添加 ini_set() 会有所帮助,因为我正在尝试加载 xDebug(或者会加载)。但是 htdocs 选项似乎很有趣...会尝试 :) -1 完全错误。 php 可以在每个目录的基础上加载多个 ini 文件。 @chris,你没有关注对话。是的,您可以在每个目录中加载尽可能多的 php.ini 文件,只要您每次重新启动 apache,它就可以正常工作。我没有启动 apache 的访问权限。 @amal,所以使用 .htaccess 覆盖一些 php.ini 设置似乎是要走的路。这是否意味着当我回显 phpinfo() 时,它将从 htdocs 读取覆盖的属性值,还是仍会从 php.ini 读取它?我问的原因仅仅是因为我需要检查某些属性是否设置正确。 @ParijatKalia 你不需要重启 apache。【参考方案2】:我不确定你是否理解这篇文章。该帖子意味着如果您运行服务器并想要每个域 php.ini 您可以将模块作为每个域运行,以便每个用户在那里控制域 php.ini 但是看起来您的服务器不提供此功能,因此您需要我们htaccess 文件以覆盖 php.ini 设置。
重写并不意味着您可以更改目录,这意味着可能会添加模块或添加错误报告等...
你可以通过这个帖子来做到这一点:How can I use xdebug to debug only one virtual host?
【讨论】:
以上是关于在共享开发环境中覆盖 PHP.ini的主要内容,如果未能解决你的问题,请参考以下文章
如何在共享主机环境中关闭特定目录的 php safe_mode?