Exécution de PHP version 7.1.30 sous RHEL 7.7.
Je veux bump memory_limit, mais je ne savais pas si j'avais la bonne syntaxe (ie 256M ou 256MB). Donc, pour commencer, j'ai mis une mauvaise valeur "Hugo" dans le paramètre memory_limit. Le problème est que le résultat de phpinfo () (exécuté sous httpd) a littéralement la chaîne "Hugo" en place, c'est-à-dire:
Cela m'inquiète donc quelque peu que PHP ne vérifie pas la valeur de la ou des valeurs. (Si la valeur fournie était mauvaise, je m'attendrais à ce qu'elle revienne à une valeur par défaut, par exemple)
Quelqu'un peut-il commenter cela - en particulier, comment savoir si PHP appliquera les choses (si une chaîne arbitraire peut être fournie).
(int) 'HUGO'; // => 0
. Ce qui commence à échouer sur ma machine à 2 Mo de mémoire utilisée.memory_limit 256M
.Réponses:
La chose déroutante ici est que le paramètre ressemble à un entier avec une syntaxe spéciale, mais est défini en interne comme une chaîne. La chaîne est ensuite analysée dans une variable globale distincte chaque fois que la valeur est modifiée. Fondamentalement, le résultat de l'analyse de la chaîne en un entier n'est pas enregistré dans la table des paramètres, donc lorsque vous appelez
phpinfo()
, vous voyez l'entrée d'origine, pas la valeur analysée.Vous pouvez le voir dans la source:
zend_atol
, qui gère les suffixes spéciauxLa syntaxe prise en charge est finalement définie dans
zend_atol
, qui:g
,G
,m
,M
,k
ouK
Une valeur sans chiffre au début sera analysée comme zéro. Lors de la définition de la variable globale, cela définira la limite de mémoire au minimum autorisé, en fonction de la constante
ZEND_MM_CHUNK_SIZE
.Vous pouvez voir l'effet en définissant la limite de mémoire, puis en exécutant une boucle qui alloue rapidement une grande quantité de mémoire et en voyant ce qui apparaît dans le message d'erreur. Par exemple:
la source
Tout d'abord, nous devons d'abord comprendre comment PHP.ini fonctionne en termes de workflow d'interprétation. memory_limit est des directives pour PHP.
lors de l'utilisation avec la fonction PHP, vous devez faire quelque chose comme ça
ini_set(‘memory_limit’,’256MB’)
. Ainsi, cette fonction définira temporairement votre valeur sur la variable interprète. Si vous voyez de plus près, vous pouvez obtenir les deux colonnes, l'une pour le local et l'autre pour le global. Cela montre la capacité des valeurs à l'individu respectivement.Mais, lorsque vous avez défini pour global, vous devez définir un suffixe avec K, M, G respectivement. Si nous dépassons cette valeur en utilisant apache .htaccess, cela nécessite la même chose pour le PHP fpm.
la source