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:
- sistema maestro
php.ini
(generalmente en / etc en algún lugar) - en algún lugar de la configuración de Apache (httpd.conf o un archivo .conf por sitio, a través de
php_value
) - CLI y CGI pueden tener un
php.ini
diferente (use el comandophp -i | grep memory_limit
para verificar el conf del CLI) - archivos locales .htaccess (también
php_value
) - 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