如何使用自定义的.ini文件覆盖一些PHP配置默认设置?

9
假设我已经在Ubuntu中安装了PHP 5.5.x,并且它带有默认配置。我想要覆盖一些配置,但我不想(这就是我知道它是可能的):
- 编辑默认的php.ini文件 - 在每个.php文件中使用PHP块来覆盖它们 - 使用.htaccess文件和指令
我想创建一个名为custom-php.ini的文件,并包含以下内容(作为示例):
; Basic configuration override
expose_php = Off
memory_limit = 512M
post_max_size = 128M
upload_max_filesize = 128M
date.timezone = UTC
max_execution_time = 120

; Error reporting
display_errors = stderr
display_startup_errors = Off
error_reporting = E_ALL

; A bit of performance tuning
realpath_cache_size = 128k

; OpCache tuning
opcache.max_accelerated_files = 32000
; Temporarily disable using HUGE PAGES by OpCache.
; This should improve performance, but requires appropriate OS configuration
; and for now it often results with some weird PHP warning:
; PHP Warning:  Zend OPcache huge_code_pages: madvise(HUGEPAGE) failed: Invalid argument (22) in Unknown on line 0
opcache.huge_code_pages=0

; Xdebug
[Xdebug]
xdebug.remote_enable = true
xdebug.remote_host   = "192.168.3.1" // this IP should be the host IP
xdebug.remote_port   = "9001"
xdebug.idekey        = "XDEBUG_PHPSTORM"

我能否在某个地方编写此文件,以便默认的PHP值被custom-php.ini中的值所覆盖?


1
我附近没有Ubuntu机器可以检查,但是难道没有类似于/etc/php/conf.d的东西吗?您应该能够在其中放置部分配置,这将覆盖主配置文件。 - Chris
@TheOneandOnlyChemistryBlob 是的,我不想在每个文件中添加这样的行 ;) - ReynierPM
1
这个问题在这里得到了解答:https://dev59.com/AnM_5IYBdhLWcg3wZSXX - Gabiriele Lalasava
1
如我在原帖中所说,@Daniel,我不想要在每个 .php 文件中使用一个 PHP 代码块来覆盖它们,这意味着我不想使用 ini_set() - ReynierPM
1
@Daniel,我认为ini_set()是一种代码异味。它几乎永远不应该被使用。PHP允许在太多地方进行配置... - Chris
显示剩余10条评论
3个回答

7

是的,这是可能的。首先,在您的文档根目录中创建一个名为info.php的PHP文件,并将<?php phpinfo() ?>放入其中。然后从浏览器调用它并查找Scan this dir for additional .ini files。在Ubuntu上,它可能类似于/etc/php5/apache2/conf.d

在该目录中,您可以放置自己的自定义ini文件(将其命名为99.overrides.php.ini),以便最后解析它。

在那个文件中,放置任何您想要的其他配置,重新启动Apache或Web服务器,更改将生效。


请注意,仅当使用--with-config-file-scan-dir参数编译PHP时,扫描此目录以获取其他.ini文件的值才会被设置。如果它显示为(none),那么您需要重新编译PHP并更正选项才能使用此功能。 - Henry A.
这真让我发疯。我在conf.d目录中添加了一个文件,并根据phpinfo()的显示已经解析,但我的memory_limit值仍然是主值。我在自定义的ini文件中使用了[PATH=/var/www/mysite]指令。你有任何想法为什么没有效果吗? - Hokascha

0

0
如果你不是使用Apache,而是使用CGI/FastCGI SAPI,你可以像下面这样使用.user.ini文件:
upload_max_filesize     = "300M" 
post_max_size           = "100M"

1
从原始问题中,OP说:“我不想使用.htaccess文件和指令”。 - Chris
他说他知道那种方法,而不是他不想使用那种方法。我已经设置了我的答案,从上到下列出了常见的方法和我经验中最好的方法。 - CIRCLE
1
我的评论中包含了原帖的“直接引用”:“我不想...使用.htaccess文件和指令”。我非常确定原帖作者不想要那个解决方案。 - Chris

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