web-dev-qa-db-fra.com

Taille de mémoire autorisée de X octets épuisée

Erreur fatale: taille de mémoire autorisée de 67108864 octets épuisée (tentative d'allocation de 13965430 octets)

PHPInfo montre que j'ai une limite de mémoire de 128 Mo, donc je ne comprends pas pourquoi l'erreur dit que je n'ai que 64 Mo. Est-il possible que phpinfo ne signale pas correctement? Ou pour PHP pour utiliser deux php.inis distincts?

L'erreur était causée par un appel ini_set dans l'un des fichiers php principaux qu'un collègue a ajouté à mon insu.

39
Nathan

La configuration de PHP peut être définie à plusieurs endroits:

  1. système maître php.ini (généralement dans/etc quelque part)
  2. quelque part dans la configuration d'Apache (httpd.conf ou un fichier .conf par site, via php_value)
  3. CLI & CGI peuvent avoir un php.ini Différent (utilisez la commande php -i | grep memory_limit Pour vérifier la conf CLI)
  4. fichiers locaux .htaccess (également php_value)
  5. dans le script (via ini_set())

Dans la sortie de PHPinfo, la valeur "Master" est la valeur par défaut compilée, et la valeur "Local" est ce qui est réellement en vigueur. Il peut être soit inchangé par rapport à la valeur par défaut, soit remplacé dans l'un des emplacements ci-dessus.

Notez également que PHP a généralement des fichiers .ini différents pour les opérations en ligne de commande et sur serveur Web. La vérification de phpinfo() à partir de la ligne de commande rapportera des valeurs différentes de celles que vous auriez exécutez-le dans un script Web.

36
Marc B
ini_set('memory_limit', '128M'); 

ou

php.ini  =>  memory_limit = 128M

ou

php_value memory_limit 128M
23
şarkı dinle

J'ai eu le même problème. J'ai trouvé la réponse:

ini_set('memory_limit', '-1');

Remarque: il faudra une utilisation illimitée de la mémoire du serveur.

pdate: Utilisez-le avec précaution car cela pourrait ralentir votre système si le script PHP commence à utiliser une quantité excessive de mémoire, ce qui entraîne une grande utilisation de l'espace de swap. Vous pouvez utilisez-le si vous savez que le programme ne prendra pas beaucoup de mémoire et que vous ne savez pas combien de temps pour le définir. Mais vous finirez par trouver la quantité de mémoire dont vous avez besoin pour ce programme.

Vous devez toujours limiter la mémoire en tant que valeur, comme indiqué par @şarkı dinle.

ini_set('memory_limit', '512M');

Donner de la mémoire illimitée est une mauvaise pratique, nous devrions plutôt donner une limite maximale que nous pouvons supporter, puis optimiser notre code ou ajouter des RAM.

15
Somnath Muluk

La mémoire doit être configurée à plusieurs endroits.
Ensemble memory_limit à 512M:

Sudo vi /etc/php5/cgi/php.ini
Sudo vi /etc/php5/cli/php.ini
Sudo vi /etc/php5/Apache2/php.ini Or /etc/php5/fpm/php.ini

Redémarrez le service:

Sudo service service php5-fpm restart
Sudo service service nginx restart

ou

Sudo service Apache2 restart

Enfin, il devrait résoudre le problème du memory_limit

5
oussaka

Si vous êtes sûr d'avoir redémarré Apache après avoir configuré php.ini, alors vous cherchez peut-être le mauvais fichier php.ini

3
bcosca
1 check current limit:
(in my os)php -i | grep limit  => memory_limit => 256M => 256M

2  locate php.ini 
php --ini =>   
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/curl.ini 
...

3 change memory_limit in php.ini
vi /etc/php.ini
memory_limit = 512M

4 restart nginx and (php-fpm if being used)
service php-fpm restart
service nginx restart
2
terwxqian

Si, en augmentant la limite de mémoire, vous vous êtes débarrassé de l'erreur et que votre code fonctionne maintenant, vous devrez prendre des mesures pour réduire cette utilisation de la mémoire. Voici quelques mesures que vous pourriez prendre pour la diminuer:

Si vous lisez des fichiers, lisez-les ligne par ligne au lieu de lire le fichier complet en mémoire. Regardez les fgets et SplFileObject :: fgets. Mettre à niveau vers une nouvelle version de PHP si vous utilisez PHP 5.3. PHP 5.4 et 5.5 utilisent beaucoup moins de mémoire) .

Évitez de charger de grands ensembles de données dans un tableau. Au lieu de cela, optez pour le traitement de sous-ensembles plus petits du plus grand ensemble de données et, si nécessaire, conservez vos données dans une base de données pour soulager l'utilisation de la mémoire.

Essayez la dernière version ou la version mineure d'une bibliothèque tierce (1.9.3 par rapport à votre 1.8.2, par exemple) et utilisez celle qui est la plus stable. Parfois, les nouvelles versions des bibliothèques sont écrites plus efficacement.

Si vous avez une extension PHP PHP peu commune ou instable, essayez de la mettre à jour. Il peut y avoir une fuite de mémoire.

Si vous avez affaire à des fichiers volumineux et que vous ne pouvez tout simplement pas les lire ligne par ligne, essayez de diviser le fichier en de nombreux fichiers plus petits et traitez-les individuellement. Désactivez les extensions PHP dont vous n'avez pas besoin.

Dans la zone à problème, les variables non définies qui contiennent de grandes quantités de données et ne sont pas requises plus tard dans le code.

DE: https://www.airpair.com/php/fatal-error-allowed-memory-size

1
user3806549

Ce problème est arrivé car la limite définie de php.ini a été dépassée, mais il y a beaucoup de solution pour cela, mais la plus simple consiste à trouver le dossier de vos serveurs locaux et à trouver le dossier php et dans ce dossier le fichier php.ini qui a toutes les déclarations de ces configurations de type. Il vous suffit d'en trouver un et de modifier cette valeur. Mais dans cette situation, vous avez un gros problème une fois que vous modifiez votre fichier localhost, mais qu'en est-il du serveur lorsque vous souhaitez mettre votre site sur le serveur, cela produit à nouveau le même problème et vous suivez à nouveau la même chose pour le serveur. Mais vous connaissez également le fichier .htaccess, c'est l'un des meilleurs et unique endroit pour faire beaucoup de choses sans changer les fichiers de base. Comme vous modifiez le routage www, supprimez .php ou d'autres extensions de l'URL ou ajoutez-en un. De la même manière que vous définissez également les valeurs par défaut de php.ini ici comme ceci - Vous devez d'abord ouvrir le fichier .htaccess à partir de votre répertoire racine ou si vous ne disposez pas de ce fichier, créez-en un dans le répertoire racine de votre site et collez-le code dessus -

php_value upload_max_filesize 1000M
php_value post_max_size 99500M
php_value memory_limit 500M
php_value max_execution_time 300

après les changements si vous voulez vérifier les changements il suffit d'exécuter le code php

<?php phpinfo(); ?> 

il vous montrera tous les détails des cofigrations php. Vous retrouvez donc vos modifications.

Remarque: pour définir un nombre illimité, ajoutez simplement -1 comme php_value memory_limit -1 Ce n'est pas bon et la plupart du temps, ralentissez votre serveur. Mais si vous aimez être moins limité, cette option vous convient également. Si, après l'actualisation, les modifications de votre page ne se reflètent pas, vous devez redémarrer votre serveur local une fois pour les modifications.

Bonne chance. J'espère que cela vous aidera. Pour télécharger le fichier .htaccess, cliquez ici.

0
Chaudhary Sushil