Este mensaje de error se presenta, ¿alguna sugerencia?
Tamaño de memoria permitido de 33554432 bytes agotados (intentó asignar 43148176 bytes) en php
Este mensaje de error se presenta, ¿alguna sugerencia?
Tamaño de memoria permitido de 33554432 bytes agotados (intentó asignar 43148176 bytes) en php
Respuestas:
Por fin encontré la respuesta:
Solo agregue esto debajo de la línea anterior a la línea en la que obtiene un error en su archivo
ini_set('memory_limit', '-1');
Tomará un uso ilimitado de la memoria del servidor, está funcionando bien.
Gracias por dar sugerencias amigos.
UNLIMITED
.
Aquí hay dos métodos simples para aumentar el límite de alojamiento compartido:
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)
Si no tiene acceso a PHP.ini intente agregar esto a un archivo .htaccess:
php_value memory_limit 64M
Tu script está usando demasiada memoria. Esto a menudo puede suceder en PHP si tiene un bucle que se ha quedado sin control y está creando objetos o agregándolos a matrices en cada pasada del bucle.
Verifica los bucles infinitos.
Si ese no es el problema, intente ayudar a PHP destruyendo objetos con los que haya terminado configurándolos como nulos. p.ej.$OldVar = null;
Verifique también el código donde ocurre el error. ¿Esperarías que esa línea asigne una gran cantidad de memoria? Si no, intente averiguar qué salió mal ...
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;
while
ciclo:fclose($file)
Desafortunadamente, es fácil programar en PHP de una manera que consume memoria más rápido de lo que crees. Copiar cadenas, matrices y objetos en lugar de usar referencias lo hará, aunque se supone que PHP 5 lo hace de manera más automática que en PHP 4. Pero lidiar con 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 programadores obtienen todo el conjunto de resultados en una matriz y luego lo repiten una o más veces foreach()
. Es mucho más eficiente en la memoria usar un while()
bucle 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 almacenar los datos.
Entonces deberías leerlos poco a poco usando fopen
& fread
.
$fh = fopen($folder.'/'.$filename, "rb") or die(); $buffer = 1024*1024; while (!feof($fh)) { print(fread($fh, $buffer)); flush(); } fclose($fh);
Me he enfrentado al mismo problema en php7.2 con laravel 5.6. Solo aumento la cantidad de variable memory_limit = 128M
en php.ini según lo exijan mis aplicaciones. Puede ser 256M / 512M / 1048M ..... Ahora funciona bien.
También estaba teniendo el mismo problema, busqué archivos phpinfo.ini, php.ini o .htaccess en vano. Finalmente, miré algunos archivos php, los abrí y verifiqué la memoria de los códigos internos. 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 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 memoria bajo el wp_initial_constants
alcance, o simplemente presione Ctrl + F para encontrar la palabra "memoria". Allí vendrás WP_MEMORY_LIMIT
y WP_MAX_MEMORY_LIMIT
. Simplemente increméntelo, en mi caso era de 64 MB, 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');
wp-config.php
lugar, puede agregar esos límites muy fácilmente , donde no se sobrescribirán con futuras actualizaciones de WordPress. Además, algunos complementos de seguridad (como WordFence, por ejemplo) se quejarán si se cambian los archivos 'básicos' de WordPress ...
wp-config.php
y agregue las dos líneas allí (es decir, define( 'WP_MEMORY_LIMIT', '200M' );
y define( 'WP_MAX_MEMORY_LIMIT', '256M' );
. A diferencia de los archivos en el 'núcleo' WP (es decir, todo lo que está debajo wp-includes
), que se sobrescribirá con las actualizaciones de WP, wp-config.php
no lo hará, está allí exactamente para ¡El propósito exacto de anular las constantes de WP!
-1
está bien para procesos de ejecución corta. Por ejemplo, un contenedor de creador de php que se utiliza para ejecutar pruebas unitarias o instalaciones de compositor / etc. Simplemente no ejecute su sitio de producción con el conjunto así.
Puede aumentar la memoria permitida para el script php ejecutando la siguiente línea sobre todos los códigos en el script:
ini_set('memory_limit','-1'); // enabled the full memory available.
Y también desasignar las variables no deseadas en el script.
Revisa esta biblioteca php: Liberando memoria con PHP
Noto que muchas respuestas solo intentan aumentar la cantidad de memoria dada 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 de volumen o tamaño imprevisto. Obviamente, si no eres el autor de un script, 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 " scripts mal escritos "
Cabe mencionar que ini_set('memory_limit', '-1');
(sin límite) puede causar inestabilidad del servidor como 0 bytes free = bad things
. En cambio, encuentre un equilibrio razonable entre lo que su script está tratando de hacer y la cantidad de memoria disponible en una máquina.
Un mejor enfoque: si usted es el autor del script (o ambicioso), puede depurar tales problemas de memoria con xdebug . La última versión (2.6.0 - lanzada el 29-01-2018) recuperó el perfil de memoria que muestra qué llamadas a funciones consumen grandes cantidades de memoria. Expone problemas en el script que de otro modo serían 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:
apt-get
y yum
etc.xdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
Si está intentando 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 ") lo va a 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.
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.
Si está utilizando un alojamiento compartido, no podrá imponer el incremento en el límite de tamaño de php.
Simplemente vaya a su cpanel y actualice su versión de php a 7.1 y superior, entonces estará listo.
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
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 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
).
; Cantidad máxima de memoria que un script puede consumir (128 MB)
; http://php.net/memory-limit
memory_limit = 128M
Una vez que lo corregí, mi proceso comenzó a funcionar bien.
Ejecute este comando en su directorio raíz de Magento php -d memory_limit=4G bin/magento
si está usando laravel, use estas formas
public function getClientsListApi(Request $request){
print_r($request->all()); //for all request
print_r($request->name); //for all name
}
en vez de
public function getClientsListApi(Request $request){
print_r($request); // it show error as above mention
}