Ausführen von PHP Version 7.1.30 unter RHEL 7.7.
Ich möchte memory_limit erhöhen, war mir aber nicht sicher, ob ich die richtige Syntax hatte (dh 256 MB oder 256 MB). Zu Beginn habe ich einen schlechten Wert "Hugo" als memory_limit-Einstellung eingegeben. Das Problem dabei ist das Ergebnis von phpinfo () (ausgeführt unter httpd), das buchstäblich die Zeichenfolge "Hugo" enthält, dh:
Das hat mich etwas beunruhigt, dass PHP tatsächlich keine Überprüfung der Gesundheit der Werte durchführt. (Wenn der angegebene Wert schlecht wäre, würde ich erwarten, dass er auf einen Standardwert zurückgesetzt wird, z.)
Kann jemand dies kommentieren - insbesondere, woher wissen Sie, ob PHP Dinge erzwingen wird (wenn eine willkürliche Zeichenfolge bereitgestellt werden kann).
(int) 'HUGO'; // => 0
. Was auf meinem Computer bei 2 MB verwendetem Speicher zu versagen beginnt.memory_limit 256M
die korrekte Syntax .Antworten:
Das Verwirrende dabei ist, dass die Einstellung wie eine Ganzzahl mit einer speziellen Syntax aussieht, aber intern als Zeichenfolge definiert ist. Die Zeichenfolge wird dann bei jeder Änderung des Werts in eine separate globale Variable analysiert . Entscheidend ist, dass das Ergebnis des Parsens der Zeichenfolge in eine Ganzzahl nicht in der Einstellungstabelle gespeichert wird. Wenn Sie also aufrufen
phpinfo()
, sehen Sie die ursprüngliche Eingabe und nicht den analysierten Wert.Sie können dies in der Quelle sehen:
zend_atol
, die die speziellen Suffixe behandelt, in eine GanzzahlDie unterstützte Syntax wird letztendlich definiert in
zend_atol
:g
,G
,m
,M
,k
, oderK
Ein Wert ohne Ziffern am Start wird als Null analysiert. Wenn Sie die globale Variable festlegen, wird das Speicherlimit basierend auf der Konstante auf das zulässige Minimum festgelegt
ZEND_MM_CHUNK_SIZE
.Sie können den Effekt sehen, indem Sie das Speicherlimit festlegen, dann eine Schleife ausführen, die schnell eine große Menge an Speicher zuweist, und sehen, was in der Fehlermeldung angezeigt wird. Zum Beispiel:
quelle
Zuerst müssen wir verstehen, wie PHP.ini im Interpretationsworkflow funktioniert. memory_limit ist Direktiven für PHP.
Wenn Sie mit der PHP-Funktion arbeiten, müssen Sie so etwas tun
ini_set(‘memory_limit’,’256MB’)
. Diese Funktion setzt Ihren Wert also vorübergehend auf die Interpretervariable. Wenn Sie näher sehen, können Sie die beiden Spalten erhalten. Eine ist für die lokale und eine für die globale. Das zeigt die Fähigkeit der Werte für den Einzelnen.Wenn Sie jedoch für global definiert haben, müssen Sie ein Suffix mit K, M bzw. G festlegen. Wenn wir diesen Wert mit apache .htaccess überschreiten, ist dasselbe für PHP fpm erforderlich.
quelle