try tried fatal exhausted error catch bytes allowed allocate php memory memory-management out-of-memory memory-limit

tried - php try catch allowed memory size



Tamaño de memoria permitido de X bytes agotado (7)

Error fatal: el tamaño de memoria permitido de 67108864 bytes se agotó (intentó asignar 13965430 bytes)

PHPInfo muestra que tengo un memory_limit de 128M, por lo que estoy confundido sobre por qué el error dice que solo tengo 64M. ¿Es posible que phpinfo se reporte incorrectamente? ¿O para PHP usar dos php.inis separados?

El error fue causado por una llamada a ini_set en uno de los archivos php principales que un compañero de trabajo mío agregó sin mi conocimiento.


La configuración de PHP se puede establecer en varios lugares:

  1. sistema maestro php.ini (generalmente en / etc en algún lugar)
  2. en algún lugar de la configuración de Apache (httpd.conf o un archivo .conf por sitio, a través de php_value )
  3. CLI y CGI pueden tener un php.ini diferente (use el comando php -i | grep memory_limit para verificar el conf del CLI)
  4. archivos locales .htaccess (también php_value )
  5. in-script (a través de ini_set() )

En la salida de PHPinfo, el valor "Maestro" es el valor predeterminado compilado, y el valor "Local" es lo que realmente está en efecto. Puede ser sin cambios desde el valor predeterminado o anulado en cualquiera de las ubicaciones anteriores.

También tenga en cuenta que PHP generalmente tiene diferentes archivos .ini para la operación basada en línea de comandos y servidor web. La comprobación de phpinfo() desde la línea de comandos informará valores diferentes que si lo hubiera ejecutado en un script basado en web.


La memoria debe configurarse en varios lugares.
Establezca memory_limit a 512M:

sudo vi /etc/php5/cgi/php.ini sudo vi /etc/php5/cli/php.ini sudo vi /etc/php5/apache2/php.ini Or /etc/php5/fpm/php.ini

Reiniciar servicio:

sudo service service php5-fpm restart sudo service service nginx restart

o

sudo service apache2 restart

Finalmente debería resolver el problema del memory_limit


Si al aumentar el límite de memoria se ha librado del error y su código ahora funciona, tendrá que tomar medidas para disminuir el uso de memoria. Aquí hay algunas cosas que podría hacer para disminuirlo:

Si está leyendo archivos, léalos línea por línea en lugar de leer en el archivo completo en la memoria. Mira fgets y SplFileObject :: fgets. Actualice a una nueva versión de PHP si está utilizando PHP 5.3. PHP 5.4 y 5.5 usan mucha menos memoria.

Evite cargar grandes conjuntos de datos en una matriz. En su lugar, proceda con el procesamiento de subconjuntos más pequeños del conjunto de datos más grande y, si es necesario, conserve sus datos en una base de datos para aliviar el uso de la memoria.

Pruebe la última versión o versión secundaria de una biblioteca de terceros (1.9.3 vs. su 1.8.2, por ejemplo) y use la que sea más estable. A veces, las versiones más nuevas de las bibliotecas se escriben de manera más eficiente.

Si tiene una extensión PHP poco común o inestable, intente actualizarla. Puede tener una pérdida de memoria.

Si está tratando con archivos grandes y simplemente no puede leer línea por línea, intente dividir el archivo en muchos archivos más pequeños y procesarlos individualmente. Deshabilite las extensiones de PHP que no necesita.

En el área problemática, las variables no configuradas que contienen grandes cantidades de datos no se requieren más adelante en el código.

DESDE: https://www.airpair.com/php/fatal-error-allowed-memory-size


Si está seguro de que reinició Apache después de configurar php.ini, entonces podría estar buscando el archivo php.ini incorrecto


Tuve el mismo problema. Encontré la respuesta:

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

Nota: Tomará el uso de memoria ilimitada del servidor.

Actualización: Úselo con cuidado, ya que esto podría ralentizar su sistema si el script PHP comienza a usar una cantidad excesiva de memoria, lo que provoca un gran uso del espacio de intercambio. Puedes utilizar esto si sabes que el programa no ocupará mucha memoria y tampoco sabes cuánto configurarlo ahora mismo. Pero eventualmente encontrará cuánta memoria necesita para ese programa.

Siempre debe limitar la memoria como valor determinado por @ şarkı dinle .

ini_set(''memory_limit'', ''512M'');

Darle memoria ilimitada es una mala práctica, más bien deberíamos dar un límite máximo que podamos soportar y luego optimizar nuestro código o agregar algunos RAM.


1 check current limit: (in my os)php -i | grep limit => memory_limit => 256M => 256M 2 locate php.ini php --ini => Configuration File (php.ini) Path: /etc Loaded Configuration File: /etc/php.ini Scan for additional .ini files in: /etc/php.d Additional .ini files parsed: /etc/php.d/curl.ini ... 3 change memory_limit in php.ini vi /etc/php.ini memory_limit = 512M 4 restart nginx and (php-fpm if being used) service php-fpm restart service nginx restart


ini_set(''memory_limit'', ''128M'');

o

php.ini => memory_limit = 128M

o

php_value memory_limit 128M