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.
La configuration de PHP peut être définie à plusieurs endroits:
php.ini
(généralement dans/etc quelque part)php_value
)php.ini
Différent (utilisez la commande php -i | grep memory_limit
Pour vérifier la conf CLI)php_value
)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.
ini_set('memory_limit', '128M');
ou
php.ini => memory_limit = 128M
ou
php_value memory_limit 128M
J'ai eu le même problème. J'ai trouvé la réponse:
ini_set('memory_limit', '-1');
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');
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
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
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
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
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.