Fájlletöltés php-val egyszerűbben
Kisebb fileok esetén a hagyományos fopen(), fpassthru() párosítás tökéletesen megfelel arra, hogy a weboldalunkon php segítségével tudjon a látogató fileokat letölteni. A probléma akkor lép fel, ha a fájlunk túl nagy, illetve a php-nak megadott memória limit túl alacsony. Lassú letöltésesetén pedig a php timeout-al is elszállhat.
Az apache-hoz létezik egy modul, aminek a neve: mod_xsendfile
Ubuntuban megtalálható csomagban, így viszonylag egyszerű telepíteni: apt-get install mod_xsendfile
Telepítés után automatikusan aktiválja magát, nem kell engedélyezni külön az apacheban, viszont meghagyja nekünk a jogot, hogy a webszervert újraindíthassuk.
A .htaccess fájlunkba a következő két sort kell betenni:
XSendFile On
XSendFileAllowAbove on
Az utolsóra különösen akkor van szükségünk, ha a php fcgi módban fut.
A php forrásunkba pedig a letöltés részhez csak néhány header utasítást kell beszúrnunk:
Az X-Sendfile paraméter megadásánál arra kell figyelni, hogy a teljes útvonalat tartalmazza a gyökérkönyvtártól (/var/www/vhost/files/…), ellenkező esetben nem fogja megtalálni a filet.
Tesztelgetésem során a következőket tapasztaltam:
- Gyorsabb, stabilabb letöltés
- Kevesebb memóriahasználat
Twitter
LinkedIn