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% [?]





Multumesc mult pentru articol. Chiar mi-a fost de ajutor!
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
multmesc mult pentru articol mi-a fost de mare ajutor
Îmi puneam și eu de mult întrebarea asta. Mulțumesc mult pentru articol. Mă simt mai deștept acum
!
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.
Mai avem nevoie de astfel de articole utile:D
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).
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.
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
multumesc mult … nu i-am dat de cap nici cum
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.
Pot folosi asta sa ofer vizitatorilor posibilitatea sa vizualizeze documente .doc sau .pdf fara a le descarca?
@mein mindz: nu se poate. E vorba tocmai de efectul contrar, sa descarce fara sa citeasca
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