2012-09-02 13 views
5

Fondamentalmente, vorrei inviare un'intestazione X-Sendfile al browser per inviare un file, ma non voglio chiamarlo se X-Sendfile non è disponibile o installato sul server. Come posso verificare questo in PHP ?? O se questo è impossibile controllare in PHP, di come controllare che sia installato PERIOD? Preferirei verificare l'esistenza di X-Sendfile in PHP, poiché sarebbe più facile per me farlo, dato che questo fa parte di un pacchetto che girerà anche su altri siti e server ... Forse se uso solo con la funzione PHP header, restituirà qualcosa se non installato ??PHP - Come scoprire se X-Sendfile è disponibile e installato?

ragazzi

Thanks :)

risposta

6

il modulo Apache mod_xsendfile processi i intestazioni

Per controllare se il modulo mod_xsendfile APACHE è disponibile e installato sul server, è possibile utilizzare la funzione apache_get_modules().

Non è possibile solo impostare l'intestazione e controllare se il modulo è installato o meno.

+0

Salva i tuoi "ringraziamenti" per qualcun altro. Sono più che felice di averti aiutato. – verisimilitude

+3

Non dimenticate: il modulo potrebbe essere caricato (elencato in apache_get_modules(), ma potrebbe non essere attivo (è anche disabilitato per impostazione predefinita) .Per questo non è possibile controllare con PHP – marcovtwout

0

Prova questo:

if (in_array('mod_xsendfile', apache_get_modules())) { 
     header("X-Sendfile: $file"); 
    } else { 
     error_log("Warning! mod-xsendfile is NOT INSTALLED - sending file the old fashion way....."); 
     header('Content-Length: ' . filesize($file)); 
     print file_get_contents($file); 
    } 
+0

perché non usare solo readfile in " old fashion way "? –

+2

xsendfile uscirà da PHP e rilascerà la memoria e consentirà a apache di inviare il file utilizzando l'accelerazione DMA/hardware.Se si utilizza readfile si passano i dati attraverso più buffer e si duplica in memoria (il file di letture PHP viene convertito in memoria -> buffer di output php -> buffer di output di apache -> buffer di rete tutto ciò che viene fatto nel processore anziché sendfile (apache dice a Harddrive di caricare il file direttamente in memoria usando DMA, apache dice alla scheda di rete di inviare dati leggendo direttamente dalla memoria, il processore è libero di fare altre cose invece di inutili copie di memoria) – RobertMaysJr

+0

Non stavo discutendo i meriti di xsendfile, ma la stampa "alla vecchia maniera". anche l'eco è più veloce della stampa e il secondo file readfile è più veloce di entrambi, specialmente se devi salvare file_get_contenuto prima di farlo eco. –

0

Questo non è corretto. Se XSendFile non è impostato su On per la posizione pertinente ma il modulo è caricato, assumerà erroneamente che l'uso di xsendfile sia disponibile, anche se non è così.

Problemi correlati