web-dev-qa-db-fra.com

ini_set ("memory_limit") dans PHP 5.3.3 ne fonctionne pas du tout

Je travaillais auparavant

echo ini_get("memory_limit")."\n";
ini_set("memory_limit","256M");
echo ini_get("memory_limit")."\n";

Cela entrerait ceci:

32M
256M

sur un script php exécuté en ligne de commande. J'ai mis à jour de 5.2 à 5.3, et à partir de maintenant, cette directive ne fonctionne pas du tout: cela me donne:

32M
32M

et ensuite faire échouer mon script avec une erreur fatale ...

J'ai vérifié la documentation php, et l'ai googlé, et je n'ai trouvé nulle part que "memory_limit" soit devenu obsolète.

Quelqu'un a-t-il une solution?

43
Ant

Probablement que votre sushosin a mis à jour, ce qui a modifié la valeur par défaut de suhosin.memory_limit de 0 (ce qui ne permet aucune mise à jour de memory_limit).

Sous Debian, modifiez /etc/php5/conf.d/suhosin.ini

; suhosin.memory_limit = 0

à

suhosin.memory_limit = 2G

Ou quelle que soit la valeur avec laquelle vous êtes à l'aise. Vous pouvez trouver le changelog de Sushosin à l'adresse http://www.hardened-php.net/hphp/changelog.html , qui dit:

Modification de la manière dont la protection memory_limit est implémentée

24
Wouter van Eekelen

Si l'extension suhosin est activée, elle peut empêcher les scripts de définir une limite de mémoire supérieure à celle définie au départ ou à une limite définie.

http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit

26
Oscar M.

Voici une liste de choses à vérifier:

Suhosin est-il installé?

ini_set

  • Le format est important ini_set('memory_limit', '512'); // DIDN'T WORK ini_set('memory_limit', '512MB'); // DIDN'T WORK ini_set('memory_limit', '512M'); // OK - 512MB ini_set('memory_limit', 512000000); // OK - 512MB

Lorsqu'un entier est utilisé, la valeur est mesurée en octets. La notation abrégée, telle que décrite dans ce FAQ , peut également être utilisée.

http://php.net/manual/en/ini.core.php#ini.memory-limit

  • Est-ce que php_admin_value a été utilisé dans des fichiers .htaccess ou virtualhost?

Définit la valeur de la directive spécifiée. Cela ne peut pas être utilisé dans les fichiers .htaccess. Tout type de directive défini avec php_admin_value ne peut pas être remplacé par .htaccess ou ini_set (). Pour effacer une valeur précédemment définie, utilisez none comme valeur.

http://php.net/manual/en/configuration.changes.php

12
Carlton

Cela fonctionne pour moi, n'a rien à voir avec PHP 5.3. Comme beaucoup d'autres, il ne peut pas être annulé via ini_set() lorsque Safe_mode est activé. Vérifiez votre mise à jour php.ini _ (et mieux encore: changez la mémoire_limite ici aussi).

4
mario

Ubuntu 10.04 est fourni avec le correctif Suhosin uniquement, ce qui ne vous donne pas d’options de configuration. Mais vous pouvez installer php5-suhosin pour résoudre ceci:

apt-get update
apt-get install php5-suhosin

Maintenant, vous pouvez éditer /etc/php5/conf.d/suhosin.ini et définir:

suhosin.memory_limit = 1G

Ensuite, utiliser ini_set fonctionnera dans un script:

ini_set('memory_limit', '256M');
3
Appmerce