web-dev-qa-db-fra.com

Taille de mémoire autorisée de 33554432 octets épuisés (tenté d'allouer 43148176 octets) en php

Ce message d'erreur est présenté, des suggestions?

Taille de mémoire autorisée de 33554432 octets épuisés (tenté d'allouer 43148176 octets) en php

267
panidarapu

Enfin, j'ai trouvé la réponse:

Il suffit d’ajouter la ligne ci-dessous à la ligne qui précède une erreur dans votre fichier.

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

Cela prendra une utilisation illimitée de la mémoire du serveur, cela fonctionne bien.

Merci de donner des suggestions à des amis.

300
panidarapu

Voici deux méthodes simples pour augmenter la limite d'hébergement mutualisé:

  1. Si vous avez accès à votre fichier PHP.ini, changez la ligne dans PHP.ini Si votre ligne indique 32M, essayez 64M: memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)

  2. Si vous n'avez pas accès à PHP.ini, essayez de l'ajouter à un fichier .htaccess: php_value memory_limit 64M

56
Haider Abbas

Votre script utilise trop de mémoire. Cela peut souvent arriver dans PHP si vous avez une boucle épuisée et que vous créez des objets ou que vous ajoutez des tableaux à chaque passage de la boucle.

Vérifiez les boucles infinies.

Si ce n'est pas le problème, essayez d'aider PHP en détruisant les objets avec lesquels vous avez terminé en les définissant comme nuls. par exemple. $OldVar = null;

Vérifiez le code où l'erreur se produit réellement. Vous attendriez-vous à ce que cette ligne alloue une quantité énorme de mémoire? Sinon, essayez de comprendre ce qui a mal tourné ...

42
Rik Heywood

Faire :

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

n'est jamais bon. Si vous souhaitez lire un très gros fichier, il est recommandé de le copier au fur et à mesure. Essayez le code suivant pour une meilleure pratique.

$path = 'path_to_file_.txt';

$file = fopen($path, 'r');
$len = 1024; // 1MB is reasonable for me. You can choose anything though, but do not make it too big
$output = fread( $file, $len );

while (!feof($file)) {
    $output .= fread( $file, $len );
}

fclose($file);

echo 'Output is: ' . $output;
35
assetCorp

Il est malheureusement facile de programmer en PHP de manière à utiliser la mémoire plus rapidement que vous ne le pensiez. Copier des chaînes, des tableaux et des objets au lieu d'utiliser des références le fera, bien que PHP 5 soit censé le faire de manière plus automatique que dans PHP 4. Mais le traitement complet de vos données plusieurs étapes représentent également un gaspillage par rapport au traitement de la plus petite unité logique à la fois. L'exemple classique consiste à travailler avec des ensembles de résultats volumineux à partir d'une base de données: la plupart des programmeurs extraient l'ensemble de résultats dans un tableau, puis le parcourent une ou plusieurs fois avec foreach(). L'utilisation d'une boucle while() pour récupérer et traiter une ligne à la fois est bien plus efficace en termes de mémoire. La même chose s'applique au traitement d'un fichier.

17
staticsan

Si vous souhaitez lire des fichiers volumineux, vous devez les lire au fur et à mesure, au lieu de les lire en une fois.
C’est un calcul simple: si vous lisez un fichier volumineux de 1 Mo à la fois, il faut au moins 1 Mo de mémoire en même temps pour conserver les données.

Vous devriez donc les lire au fur et à mesure en utilisant fopen & fread.

13
Gumbo

J'ai rencontré le même problème dans php7.2 avec laravel 5.6. Je viens d'augmenter la quantité de variable memory_limit = 128M dans php.ini à la demande de mes applications. Ce pourrait être 256M/512M/1048M ..... Maintenant, cela fonctionne très bien.

7
Ziaur Rahman

J'avais aussi le même problème, j'ai cherché les fichiers phpinfo.ini, php.ini ou .htaccess sans succès. Enfin, j'ai consulté des fichiers php, je les ai ouverts et j'ai vérifié la mémoire dans les codes. Finalement, cette solution a été ce que je propose et elle a fonctionné pour moi. J'utilisais wordpress. Cette solution pourrait donc ne fonctionner que pour le problème de limitation de la taille de la mémoire wordpress. Ma solution, ouvrez le fichier default-constants.php du dossier / public_html/wp-includes. Ouvrez ce fichier avec l'éditeur de code et recherchez les paramètres de mémoire sous wp_initial_constants scope, ou utilisez simplement Ctrl + F pour rechercher le mot "mémoire". Vous y arriverez WP_MEMORY_LIMIT et WP_MAX_MEMORY_LIMIT. Augmentez-le, il était de 64 Mo dans mon cas, je l’ai augmenté à 128 Mo, puis à 200 Mo.

// Define memory limits.
if ( ! defined( 'WP_MEMORY_LIMIT' ) ) {
    if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
        define( 'WP_MEMORY_LIMIT', $current_limit );
    } elseif ( is_multisite() ) {
        define( 'WP_MEMORY_LIMIT', '200M' );
    } else {
        define( 'WP_MEMORY_LIMIT', '128M' );
    }
}

if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
    if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
        define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
    } elseif ( -1 === $current_limit_int || $current_limit_int > 268435456 /* = 256M */ ) {
        define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
    } else {
        define( 'WP_MAX_MEMORY_LIMIT', '256M' );
    }
}

Btw, s'il vous plaît ne faites pas le code suivant, car c'est une mauvaise pratique:

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

Vous pouvez augmenter la mémoire autorisée au script php en exécutant la ligne suivante au-dessus de tous les codes du script:

ini_set('memory_limit','-1'); // enabled the full memory available.

Et aussi, désallouez les variables indésirables dans le script.

Vérifiez cette bibliothèque php: Libérer de la mémoire avec PHP

5
Sanjay Kumar N S

Si vous essayez de lire un fichier, cela utilisera de la mémoire en PHP. Par exemple, si vous essayez d'ouvrir et de lire un fichier MP3 (par exemple, $ data = fichier (" http://mydomain.com/path/sample.mp "), il s'agit de va tirer tout dans la mémoire.

Comme le suggère Nelson, vous pouvez travailler pour augmenter votre limite de mémoire maximum si vous devez réellement utiliser autant de mémoire.

2
Beau Simensen

Nous avons eu une situation similaire et nous avons essayé en haut des réponses ini_set ('memory_limit', '-1'); et tout a bien fonctionné, les images compressées de plus de 1 Mo à Ko.

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

Je remarque que de nombreuses réponses tentent simplement d'augmenter la quantité de mémoire donnée à un script qui a sa place, mais le plus souvent, cela signifie que quelque chose est trop libéral avec la mémoire en raison d'une quantité imprévue de volume ou de taille. Évidemment, si vous n'êtes pas l'auteur d'un script, vous êtes à la merci de l'auteur sauf si vous vous sentez ambitieux :) Les docs PHP disent même que les problèmes de mémoire sont dus à " scripts mal écrits "

Il convient de mentionner que ini_set('memory_limit', '-1'); (aucune limite) peut provoquer une instabilité du serveur sous la forme 0 bytes free = bad things. Au lieu de cela, trouvez un équilibre raisonnable entre ce que votre script tente de faire et la quantité de mémoire disponible sur une machine.

Une meilleure approche: Si vous êtes l'auteur du script (ou ambitieux), vous pouvez déboguer de tels problèmes de mémoire avec xdebug . La dernière version (2.6.0 à 2018-01-29) a rétabli le profilage de la mémoire qui indique quels appels de fonction utilisent une grande quantité de mémoire. Cela expose des problèmes difficiles à trouver dans le script. Habituellement, les inefficacités sont dans une boucle qui ne s’attend pas au volume qu’elle reçoit, mais chaque cas sera considéré comme un exercice pour le lecteur :)

La documentation xdebug est utile, mais se résume en 3 étapes:

  1. Install It - Disponible via apt-get et yum etc
  2. Configurez-le - xdebug.ini: xdebug.profiler_enable = 1, xdebug.profiler_output_dir = /where/ever/
  3. Afficher les profils dans un outil tel que QCacheGrind , KCacheGrind
2
SeanDowney

Je recevais le même message d'erreur après avoir basculé vers un nouveau thème dans Wordpress. PHP fonctionnait sous la version 5.3, je suis donc passé à la version 7.2. Cela a résolu le problème.

1
DavGarcia

J'ai eu le même problème qui exécute php en ligne de commande. Récemment, j'ai eu des changements dans le fichier php.ini et une erreur en changeant le php.ini

C'est pour php7.0

chemin d'accès à php.ini où j'ai commis une erreur: /etc/php/7.0/cli/php.ini

J'avais mis memory_limit = 256 (ce qui signifie 256 bytes)
au lieu de memory_limit = 256M (ce qui signifie 256 Mega bytes).

; Quantité maximale de mémoire qu'un script peut utiliser (128 Mo)
; http://php.net/memory-limit
memory_limit = 128M

Une fois corrigé, mon processus a bien commencé.

0
theBuzzyCoder

Basculer le serveur sur php 7.x a résolu le problème dans mon cas

0
Tech Nomad

Si vous utilisez un hébergement partagé, vous ne pourrez pas appliquer l'incrément dans la limite de taille php.

Il suffit d'aller sur votre cpanel et de mettre à jour votre version de php vers la version 7.1 et plus, vous êtes prêt à partir.

0
successtar

Exécutez cette commande dans votre répertoire racine Magento php -d memory_limit=4G bin/magento

0
Mohammed Muzammil

les utilisateurs de wordpress ajoutent une ligne:

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

dans wp-settings.php que vous pouvez trouver dans le dossier racine installé wordpress

0
Praveesh P

Écrire

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

dans votre index.php en haut après l'ouverture du tag php

0
Prafull

si vous utilisez laravel, utilisez cette méthode

public function getClientsListApi(Request $request){ print_r($request->all()); //for all request print_r($request->name); //for all name }

au lieu de

public function getClientsListApi(Request $request){ print_r($request); // it show error as above mention }

0
Ajay

Je n'avais pas renouvelé mon hébergement et la base de données était en lecture seule. Joomla avait besoin d'écrire la session et ne pouvait pas le faire.

0
Alberto M