2012-08-09 7 views
40

Ho un problema che aumenta il limite di memoria per PHP come modulo Apache.Come aumentare il limite di memoria per PHP oltre 2 GB?

se metto seguente direttiva di configurazione di Apache, che il lavoro OK:

php_value memory_limit 1.99G 

Ma oltre 2GB non funzionano, è ripristinare questo valore a 128 MB.

Qual è il problema qui? Ho bisogno di più memoria per alcune attività relative al PDF.

Il server è Debian 2.6.32-5-amd64 # 1 SMP, PHP 5.3.3-7 + squeeze13 con 12 GB di RAM fisica.

+7

2G processi di Apache ! Wow. – Ray

+0

Forse dovresti lasciare la configurazione di apache come predefinita e 'ini_set ('memory_limit', -1);' solo sul file che ti serve. Vedi se funziona. – JRomero

+0

Utilizzando MB invece GB non cambia nulla. Io cosa c'è qualche altro limite forse da qualche parte nella configurazione di Apache. Inoltre, poiché so che memory_limit non può essere modificato in fase di esecuzione e il valore predefinito è 128 MB. Forse posso impostarlo nel php.ini principale ma non voglio che altri VHOST abbiano impostazioni così grandi da usarlo per VHOST. – mikikg

risposta

32

Avete provato ad utilizzare il valore in MB?

php_value memory_limit 2048M 

provare anche modifica di questo valore in php.ini non Apache.

+1

sì, deve essere in php.ini. Per qualche motivo non funzionano su 2G nella configurazione di apache (funzionano senza problemi altri valori più bassi). – mikikg

+0

ciao ... in realtà sto usando zend così come increspare la memoria di zend –

+0

E 'questo per dire che non c'è praticamente limite alla quantità di memoria che PHP può consumare, a patto di avere abbastanza RAM disponibile? – dotslash

1

ingresso le seguenti operazioni per la configurazione di Apache:

php_value memory_limit 2048M 
3

È necessario disporre di un sistema operativo a 64 bit su hardware che supporti il ​​sistema operativo a 64 bit, la versione Apache a 64 bit e lo stesso per PHP. Ma questo non garantisce che le funzioni che funzionano con PDF possano utilizzare dimensioni così grandi di memoria. È meglio non caricare l'intero file in memoria, dividerlo in blocchi o utilizzare le funzioni dei file per cercarlo senza caricare nella RAM.

+0

È già 64 bit: Linux myHOST 2.6.32-5-amd64 # 1 SMP Lun 3 ottobre 03:59:20 UTC 2011 x86_64 GNU/Linux – mikikg

+0

Che dire di Apache? – Timur

+0

Apache è la versione stock 2.2.16-6 + squeeze7 di Debian. Penso che sia compilato a 64 bit. – mikikg

26

Suggerirei di guardare il problema alla luce sbagliata. La ricerca dovrebbe essere 'cosa sto facendo che ha bisogno di memoria 2G all'interno di un processo apache con Php tramite il modulo apache ed è questo set di strumenti più adatto per il lavoro?'

Sì, è possibile fissare un razzo a un guado, ma probabilmente non è la soluzione giusta.

Indipendentemente da ciò, fornirò il missile se ne hai davvero bisogno ... puoi aggiungerlo alla parte superiore della sceneggiatura.

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

Questo lo imposterà solo per la sceneggiatura. Avrai comunque bisogno di dire ad apache di permettere così tanto per uno script php (credo).

+1

Lo so, lo script non è mio, è un convertitore html2pdf e l'input è una pagina HTML molto grande. – mikikg

+0

@mikikg vedere la risposta sopra – Ray

+0

Soluzione giusta e giusta spiegazione! Mi sono imbattuto nel limite di memoria solo per 1 script, la mia sitemap, che stava indicizzando troppe pagine (che erano state archiviate nel DB). Soluzione perfetta, la mappa del sito ha un limite di memoria elevato, tutto il resto rimane intatto. – HoldOffHunger

12

Per limite di memoria illimitata impostare -1 in memory_limit variabile:

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

È bello sapere che è possibile una memoria illimitata, ma non credo che lo userò presto nel mio codice. =) – HoldOffHunger