2009-03-06 25 views
11

In PHP 5.0.4, se si non configurare -enable-memory-limit, la direttiva memory_limit viene ignorata. (È impostato su 8M nel file php.ini consigliato, ma la documentazione dice che è ignorato.) In tal caso, esiste un limite di memoria per script o è limitato solo dal sistema?Limite memoria PHP

Chiedo perché sto aggiornando a PHP 5.2.8, e fa consentire la limitazione della memoria di default. Quindi ora devo impostare il valore su qualcosa di appropriato. Il file php.ini consigliato ora ha impostato su 128M, ma non so se questo è più o in meno di rispetto a quello che 5.0.4 ha fatto per impostazione predefinita!

Sto aggiornando i sistemi di produzione, quindi vorrei evitare qualsiasi cambiamento importante nel comportamento. Il documentation (cercare "memory_limit") è molto confuso su questo punto. Dice "default", ma non so se questo significa il valore predefinito impostato nel file di configurazione, o il valore predefinito che usa quando la limitazione della memoria è disabilitata.

risposta

9

Il limitatore di memoria in PHP è facoltativo; se lo disabiliti al momento della compilazione non c'è alcun limite.

In 5.0.4 è disabilitato a meno che non venga richiesto esplicitamente in fase di compilazione, il motivo è che il limitatore di memoria era useless until 5.2 e non contava molte cose che avrebbe dovuto fare, incluse cose come le funzioni di mysql. È diventato su da 5.2.1 ora che hanno imparato a contare.

In caso di dubbio, disattivarlo o assicurarsi di aggiornare il file di configurazione per utilizzare il nuovo valore predefinito. Lasciandolo a 8 MB e l'aggiornamento a 5.2.8 causerà quasi sicuramente problemi.

4

128 M è molto alto. Potrebbe essere necessario, ma sarei sorpreso.

Più precisamente, il limite può essere impostato su un valore predefinito globale nel php.ini:

memory_limit = 32M 

è anche possibile sovrascrivere negli script:

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

Probabilmente troverete hai solo una manciata di script che richiedono molta memoria. Trova un certo valore confortevole (con i test) e poi basta per quelli che hanno bisogno di più.

+1

La mia domanda è: in 5.0.4, se non imposti memory_limit, ne impone ancora uno? –

+3

+1, il garbage collector di PHP si è rotto più di una volta. Come sbarazzarsi dei timeout è così popolare, è importante sapere qual è il tuo codice __doing__ su un computer. –

3

Il limite di memoria predefinito in php prima di 5.2 era 8 MB, è stato aumentato a un valore predefinito di 16 MB in php 5.2.0. Attualmente è un valore predefinito di 128 MB.

Per riprodurre il comportamento delle versioni precedenti alla 5.2, impostare il limite di memoria su 8 MB.

Cerca in "Limiti di risorse" sul sito Web php.net.

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

EDIT

"Prima di PHP 5.2.1, al fine di utilizzare questa direttiva doveva essere attivato al momento della compilazione utilizzando -enable-memory-limite nella linea di configurazione . "

Controllare i flag di compilazione del vecchio server, se non è stato abilitato non è stato applicato alcun limite.

+1

Sai se quell'8MB è stato effettivamente applicato? Era il valore predefinito per quell'impostazione in php.ini, ma i documenti dicono che l'impostazione è stata ignorata. –

+0

Non intendevo votare questa risposta, è stato un incidente. – boclodoa

Problemi correlati