2009-03-06 28 views
11

En PHP 5.0.4, si no configure -enable-memory-limit, se ignora la directiva memory_limit. (Está establecido en 8M en el archivo recomendado php.ini, pero la documentación dice que se ignora). Entonces, en ese caso, ¿hay algún límite de memoria por script, o solo está limitado por el sistema?límite de memoria PHP

Pregunto porque estoy actualizando a PHP 5.2.8, y hace permite limitar la memoria de forma predeterminada. Entonces ahora tengo que establecer el valor en algo apropiado. El archivo php.ini recomendado ahora lo tiene configurado en 128M, pero no sé si eso es más o menos que lo que 5.0.4 hizo de manera predeterminada.

Estoy actualizando los sistemas de producción, por lo que me gustaría evitar cualquier cambio importante en el comportamiento. El documentation (busque "memory_limit") es muy confuso en este punto. Dice "por defecto", pero no sé si eso significa el valor predeterminado establecido en el archivo de configuración, o el valor predeterminado que usa cuando la limitación de memoria está deshabilitada.

Respuesta

9

El limitador de memoria en PHP es opcional; si lo deshabilita en tiempo de compilación, no hay ningún límite.

En 5.0.4 está deshabilitado a menos que lo haya solicitado explícitamente en tiempo de compilación, porque el limitador de memoria era useless until 5.2 y no contaba muchas cosas que debería haber hecho, incluidas funciones como mysql. Ha cambiado a en desde 5.2.1 ahora que aprendieron a contar.

En caso de duda, desactívelo o asegúrese de actualizar el archivo de configuración para usar el nuevo valor predeterminado. Dejarlo en 8MB y actualizar a 5.2.8 casi definitivamente causará problemas.

4

128M es muy alto. Es posible que lo necesite, pero me sorprendería.

Más al punto, el límite se puede ajustar a un valor predeterminado global en php.ini:

memory_limit = 32M 

También puede anularlo en secuencias de comandos:

<?php 
ini_set('memory_limit', '128M'); 
... 

Es probable que encuentres solo tienes un puñado de scripts que necesitan mucha memoria. Encuentre un valor cómodo (con pruebas) y luego suba para los que necesitan más.

+1

Mi pregunta es: en la 5.0.4, si no establece memory_limit, ¿sigue aplicando uno? –

+3

+1, el recolector de basura de PHP se ha roto más de una vez. Como deshacerse de los tiempos de espera es tan popular, es importante saber qué código realmente está __haciendo__ a una computadora. –

3

El límite de memoria predeterminado en php antes de 5.2 era 8 MB, se aumentó a un valor predeterminado de 16 MB en php 5.2.0. Actualmente es un valor predeterminado de 128 MB.

Para reproducir el comportamiento de las versiones pre 5.2, establezca explícitamente el límite de memoria en 8MB.

Consulte "Límites de recursos" en el sitio web de php.net.

http://us.php.net/ini.core

EDITAR

"Antes de PHP 5.2.1, con el fin de utilizar esta directiva tuvo que ser activado en tiempo de compilación usando -enable-memory-limit en la línea de configure . "

Comprueba los indicadores de compilación de tu antiguo servidor, si no lo tienes activado no se aplica ningún límite.

+1

¿Sabes si ese 8MB realmente se hizo cumplir sin embargo? Era el valor predeterminado para esa configuración en php.ini, pero los documentos dicen que la configuración se ignoró. –

+0

No quise votar esta respuesta, fue un accidente. – boclodoa

Cuestiones relacionadas