Niekedy to také jednoduché nie je, hlavne pri viacerých typoch operačných systémov a prehliadačov,
ktoré interpretujú HTML protokol odlišne a potom ste prekvapení, že na kamarátovom WIN 7 a prehliadač Opera alebo Mozilla ak chcete súbor z webu stiahnut, to potom nefunguje. Najviac to oceníte vtedy, ak chcete sťahovat špecifické súbory, napr. súbory MS Office alebo iné.
Máme pre Vás malú radu ako veľmi rýchlo a efektívne naprogramujete takýto vždy fungujúci odkaz.
Súbor môže byt uložený na Vašom serveri alebo aj na vzdialenom. Najlepšie je, aby ste pri odkazoch na súbory uvádzali vždy celú cestu k súboru, aby PHP interpreter mal čo najmenej roboty.
Poďme na to.
K dispozícii na ukážku máme dva súbory: download.php - ten urobí všetku špinavú prácu za Vás.
V ňom vidíte jednoduchú viacnásobnú podmienku, kde do HTTP protokolu uvediete presnejšie aký typ súboru má váš prehliadac potom po kliku stiahnuť.
Ďalšie koncovky súborov si môžete ľahko doprogramovať sami.
Najpodstatnejšia vec v tomto skripte je, že priamo píšete do hlavicky HTTP presnejšie údaje, ako nebrať obsah volaného skriptu predtým (no cache),
čo má ponúknuť užívatelovi na stiahnutie (Content-Disposition: attachment;) atď.
Funkciou set_time_limit(0); si zabezpäčíme, aby pri sťahovaní súboru nebol predčasne ukončený výkon skriptu interpreterom PHP.
Nakoniec pomocou funkcie readfile prečítame obsah súboru na stiahnutie do tela protokolu HTTP a po ukončení vytorenia celého obsahu protokolu môže byť obsah poslaný po požiadavke klienta užívateľovmu prehliadaču.
/******************************************************************************* * Programmed by: Ing. Alojz Bendak * *******************************************************************************/ extract($_GET); $filename = realpath($filename); if (!file_exists($filename)) { echo "<CENTER>\n"; echo " <img src=\"./images/back.jpg\"; style=\"cursor='hand';\" onclick= \"history.back();\">\n<br>\n"; echo " <font color=red><b>NO FILE $filename HAS BEEN FOUND!\n"; echo "</CENTER>\n"; exit; } $file_extension = strtolower(substr(strrchr($filename,"."),1)); switch ($file_extension) { // case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpe": case "jpeg": case "jpg": $ctype="image/jpg"; break; default: $ctype="application/force-download"; } header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private", false); header("Content-Type: $ctype"); header("Content-Disposition: attachment; filename=\"".basename($filename)."\";"); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".@filesize($filename)); set_time_limit(0); @readfile("$filename");
Druhý subor je index.php - môžete si ho ale ľubovolne premenovať. V ňom je napísané použitie súboru download.php v PHP blokoch.
Váš súbor na stiahnutie som pomenoval konštantou DOWNLOAD_FILE.
<?php /******************************************************************************* * Programmed by: Ing. Alojz Bendak * *******************************************************************************/ define('DOWNLOAD_FILE', 'download.php'); ?> <HTML> <HEAD> <TITLE>Download file test</TITLE> </HEAD> <BODY> <TABLE width="100%" border="0"> <TR height="30" align="center"> <TD> Download file: <a href="/download.php?filename="><?php echo DOWNLOAD_FILE; ?></a> </TD> </TR> </TABLE> </BODY> </HTML>
Obidva súbory si vytvorte alebo prekopírujte najjednoduchšie do jedného adresára Vášho webového rozhrania.
No a nakoniec si stačí vyvolať v prehliadači súbor index.php a môžete si stiahnuť zdrojový súbor download.php klikom na odkaz download.php.