Tamaño de memoria permitida de 33554432 bytes agotado (intentado asignar 43148176 bytes) en php

Este mensaje de error se presenta, ¿alguna sugerencia?

Tamaño de memoria permitida de 33554432 bytes agotado (intentado asignar 43148176 bytes) en php

Por fin encontré la respuesta:

Simplemente agregue esta línea debajo de la línea donde obtiene el error en su archivo

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

Tomará un uso de memoria ilimitado del servidor, está funcionando bien.

Gracias por dar sugerencias amigos.

Aquí hay dos métodos simples para boost el límite en el alojamiento compartido:

  1. Si tiene acceso a su archivo PHP.ini, cambie la línea en PHP.ini Si su línea muestra 32M intente 64M: memory_limit = 64M ; Maximum amount of memory a script may consume (64MB) memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)

  2. Si no tiene acceso a PHP.ini intente agregar esto a un archivo .htaccess: php_value memory_limit 64M

Tu script usa demasiada memoria. Esto a menudo puede ocurrir en PHP si tiene un bucle que se ha quedado sin control y está creando objetos o agregando matrices en cada pasada del ciclo.

Compruebe si hay bucles infinitos.

Si ese no es el problema, intente ayudar a PHP destruyendo los objetos con los que finalizó configurándolos como nulos. p.ej. $OldVar = null;

Verifique también el código donde realmente ocurre el error. ¿Esperarías que esa línea asignara una gran cantidad de memoria? Si no, intente averiguar qué salió mal …

Hacer:

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

nunca es bueno Si desea leer un archivo muy grande, es una buena práctica copiarlo poco a poco. Pruebe el siguiente código para la mejor práctica.

 $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; 

Desafortunadamente es fácil de progtwigr en PHP de una manera que consume memoria más rápido de lo que crees. Copiar cadenas, matrices y objetos en lugar de utilizar referencias lo hará, aunque se supone que PHP 5 lo haga de forma más automática que en PHP 4. Pero ocuparse de su conjunto de datos en varios pasos también es un desperdicio en comparación con el procesamiento de la unidad lógica más pequeña a la vez El ejemplo clásico es trabajar con grandes conjuntos de resultados de una base de datos: la mayoría de los progtwigdores obtienen todo el conjunto de resultados en una matriz y luego lo repiten una o más veces con foreach() . Es mucho más eficiente con la memoria utilizar un ciclo while() para buscar y procesar una fila a la vez. Lo mismo se aplica al procesamiento de un archivo.

Si desea leer archivos grandes, debe leerlos poco a poco en lugar de leerlos de una vez.
Es matemática simple: si lee un archivo grande de 1 MB a la vez, se necesita al menos 1 MB de memoria al mismo tiempo para guardar los datos.

Entonces debería leerlos poco a poco usando fopen & fread .

Puede boost la memoria permitida al script php ejecutando la siguiente línea encima de todos los códigos en el script:

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

Y también de asignar las variables no deseadas en el script.

Compruebe esta biblioteca php: liberar memoria con PHP

También estaba teniendo el mismo problema, busqué los archivos phpinfo.ini, php.ini o .htaccess en vano. Finalmente, miré algunos archivos php, los abrí y verifiqué los códigos internos para la memoria. Finalmente, esta solución fue con lo que salí y funcionó para mí. Estaba usando WordPress, por lo que esta solución solo podría funcionar para el problema del límite de tamaño de la memoria wordpress. Mi solución, abrir el archivo default-constants.php en la carpeta / public_html / wp-includes . Abra ese archivo con el editor de código, y busque la configuración de memoria en wp_initial_constants scope, o simplemente wp_initial_constants Ctrl + F it para buscar la palabra “memory”. Allí vendrá WP_MEMORY_LIMIT y WP_MAX_MEMORY_LIMIT . Solo increméntelo, fueron 64 MB en mi caso, lo aumenté a 128 MB y luego a 200 MB.

 // 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' ); } } 

Por cierto, no hagas el siguiente código, porque es una mala práctica:

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

Tuvimos una situación similar y probamos en la parte superior de las respuestas ini_set (‘memory_limit’, ‘-1’); y todo funcionó bien, archivos de imágenes comprimidas de más de 1 MB a KB.

los usuarios de wordpress agregan línea:

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

en wp-settings.php que puedes encontrar en la carpeta raíz instalada de wordpress

Si intenta leer un archivo, eso ocupará memoria en PHP. Por ejemplo, si está intentando abrir y leer un archivo MP3 (como, por ejemplo, $ data = file (” http://mydomain.com/path/sample.mp3 “), va a guardarlo todo en la memoria .

Como sugiere Nelson, puede trabajar para boost su límite máximo de memoria si realmente necesita usar esta cantidad de memoria.

Escribir

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

en su index.php en la parte superior después de la apertura de la etiqueta php

No había renovado mi hosting y la base de datos era de solo lectura. Joomla necesitaba escribir la sesión y no pudo hacerlo.

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

Tuve el mismo problema que ejecutar php en línea de comandos. Recientemente, tuve cambios en el archivo php.ini y cometí un error al cambiar el php.ini

Esto es para php7.0

ruta a php.ini donde cometí un error: /etc/php/7.0/cli/php.ini

Había establecido memory_limit = 256 (lo que significa 256 bytes )
en lugar de memory_limit = 256M (lo que significa 256 Mega bytes memory_limit = 256M ).

; Cantidad máxima de memoria que puede consumir un script (128 MB)
; http://php.net/memory-limit
memory_limit = 128M

Una vez que lo corrigí, mi proceso comenzó a funcionar bien.

Recibí el mismo mensaje de error después de cambiar a un nuevo tema en WordPress. PHP estaba ejecutando la versión 5.3, así que cambié a 7.2. Eso solucionó el problema.

Observo muchas respuestas, solo trato de boost la cantidad de memoria asignada a un script que tiene su lugar, pero la mayoría de las veces significa que algo está siendo demasiado liberal con la memoria debido a una cantidad imprevista de volumen o tamaño. Obviamente, si no eres el autor de un guión, estarás a merced del autor a menos que te sientas ambicioso 🙂 Los documentos PHP incluso dicen que los problemas de memoria se deben a ” guiones mal escritos ”

Se debe mencionar que ini_set('memory_limit', '-1'); (sin límite) puede causar inestabilidad del servidor como 0 bytes free = bad things . En su lugar, encuentre un equilibrio razonable según lo que su secuencia de comandos intenta hacer y la cantidad de memoria disponible en una máquina.

Un mejor enfoque: si usted es el autor del guión (o ambicioso) puede depurar tales problemas de memoria con xdebug . La última versión (2.6.0 – lanzada 2018-01-29) trajo perfiles de memoria que le muestra qué funciones consumen grandes cantidades de memoria. Expone problemas en el script que de otro modo son difíciles de encontrar. Por lo general, las ineficiencias están en un bucle que no espera el volumen que está recibiendo, pero cada caso se dejará como un ejercicio para el lector 🙂

La documentación de xdebug es útil, pero se reduce a 3 pasos:

  1. Instalarlo – Disponible a través de apt-get y yum etc.
  2. Configúrelo – xdebug.ini: xdebug.profiler_enable = 1 , xdebug.profiler_output_dir = /where/ever/
  3. Ver los perfiles en una herramienta como QCacheGrind , KCacheGrind