Какой из них имеет приоритет Wordpress, когда дело доходит до php.ini, wp-config и .htaccess?

10

Допустим, я хочу изменить максимальный лимит загрузки для веб-сайта Wordpress, и я даю следующие значения:

wp-config.php: 128 МБ php.ini: 256 МБ .htaccess: 64 МБ

Итак, какой из них будет приоритет Wordpress при обработке по мере необходимости?

imranhunzai
источник

Ответы:

13

Это не ясно из вашего вопроса , что вы меняете в каждом из этих файлов, но я полагаю , в каждом случае это настройка PHP .upload_max_filesize

В общем, настройки будут применяться в следующем порядке, каждый переопределяя предыдущее значение:

  1. php.ini
  2. Директивы Apache в .htaccess
  3. звонки в ini_set()

Однако этот параметр определяется как PHP_INI_PERDIR, что, как объясняется на этой странице, означает, что его нельзя установить с помощью ini_set, поэтому он wp-config.phpне может изменить его. Таким образом, в примере, приведенном в вопросе, он будет принимать значение из .htaccess 64 МБ.

Вы можете проверить это, запустив echo ini_get('upload_max_filesize');где-нибудь в своем коде.

Обратите внимание, что могут быть установлены другие значения мест, которые я не перечислил выше, такие как файлы php.ini для каждого пользователя и другие контексты конфигурации Apache . Кроме того, некоторые из них могут быть отключены , поэтому, если на вашем сервере не разрешено переопределение в .htaccess, вы также не сможете установить значение там.

Также обратите внимание, что Wordpress включает в себя некоторые собственные переменные конфигурации, которые по-разному взаимодействуют с конфигурацией PHP. Например, WP_MEMORY_LIMITпопытается повыситьmemory_limit настройку PHP при запуске, но имеет код, который проверяет и никогда не понижает его . Там нет общего правила, это будет отличаться для разных настроек.

IMSoP
источник
php.ini всегда первым выбирает.
WpMania.Net
5

В основном все три файла приняты во внимание.

WordPress / ваш сервер проверит в следующем порядке:

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

Если что-то на «более высоком уровне» (позднее в цепочке) ограничивает ваше значение, первое значение будет игнорироваться или перезаписываться. Если часть цепочки отсутствует, .htaccessвместо нее будет использоваться значение, например, следующего за более высоким.

В вашем примере .htaccessбудет ограничено max_upload_sizeдо 64 МБ, хотя ваш сервер будет в порядке с 256 МБ и WordPress также будет принимать до 128 МБ в размере файла в первую очередь.

Вы также можете установить другой лимит через .htaccessфайл и, делая это, вы перезаписываете значение php.ini, чтобы оно больше не было доминирующим. Это работает во многих средах хостинга, так что, скорее всего, вы можете увеличить или уменьшить max_upload_sizeтаким образом.

Если у вас более строго настроенный хостинг / сервер, возможно, опция отмены настроек php.iniотключена. В этом случае, перекрывая max_upload_sizeот .htaccesswon't работы, так что это может быть ограничивающим фактором.

flomei
источник
8
Как это «не так, как это работает», когда вы даете список приоритетов, как вопрос? И если он .htaccessнаходится в середине списка, почему этот фактор является ограничивающим фактором?
IMSoP
Я думаю, что мое выражение было неясным. Я понял его вопрос как «если я установлю более высокое значение в wp-config, будет ли это« доминировать »над остальными?» и это не так, как это работает. ;-) @bns объяснил это лучше.
flomei
Хорошо, теперь я понимаю, что вы имеете в виду. Однако, как я прокомментировал под ответом bns, я не могу найти документации, подтверждающей утверждение, что вы не можете переопределить более высокое значение. Как описано в моем ответе, значение wp-config.php всегда будет игнорироваться, но я уверен, что более высокое значение в .htaccess переопределит меньшее в php.ini.
IMSoP
Вы частично правы, но переопределение значений php.ini из .htaccess может быть деактивировано, см. Мой обновленный ответ.
flomei
Ваше обновление по-прежнему подразумевает, что вы можете установить меньшее значение только через .htaccess. Я не знаю причин, по которым вы не могли бы также установить более высокое значение там. Тот факт, что механизм можно отключить, является хорошим моментом, и я в своем ответе обмолвился, но если предположить, что любые настройки PHP разрешены в .htaccess, то значение в .htaccess будет абсолютно «доминировать» над значением в php.ini. для того же параметра.
IMSoP
3

Я думаю, что flomei должен отредактировать ответ, потому что это правильный ответ, но плохое объяснение. Php.ini -> .htaccess -> wp-config.phpна самом деле порядок, в котором каждый файл будет прочитан и будет устанавливать значения, принимая во внимание, что ранее не было задано никаких настроек. Но в случае, если есть ранее определенная настройка, она будет «перезаписана», только если новая настройка ниже.

Это означает, что если у вас есть wp-config.php с 64 МБ и .htaccess с 32 МБ: wp-config.php не будет переопределять этот параметр, потому что уже есть нижний предел, и вы получите 32 МБ.

Но если у вас есть wp-config.php с 32 МБ и .htaccess с 64 МБ, wp-config.php снизит предыдущий параметр до 32 МБ.

Изменить: чтобы уточнить, как указывает IMSoP, wp-config.php просто позволяет вам установить размер, который является более ограничительным, чем тот, который позволяют настройки PHP, если вы изменяете «WP_MEMORY_LIMIT», он не позволяет вам выйти за пределы этого. Так что на самом деле это не переопределение настроек. На самом деле, во время выполнения выполняются отдельные проверки в разных точках. Если вы меняете настройку php так, upload_max_filesizeкак он предполагает (вопрос не указывает, какие настройки вы меняете), это не имеет никакого эффекта.

Кроме того, вы должны принять во внимание, что значение post_max_sizeдолжно быть больше, чем upload_max_filesizeв ваших настройках PHP

BNS
источник
2
Можете ли вы сослаться на любую документацию для этого «только переопределения, если новое значение меньше», потому что это, безусловно, не относится к любым другим настройкам PHP, которые я видел. Не упоминается и на этой странице руководства . Что это было сказано, как я доказываю в моем ответе, то , что upload_max_filesizeне может быть изменен во время выполнения (предположительно потому , что это слишком поздно для того , чтобы иметь никакого эффекта) , так что wp-config.phpне может повлиять на это, так или другой. Также упоминается встроенное значение по умолчанию 2 МБ, и вы можете определенно установить его выше.
IMSoP
Это в основном то, что мне предоставила команда поддержки моего хостинг-провайдера, когда у меня возникла такая же проблема, я буду искать электронную почту и обновлять, если найду ее. Я не совсем уверен, что на самом деле вы переопределяете значение внутри сервера, или просто проверки выполняются во время выполнения в разных местах, поэтому поведение такое.
BNS
1
Просто повторит, если линия вы добавляете в wp-config.phpэто ini_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 с использованием ini_set()в PHP такого ограничения нет.
MrWhite