reported - Tamaño de memoria permitido de 33554432 bytes agotado(se intentó asignar 43148176 bytes) en PHP
php memory_limit recommended value (19)
Este mensaje de error está siendo presentado, ¿alguna sugerencia?
Tamaño de memoria permitido de 33554432 bytes agotado (se intentó asignar 43148176 bytes) en PHP
Aquí hay dos métodos simples para aumentar el límite en el alojamiento compartido:
Si tiene acceso a su archivo PHP.ini, cambie la línea en PHP.ini. Si su línea muestra 32M, intente con 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)
Si no tiene acceso a PHP.ini intente agregar esto a un archivo .htaccess:
php_value memory_limit 64M
Cambiar el servidor a PHP 7.x resolvió el problema en mi caso
Desafortunadamente, es fácil de programar en PHP de una manera que consume memoria más rápido de lo que crees. Copiar cadenas, arrays y objetos en lugar de usar referencias lo hará, aunque se supone que PHP 5 lo hará de manera más automática que en PHP 4. Pero manejar su conjunto de datos en varios pasos también es un desperdicio en comparación con procesar 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 programadores obtienen todo el conjunto de resultados en una matriz y luego lo recorren una o más veces con foreach()
. Es mucho más eficiente en memoria usar un bucle while()
para buscar y procesar una fila a la vez. Lo mismo se aplica al procesamiento de un archivo.
Escribir
ini_set(''memory_limit'', ''-1'');
en su index.php en la parte superior después de abrir la etiqueta php
Haciendo
ini_set(''memory_limit'', ''-1'');
nunca es bueno Si desea leer un archivo muy grande, se recomienda copiarlo poco a poco. Pruebe el siguiente código para las mejores prácticas.
$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;
He enfrentado el mismo problema en php7.2 con laravel 5.6. Acabo de aumentar la cantidad de variable memory_limit = 128M
en php.ini según lo memory_limit = 128M
mis aplicaciones. Puede ser 256M / 512M / 1048M ..... Ahora funciona bien.
Los usuarios de wordpress añaden línea:
@ini_set(''memory_limit'', ''-1'');
en wp-settings.php que puede encontrar en la carpeta raíz instalada de wordpress
Me doy cuenta de que muchas respuestas solo intentan aumentar la cantidad de memoria asignada a un script que tiene su lugar, pero la mayoría de las veces significa que algo es 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, estás a merced del autor a menos que te sientas ambicioso :) Los documentos de PHP incluso dicen que los problemas de memoria se deben a " guiones mal escritos "
Cabe mencionar que ini_set(''memory_limit'', ''-1'');
(sin límite) puede causar inestabilidad del servidor ya que 0 bytes free = bad things
. En su lugar, encuentre un equilibrio razonable según lo que su script intenta hacer y la cantidad de memoria disponible en una máquina.
Un mejor enfoque: si usted es el autor de la secuencia de comandos (o ambicioso), puede depurar estos problemas de memoria con xdebug . La última versión (2.6.0 - lanzada 2018-01-29) trajo un perfil de memoria que muestra qué funciones de llamadas consumen grandes cantidades de memoria. Expone problemas en el script que son difíciles de encontrar. Generalmente, 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:
- Instálelo - Disponible a través de
apt-get
yyum
etc. - Configúrelo - xdebug.ini:
xdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
- Ver los perfiles en una herramienta como QCacheGrind , KCacheGrind
No había renovado mi alojamiento y la base de datos era de solo lectura. Joomla necesitaba escribir la sesión y no podía hacerlo.
Por fin encontré la respuesta:
Simplemente agregue esta línea debajo de la línea antes de que obtenga un error en su archivo
ini_set(''memory_limit'', ''-1'');
Tomará un uso ilimitado de memoria del servidor, está funcionando bien.
Gracias por dar sugerencias amigos.
Puede aumentar la memoria permitida a la secuencia de comandos php ejecutando la siguiente línea sobre todos los códigos de la secuencia de comandos:
ini_set(''memory_limit'',''-1''); // enabled the full memory available.
Y también de asignar las variables no deseadas en el script.
Revisa esta librería php: Liberar memoria con PHP
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.
Si desea leer archivos grandes, debe leerlos poco a poco en lugar de leerlos a la vez.
Es simple: si lees un archivo grande de 1 MB a la vez, se necesitan al menos 1 MB de memoria al mismo tiempo para almacenar los datos.
Así que deberías leerlos poco a poco usando fopen
& fread
.
Si está intentando leer un archivo, 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 "), lo guardará todo en la memoria .
Como sugiere Nelson, puede trabajar para aumentar su límite máximo de memoria si realmente necesita usar tanta memoria.
Su script está usando demasiada memoria. Esto puede suceder a menudo en PHP si tiene un bucle que se ha salido de control y está creando objetos o agregando a las matrices en cada paso del bucle.
Compruebe si hay bucles infinitos.
Si ese no es el problema, intente y ayude a PHP destruyendo los objetos con los que ha terminado configurándolos en nulo. p.ej. $OldVar = null;
Verifique el código donde también ocurre el error. ¿Esperaría que esa línea esté asignando una cantidad masiva de memoria? Si no, trata de averiguar qué ha salido mal ...
También estaba teniendo el mismo problema, busqué los archivos phpinfo.ini, php.ini o .htaccess en vano. Finalmente, he visto algunos archivos php, los abrí y revisé los códigos en el interior en busca de memoria. Finalmente, esta solución fue con la que salí y funcionó para mí. Estaba usando wordpress, por lo que esta solución podría funcionar solo para el problema de límite de tamaño de memoria de wordpress. Mi solución, abra 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 la memoria en el ámbito wp_initial_constants
, o simplemente wp_initial_constants
Ctrl + F para encontrar la palabra "memoria". Allí vendrás a WP_MEMORY_LIMIT
y WP_MAX_MEMORY_LIMIT
. Simplemente aumentarlo, era de 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'');
Tuve el mismo problema que ejecutar php en la línea de comandos. Recientemente, tuve cambios en el archivo php.ini e hice un error al cambiar el php.ini
Esto es para php7.0
camino 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
).
; La cantidad máxima de memoria que una secuencia de comandos puede consumir (128 MB)
; http://php.net/memory-limit
memory_limit = 128M
Una vez que lo corregí, mi proceso comenzó a funcionar bien.
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.
ini_set(''memory_limit'', ''-1'');