Twitter RSS

Sunt situatii in care anumite fisiere care in mod normal sunt afisate sau interpretate trebuie sa le oferim pentru download. Astfel de fisiere sunt de exemplu imaginile, fisierele .txt sau altele asemenea care in mod implicit sunt afisate in browser. Daca vrem sa fortam downloadul unui fisier, va trebui sa folosim functia header() din PHP:

< ?php
$fName = 'layout.png';
$fSize = filesize( $fName );
 
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $fName);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $fSize);
readfile($fName);
exit;
?>

La apelare, scriptul va citi din directorul curent fisierul “layout.png” si ii va spune browserului cu ajutorul headerelor ca fisierul trebuie downloadat, nu afisat. Implicit cand se va apela scriptul prin browser, se va deschide casuta de salvare a imaginii.

Popularity: 7% [?]

Comentarii pentru “Cum fortam downloadarea unui fisier in PHP?”

  • Florin Goanta spune:

    Multumesc mult pentru articol. Chiar mi-a fost de ajutor!

  • Mobella spune:

    Vaaai!! Deci zeicesc, acum o saptamana cu asa ma chinuiam, am incercat cu CURL sa fac request si sa trimit header-e, insa sigur am gresit ceva, din moment ce nu mi-a iesit :) acum incerc si varianta ta

  • rami cori spune:

    multmesc mult pentru articol mi-a fost de mare ajutor

  • Mihai spune:

    Îmi puneam și eu de mult întrebarea asta. Mulțumesc mult pentru articol. Mă simt mai deștept acum :D !

  • Enciclopedie spune:

    Cred ca ma chinui de ceva timp sa fac acest lucru. In sfarsit am gasit articolul care trebuia. Multumesc mult. Mi-a fost de ajutor.

  • Florin Goanta spune:

    Mai avem nevoie de astfel de articole utile:D

  • SaltwaterC spune:

    Pentru fișiere mari se recomandă o implementare alternativă pentru readfile() deoarece readfile() face buffer complet la obiect, iar în funcție de setările din PHP, va da eroare de alocare de memorie. Chiar și așa, poate interveni un timeout la execuția PHP, deci va rezulta un download incomplet, motiv pentru care se recomandă chestii gen X-Sendfile (Apache, lighttpd) sau X-Accel-Redirect (nginx).

  • Ceasuri spune:

    Foarte util aricolul, de 2 zile ma chinuiam sa fac chestia cu downloadul de imagini, dadusem de tot felul de tutoriale unele care nici nu functionau cum trebuie. Ms mult.

  • Mihai spune:

    Foarte util, m-a ajutat la licenta, am facut un site dinamic pentru o farmacie si vroiam sa downloadeze pdf-urile de pe site. MS

  • Naruto spune:

    multumesc mult … nu i-am dat de cap nici cum

  • Spete spune:

    Metoda este extrem de utila in cazul in care aveti foldere cu diverse fisiere pentru downlodat. In loc de apelarea lor directa, se pot downloda prin php, si astfel se previn situatii in care in folderul respectiv pot aparea scripturi pe care hackerii sa le execute in diverse scopuri.

  • mein mindz spune:

    Pot folosi asta sa ofer vizitatorilor posibilitatea sa vizualizeze documente .doc sau .pdf fara a le descarca?

  • Sergiu Tot spune:

    @mein mindz: nu se poate. E vorba tocmai de efectul contrar, sa descarce fara sa citeasca :)

  • print spune:

    Merci de articol, cautam asta de ceva vreme

  • merge si pentru txt si pentru csv! super tare. aveam site csv-uri care trebuiau downloadate cu alt… si ma scoteau din sarite anumiti operatori, cum sa intrebi aceiasi chestie de 3 ori??!! Problem solved. thx

Ai intrebari?

* Te rog sa postezi pe NetHelp orice intrebare care nu are legatura cu articolul.

Retele sociale
Reclamã
Sharing makes you cool!
Categorii
Apache
Articole si tutoriale legate de serverul web Apache.
/articole-tutoriale-apache/

cPanel
Articole si tutoriale legate de utilizarea si administrarea sistemului de gestiune a serverelor de hosting, cPanel.
/articole-tutoriale-cpanel-whm/

DNS
Vezi toate articolele din categoria DNS
/dns-bind-domain-name-services/

Linux
Articole si tutoriale legate de Linux, sisteme BSD sau alte sisteme de operare din familia UNIX.
/articole-tutoriale-linux/

Mail
Vezi toate articolele din categoria Mail
/mail/

MySQL
Articole si tutoriale despre serverul de baze de date MySQL.
/articole-tutoriale-optimizare-mysql/

Perl
Vezi toate articolele din categoria Perl
/perl-practical-extraction-and-report-language/

PHP
Vezi toate articolele din categoria PHP
/php-language-hypertext-preprocessor/

Retele
Tutoriale despre retele de calculatoare, configurarea interfetelor de retea si rutarea IP-urilor.
/retele-networking/

Virtualizare
Articole si tutoriale despre virtualizare si sistemel virtuale create cu Xen sau OpenVZ.
/virtualizare-xen-openvz/

Web hosting
Articole despre serviciile de gazduire web, dedicate sau in regim shared.
/web-hosting/

Webmin / Virtualmin
Articole si tutoriale legate de sistemul de gestiune gratuit Webmin sau modulul Virtualmin.
/webmin-virtualmin/





Newsletter
LAMP Recomandã
NetHelp
SRV.ro
cpadmin.ro
ABCDomenii