Welches priorisiert Wordpress, wenn es um php.ini, wp-config und .htaccess geht?

10

Angenommen, ich möchte das maximale Upload-Limit für eine Wordpress-Website ändern und gebe die folgenden Werte an:

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

Welches würde Wordpress bei der Verarbeitung bei Bedarf priorisieren?

imranhunzai
quelle

Antworten:

13

Aus Ihrer Frage geht nicht hervor, was Sie in jeder dieser Dateien ändern, aber ich gehe davon aus, dass es sich jeweils um die upload_max_filesizePHP-Einstellung handelt .

Im Allgemeinen werden die Einstellungen in dieser Reihenfolge angewendet, wobei jeder den vorherigen Wert überschreibt:

  1. php.ini
  2. Apache-Anweisungen in .htaccess
  3. ruft an ini_set()

Diese Einstellung ist jedoch definiert als PHP_INI_PERDIR, was, wie auf dieser Seite erläutert, bedeutet, dass sie nicht mit festgelegt werden kann ini_set, sodass wp-config.phpsie nicht geändert werden kann. In dem Beispiel, das Sie in der Frage angeben, wird der Wert von .htaccess von 64 MB verwendet.

Sie können dies überprüfen, indem Sie echo ini_get('upload_max_filesize');irgendwo in Ihrem Code ausführen.

Beachten Sie, dass andere Stellenwerte festgelegt werden können, die ich oben nicht aufgeführt habe, z. B. php.ini-Dateien pro Benutzer und andere Apache-Konfigurationskontexte . Einige davon können auch deaktiviert werden. Wenn Ihr Server nicht so eingestellt ist, dass Überschreibungen in .htaccess zulässig sind, können Sie dort auch keinen Wert festlegen.

Beachten Sie auch, dass Wordpress einige seiner eigenen Konfigurationsvariablen enthält, die auf unterschiedliche Weise mit der PHP-Konfiguration interagieren. Zum Beispiel WP_MEMORY_LIMITwird versucht , die PHP- memory_limitEinstellung beim Start zu erhöhen , hat aber Code, der sie überprüft und nie senkt . Es gibt keine allgemeine Regel dafür, es wird für verschiedene Einstellungen unterschiedlich sein.

IMSoP
quelle
php.ini ist immer der erste, der sich entscheidet.
WpMania.Net
5

Grundsätzlich werden alle drei Dateien berücksichtigt.

WordPress / Ihr Server überprüft in der folgenden Reihenfolge:

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

Wenn etwas auf einer "höheren Ebene" (später in der Kette) Ihren Wert einschränkt, wird der vorherige Wert ignoriert oder überschrieben. Wenn ein Teil der Kette fehlt, .htaccesswird stattdessen der Wert in beispielsweise dem nächsthöheren verwendet.

In Ihrem Beispiel .htaccesswürde dies die max_upload_sizeauf 64 MB beschränken, obwohl Ihr Server mit bis zu 256 MB in Ordnung wäre und WordPress zuerst auch eine Dateigröße von bis zu 128 MB akzeptieren würde.

Sie können auch über die .htaccessDatei ein anderes Limit festlegen und dabei den Wert von überschreiben php.ini, sodass er nicht mehr der dominierende Wert ist. Dies funktioniert in vielen Hosting-Umgebungen. Die Chancen stehen also gut, dass Sie die auf diese Weise erhöhen oder senken max_upload_sizekönnen.

Wenn Sie ein strenger konfiguriertes Hosting / Server haben, ist die Option zum Überschreiben der Einstellungenphp.ini möglicherweise deaktiviert. In diesem Fall überschreibt max_upload_sizevon .htaccesswon't Arbeit, so könnte dies ein limitierender Faktor sein.

Flomei
quelle
8
Wie ist das "nicht so, wie es funktioniert", wenn Sie eine Prioritätenliste angeben, genau wie es die Frage verlangt? Und wenn .htaccesses in der Mitte der Liste steht, warum sollte das der begrenzende Faktor sein?
IMSoP
Ich denke mein Gesichtsausdruck war unklar. Ich verstand seine Frage als "Wenn ich in wp-config einen höheren Wert setze, wird das die anderen" dominieren "?" und das ist nicht , wie es funktioniert. ;-) @bns hat das besser erklärt.
Flomei
Richtig, ich verstehe, was du jetzt meinst. Wie ich jedoch unter der Antwort von bns kommentiert habe, kann ich keine Dokumentation finden, die die Behauptung stützt, dass Sie nicht mit einem höheren Wert überschreiben können. Der Wert von wp-config.php wird immer ignoriert, wie in meiner Antwort erläutert, aber ich bin mir ziemlich sicher, dass ein höherer Wert in .htaccess einen niedrigeren Wert in php.ini überschreiben würde.
IMSoP
Sie haben teilweise Recht, aber das Überschreiben von php.ini-Werten aus .htaccess kann deaktiviert werden, siehe meine aktualisierte Antwort.
Flomei
Ihr Update impliziert weiterhin, dass Sie nur über .htaccess einen niedrigeren Wert festlegen können . Ich kenne keinen Grund, warum Sie dort auch keinen höheren Wert einstellen könnten . Die Tatsache, dass der Mechanismus deaktiviert werden kann, ist ein guter Punkt, den ich in meiner Antwort beschönigt habe. Unter der Annahme, dass PHP-Einstellungen in .htaccess zulässig sind, wird ein Wert in .htaccess einen Wert in php.ini absolut "dominieren" für die gleiche Einstellung.
IMSoP
3

Ich denke, Flomei sollte die Antwort bearbeiten, denn das ist die richtige Antwort, aber eine schlechte Erklärung. Php.ini -> .htaccess -> wp-config.phpist eigentlich die Reihenfolge, in der jede Datei gelesen wird und die Werte unter Berücksichtigung der zuvor definierten Einstellung festgelegt werden. Falls es jedoch eine zuvor definierte Einstellung gibt, wird diese nur dann "überschrieben", wenn die neue Einstellung niedriger ist.

Das heißt, wenn Sie wp-config.php mit 64 MB und .htaccess mit 32 MB haben: wp-config.php überschreibt diese Einstellung nicht, da es bereits eine Untergrenze gibt und Sie am Ende 32 MB haben.

Wenn Sie jedoch wp-config.php mit 32 MB und .htaccess mit 64 MB haben, senkt wp-config.php die vorherige Einstellung auf 32 MB.

Bearbeiten: Um zu verdeutlichen, wie IMSoP hervorhebt, können Sie mit wp-config.php nur eine Größe festlegen, die restriktiver ist als die PHP-Einstellungen, wenn Sie 'WP_MEMORY_LIMIT' ändern. Sie können darüber hinaus nicht darüber hinausgehen. Es handelt sich also eigentlich nicht um eine Überschreibung der Einstellungen. Tatsächlich werden zur Laufzeit an verschiedenen Punkten getrennte Prüfungen durchgeführt. Wenn Sie die PHP-Einstellung upload_max_filesizeso ändern, wie er es annimmt (die Frage zeigt nicht an, welche Einstellungen Sie ändern), hat dies keine Auswirkungen.

Außerdem müssen Sie berücksichtigen, dass der Wert post_max_sizegrößer sein muss als upload_max_filesizein Ihren PHP-Einstellungen

bns
quelle
2
Können Sie auf eine Dokumentation zu diesem Thema "nur überschreiben, wenn der neue Wert niedriger ist" verlinken, da dies für keine andere PHP-Einstellung gilt, die ich gesehen habe. Es wird auch nicht auf dieser Handbuchseite erwähnt . Was wird erwähnt, wie ich in meiner Antwort darauf hin, dass upload_max_filesizezur Laufzeit nicht geändert werden kann (vermutlich weil es zu spät ist für sie keine Wirkung haben) , so wp-config.phpkann es nicht beeinflusst die eine oder die andere. Ein eingebauter Standardwert von 2 MB wird ebenfalls erwähnt, und Sie können ihn definitiv höher einstellen.
IMSoP
Das hat mir das Support-Team meines Hosting-Anbieters erklärt, als ich das gleiche Problem hatte. Ich werde nach der E-Mail suchen und sie aktualisieren, wenn ich sie finde. Ich bin mir nicht sicher, ob Sie den Wert innerhalb des Servers tatsächlich überschreiben oder nur, dass Überprüfungen in der Ausführungszeit an verschiedenen Stellen durchgeführt werden. Daher ist das Verhalten so.
Bns
1
Nur um es noch einmal zu wiederholen: Wenn die Zeile, die Sie hinzufügen, dies wp-config.phpist ini_set('upload_max_filesize', '32M');, hat dies niemals Auswirkungen, da diese Einstellung zur Laufzeit nicht so festgelegt werden kann, wie sie definiert istPHP_INI_PERDIR . (Es sei denn, diese Dokumentationsseite ist falsch, aber das scheint unwahrscheinlich.)
IMSoP
Nein, du hast recht. Es ist nicht wirklich eine Überschreibung der Einstellungen. Es ist nur eine weitere getrennte Einschränkung, die ich entsprechend aktualisieren werde, um Verwirrung zu vermeiden.
Bns
1
@IMSoP / bns - Ich denke, es gab möglicherweise ein wenig Verwirrung zwischen bestimmten wp-config.phpWerten und dem Festlegen beliebiger PHP-Werte mit ini_set(). Soweit ich weiß, wp-config.phphat dies in erster Linie mit dem Festlegen von WordPress-spezifischen Konfigurationswerten zu tun, und viele davon werden tatsächlich durch die zugrunde liegende PHP-Konfigurationseinstellung (wie in der Antwort erwähnt) eingeschränkt (dh auferlegt WP_MEMORY_LIMIT). Dies ist eine WordPress-Sache. Wenn Sie jedoch beliebige PHP-Konfigurationswerte ini_set()in PHP festlegen, gibt es keine solche Einschränkung.
MrWhite