在涉及php.ini,wp-config和.htaccess时,Wordpress优先考虑哪一个?


10

假设我想更改Wordpress网站的最大上传限制,并提供以下值:

wp-config.php:128MB php.ini:256MB .htaccess:64MB

那么,WordPress在根据需要进行处理时会优先考虑哪个?

Answers:


13

这不是从你的问题不清楚是什么,你在每一个文件的变化,但我在每种情况下它是假设upload_max_filesizePHP设置

通常,设置将按此顺序应用,每个设置都将覆盖先前的值:

  1. php.ini
  2. .htaccess中的Apache指令
  3. 致电 ini_set()

但是,此设置定义为PHP_INI_PERDIR如本页所述,这意味着无法使用进行设置ini_set,因此wp-config.php无法更改。因此,在您输入问题的示例中,它将采用64MB的.htaccess中的值。

您可以通过echo ini_get('upload_max_filesize');在代码中的某个地方运行来验证这一点。

请注意,可以设置其他未在上面列出的值,例如,每用户php.ini文件和其他Apache配置上下文。另外,其中一些可以被禁用,因此,如果您的服务器未设置为允许.htaccess中的替代,您也将无法在其中设置值。

还要注意,Wordpress包含一些自己的配置变量,这些变量以不同的方式与PHP配置交互。例如,WP_MEMORY_LIMIT将在启动时尝试提高 PHP memory_limit设置,但具有可检查且永不降低它的代码。没有一般规则,不同的设置会有所不同。


php.ini始终是第一个选择。
WpMania.Net

5

基本上所有三个文件都被考虑在内。

WordPress /您的服务器将按以下顺序检查:

wp-config.php > .htaccess > php.ini

如果某个“较高级别”(在链中后期)的内容限制了您的价值,则先前的价值将被忽略或覆盖。如果缺少一条链,则将.htaccess使用例如下一个较高的链中的值代替。

在您的示例中,这.htaccess将限制max_upload_size为64 MB,尽管您的服务器可以使用256 MB的内存,而WordPress也可以首先接受128 MB的文件大小。

您还可以通过.htaccess文件设置不同的限制,并通过这样做来覆盖的值php.ini,以使其不再是主要值。这在很多托管环境中都有效,因此您可以通过这种方式升高降低它的机会很大max_upload_size

如果您具有更严格配置的主机/服务器,则可能禁用了覆盖设置的选项php.ini在这种情况下,覆盖max_upload_size.htaccess不需额外的工作,所以这可能是一个限制因素。


8
当您按照问题的要求给出优先级列表时,这是“如何工作的”?如果.htaccess在列表的中间,那为什么会成为限制因素呢?
IMSoP '02

我认为我的表达不清楚。我理解他的问题是:“如果我在wp-config中设置一个更高的值,那会“主导”其他人吗?” 而是不是它是如何工作的。;-) @bns对此做了更好的解释。
flomei

是的,我明白你的意思了。但是,正如我在bns的回答下所评论的那样,我找不到任何文档来支持您不能用更高的值覆盖的声明。如我的回答所述,wp-config.php值将始终被忽略,但是我很确定.htaccess中的较高值将覆盖php.ini中的较低值。
IMSoP '17

您部分正确,但是可以停用从.htaccess覆盖的php.ini值,请参阅我的最新答案。
flomei

您的更新仍然暗示您只能通过.htaccess 设置较低的值。我完全不知道您不能在此设置更高的值。可以禁用该机制的事实是一个很好的观点,我在回答中做了一个掩饰,但是假设.htaccess中允许使用任何 PHP设置,那么.htaccess中的值将绝对“主导” php.ini中的值。对于相同的设置。
IMSoP '17

3

我认为flomei应该编辑答案,因为那是正确的答案,但解释不好。 Php.ini -> .htaccess -> wp-config.php实际上是每个文件将被读取的顺序,并且将考虑先前未定义的设置来设置值。但是,在存在先前定义的设置的情况下,仅当新设置较低时,此设置才会被“覆盖”。

这意味着,如果您具有64Mb的wp-config.php和32 MB的.htaccess,则:wp-config.php不会覆盖该设置,因为已经存在下限,最终您将获得32Mb。

但是,如果您具有32Mb的wp-config.php和64 MB的.htaccess,则wp-config.php会将先前的设置降低为32Mb。

编辑:正如IMSoP指出的,要弄清楚,wp-config.php仅允许您设置一个比PHP设置允许的大小更严格的大小(如果您要更改“ WP_MEMORY_LIMIT”),它不能超出您的范围。因此,它实际上不是设置替代。实际上,在运行时在不同点进行了单独的检查。如果您upload_max_filesize按照他的假设更改了php设置(该问题并不表示您正在更改哪些设置),那将无效。

另外,您必须考虑到post_max_size必须大于upload_max_filesizePHP设置中的


2
您是否可以链接到任何文档,“仅当新值较低时才覆盖”,因为我见过的任何其他PHP设置当然都不是真的。本手册页上也未提及。什么提到的那样,我在答复中指出,是upload_max_filesize不能在运行时更改(大概是因为它是为时已晚,它有什么作用),因此wp-config.php可以在不影响它的一种方式或其他。2MB的内置的默认也被提及,并且可以肯定它设置高于。
IMSoP '02

基本上,这是我的主机提供商支持团队在遇到相同问题时向我解释的内容,如果找到,我将搜索电子邮件并进行更新。我不确定是在服务器内部实际覆盖了该值,还是只是在执行时在不同位置进行了验证,所以行为是这样的。
bns

1
只是重申,如果您要添加到行wp-config.phpini_set('upload_max_filesize', '32M');它有没有效果,以往,因为该设置不能在运行时被设定它被定义为PHP_INI_PERDIR。(除非该文档页面是错误的,但似乎不太可能。)
IMSoP

不,你是对的。这不是真正的设置替代。它只是另一个单独的限制,我将相应地进行更新以避免混淆。
bns

1
@ IMSoP / bns-我认为特定wp-config.php值和使用设置任意PHP值之间可能存在一些混淆ini_set()。据我了解,这wp-config.php主要与设置WordPress特定的配置值有关,其中许多确实基础PHP配置设置(如WP_MEMORY_LIMIT答案中所述)的限制(即强加了上限)。这是WordPress的事情。但是,在PHP中使用设置任意PHP配置值时ini_set(),没有这种限制。
MrWhite
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.