Ce message d'erreur est présenté, des suggestions?
La taille de mémoire autorisée de 33554432 octets est épuisée (a tenté d'allouer 43148176 octets) en php
Ce message d'erreur est présenté, des suggestions?
La taille de mémoire autorisée de 33554432 octets est épuisée (a tenté d'allouer 43148176 octets) en php
Réponses:
J'ai enfin trouvé la réponse:
Ajoutez simplement cette ligne ci-dessous à la ligne avant que vous n'obteniez une erreur dans votre fichier
ini_set('memory_limit', '-1');
Il faudra une utilisation illimitée de la mémoire du serveur, cela fonctionne bien.
Merci d'avoir donné des suggestions d'amis.
UNLIMITED
.
Voici deux méthodes simples pour augmenter la limite d'hébergement mutualisé:
Si vous avez accès à votre fichier PHP.ini, changez la ligne dans PHP.ini Si votre ligne affiche 32M, essayez 64M:
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
Si vous n'avez pas accès à PHP.ini, essayez de l'ajouter à un fichier .htaccess:
php_value memory_limit 64M
Votre script utilise trop de mémoire. Cela peut souvent se produire en PHP si vous avez une boucle qui est hors de contrôle et que vous créez des objets ou 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 sur null. par exemple.$OldVar = null;
Vérifiez également le code dans lequel l'erreur se produit. Vous attendriez-vous à ce que cette ligne alloue une énorme quantité de mémoire? Sinon, essayez de comprendre ce qui ne va pas ...
Faire :
ini_set('memory_limit', '-1');
n'est jamais bon. Si vous souhaitez lire un fichier très volumineux, il est recommandé de le copier petit à petit. Essayez le code suivant pour les meilleures pratiques.
$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;
while
boucle:fclose($file)
Il est malheureusement facile de programmer en PHP d'une manière qui consomme de la mémoire plus rapidement que vous ne le pensez. 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 plus automatiquement qu'en PHP 4. Mais traiter l'ensemble de vos données en plusieurs étapes est également un gaspillage par rapport au traitement de la plus petite unité logique. à la fois. L'exemple classique fonctionne avec des ensembles de résultats volumineux à partir d'une base de données: la plupart des programmeurs récupèrent l'intégralité de l'ensemble de résultats dans un tableau, puis le bouclent une ou plusieurs fois avec foreach()
. Il est beaucoup plus efficace en mémoire d'utiliser une while()
boucle pour extraire et traiter une ligne à la fois. La même chose s'applique au traitement d'un fichier.
Si vous souhaitez lire des fichiers volumineux, vous devez les lire petit à petit au lieu de les lire immédiatement.
C'est un calcul simple: si vous lisez un gros fichier de 1 Mo à la fois, au moins 1 Mo de mémoire est nécessaire en même temps pour contenir les données.
Vous devez donc les lire petit à petit en utilisant fopen
& fread
.
$fh = fopen($folder.'/'.$filename, "rb") or die(); $buffer = 1024*1024; while (!feof($fh)) { print(fread($fh, $buffer)); flush(); } fclose($fh);
J'ai rencontré le même problème dans php7.2 avec laravel 5.6. J'augmente simplement la quantité de variable memory_limit = 128M
dans php.ini à la demande de mes applications. Il pourrait être 256M / 512M / 1048M ..... Maintenant, cela fonctionne bien.
J'avais aussi le même problème, j'ai cherché des fichiers phpinfo.ini, php.ini ou .htaccess en vain. Enfin, j'ai regardé certains fichiers php, les ai ouverts et vérifié les codes à l'intérieur pour la mémoire. Enfin, cette solution a été ce que je suis sorti et cela a fonctionné pour moi. J'utilisais wordpress, donc cette solution pourrait ne fonctionner que pour un problème de limite de taille de mémoire wordpress. Ma solution, ouvrez le fichier default-constants.php dans le dossier / public_html / wp-includes . Ouvrez ce fichier avec l'éditeur de code et recherchez les paramètres de mémoire sous la wp_initial_constants
portée, ou tout simplement Ctrl + F pour trouver le mot "mémoire". Là, vous viendrez WP_MEMORY_LIMIT
et WP_MAX_MEMORY_LIMIT
. Il suffit de l'augmenter, 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, veuillez ne pas faire le code suivant, car c'est une mauvaise pratique:
ini_set('memory_limit', '-1');
wp-config.php
place, où elles ne seront pas écrasées par les futures mises à jour de WordPress. De plus, quelques plugins de sécurité (tels que WordFence, par exemple) se plaindront si les fichiers WordPress `` principaux '' sont modifiés ...
wp-config.php
et d'ajouter les deux lignes là-bas (c'est-à-dire define( 'WP_MEMORY_LIMIT', '200M' );
et define( 'WP_MAX_MEMORY_LIMIT', '256M' );
. Contrairement aux fichiers sur le WP «de base» (à savoir, tout ce qui se trouve sous wp-includes
), qui seront écrasés par les mises à niveau de WP, wp-config.php
ne le seront pas - il est là exactement pour le but exact de remplacer les constantes WP!
-1
convient parfaitement aux processus à court terme. Par exemple, un conteneur de constructeur php utilisé pour exécuter des tests unitaires ou des installations de composeur / etc. Ne faites pas fonctionner votre site de production avec ce jeu comme ça.
Vous pouvez augmenter la mémoire autorisée pour le 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 également allouer les variables indésirables dans le script.
Vérifiez cette bibliothèque php: Libérer de la mémoire avec PHP
Je remarque que de nombreuses réponses essaient simplement d'augmenter la quantité de mémoire accordé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 documents PHP disent même que les problèmes de mémoire sont dus à des " scripts mal écrits "
Il convient de mentionner que ini_set('memory_limit', '-1');
(pas de limite) peut provoquer une instabilité du serveur comme 0 bytes free = bad things
. Au lieu de cela, trouvez un équilibre raisonnable par ce que votre script essaie 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 - publiée le 2018-01-29) a ramené le profilage de la mémoire qui vous montre quels appels de fonction consomment de grandes quantités de mémoire. Il expose des problèmes dans le script qui sont autrement difficiles à trouver. Habituellement, les inefficacités sont dans une boucle qui n'attend pas le volume qu'il reçoit, mais chaque cas sera laissé au lecteur comme un exercice :)
La documentation de xdebug est utile, mais elle se résume à 3 étapes:
apt-get
et yum
etcxdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
Si vous essayez de lire un fichier, cela prendra de la mémoire en PHP. Par exemple, si vous essayez d'ouvrir et de lire un fichier MP3 (comme, par exemple, $ data = file (" http://mydomain.com/path/sample.mp3 "), il va tout mettre en mémoire .
Comme le suggère Nelson, vous pouvez travailler pour augmenter votre limite de mémoire maximale si vous avez réellement besoin d'utiliser autant de mémoire.
Nous avons eu une situation similaire et nous avons essayé donné en haut des réponses ini_set ('memory_limit', '-1'); et tout fonctionnait bien, les fichiers d'images compressées supérieurs à 1 Mo en Ko.
Si vous utilisez un hébergement partagé, vous ne pourrez pas appliquer l'incrément dans la limite de taille php.
Accédez simplement à votre cpanel et mettez à niveau votre version php vers 7.1 et au-dessus, alors vous êtes prêt à partir.
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é de wordpress
J'ai eu le même problème que l'exécution de php en ligne de commande. Récemment, j'ai changé le fichier php.ini et j'ai fait une erreur en changeant le php.ini
C'est pour php7.0
chemin vers php.ini où j'ai fait une erreur:
/etc/php/7.0/cli/php.ini
J'avais défini 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 consommer (128 Mo)
; http://php.net/memory-limit
memory_limit = 128M
Une fois que je l'ai corrigé, mon processus a commencé à bien fonctionner.
Exécutez cette commande dans votre répertoire racine Magento php -d memory_limit=4G bin/magento
si vous utilisez laravel, utilisez ces méthodes
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
}