Kako prenesti datoteko v PHP

How Download File Php



Na splošno za prenos datoteke s končnicami ni potreben skript PHP exe in zadrgo . Če je lokacija te vrste datoteke nastavljena v datoteki href atributa sidrnega elementa, se datoteka samodejno prenese, ko uporabnik klikne povezavo za prenos. Nekatere datoteke, npr sliko datoteke, PDF datoteke, besedilo datoteke, CSV datoteke itd., se ne naložijo samodejno, temveč se odprejo v brskalniku, ko uporabnik klikne povezavo za prenos. Te datoteke je mogoče na silo prenesti v PHP z uporabo readfile () funkcija, ki se ne naloži samodejno. Ta vadnica vam pokaže, kako na silo prenesete katero koli datoteko s skriptom PHP.

Preverite povezave za prenos

Prej je bilo omenjeno, da zadrgo in exe datoteke se samodejno naložijo brez uporabe skripta PHP. Najprej ustvarite datoteko HTML z naslednjo kodo. Tu so definirani štirje sidrni elementi za prenos štirih vrst datotek. Te vrste datotek vključujejo datoteke TEXT, ZIP, PDF in JPG.







Download.html



< html >
< glavo >
< naslov >Prenesite datoteke</ naslov >
</ glavo >
< telo >
< str >< do href='abc.txt'>Prenesite datoteko TEXT</ do ></ str >
< str >< do href='horizon.zip'>Prenesite datoteko ZIP</ do ></ str >
< str >< do href='predavanje.pdf'>Prenesite datoteko PDF</ do ></ str >
< str >< do href='roza.jpg'>Prenesite datoteko JPG</ do ></ str >
</ telo >
</ html >

Izhod
Po prenosu datoteke zip se prikaže naslednje pogovorno okno za prenos datoteke. Uporabnik lahko nato prenese datoteko ali jo odpre v upravitelju arhivov.




Če kliknete slikovno datoteko, se bo slika samodejno odprla v brskalniku, kot je prikazano v naslednjem izhodu. Da kopirate slikovno datoteko na lokalni pogon, jo morate shraniti. Na enak način, ko kliknete povezave do datotek PDF in TEXT, se vsebina datoteke odpre v brskalniku brez prenosa datoteke. Rešitev te težave je, da datoteko na silo naložite z vgrajenim PHP-jem readfile () funkcijo.





Prenesite datoteko s funkcijo readfile ()

The readfile () funkcija se uporablja v skriptu PHP za prisilni prenos katere koli datoteke trenutne lokacije ali datoteke s potjo do datoteke. Sintaksa te funkcije je podana spodaj.



Sintaksa
int readfile (niz $ filename [, bool $ use_include_path = false [, vir $ context]])

Ta funkcija lahko sprejme tri argumente. Prvi argument je obvezen, druga dva pa neobvezna. Prvi argument, $ ime datoteke , shrani ime datoteke ali ime datoteke s potjo, ki se bo naložila. Privzeta vrednost drugega parametra, $ use_include_path , je false in bo nastavljeno na true, če je ime datoteke s potjo uporabljeno v prvem argumentu. Tretji argument, $ context , se uporablja za označevanje vira kontekstnega toka. Ta funkcija vrne število bajtov, prebranih iz datoteke, omenjene v prvem argumentu. Uporaba te funkcije je prikazana v naslednjih dveh primerih.

Primer 1: Prenesite datoteko z imenom datoteke

V tem primeru bomo ustvarili datoteko HTML z naslednjo kodo, kjer bo ime datoteke posredovano kot parameter URL -ja z imenom pot in vrednost tega parametra bo posredovana datoteki PHP z imenom download.php .

download2.html

< html >
< glavo >
< naslov > Prenos datotek</ naslov >
</ glavo >
< telo >
< str >< do href='download.php? path = abc.txt'> PrenesiBESEDILOmapa</ do ></ str >
< str >< do href='download.php? path = horizon.zip'> Prenesite datoteko ZIP</ do ></ str >
< str >< do href='download.php? path = predavanje.pdf'> Prenesite datoteko PDF</ do ></ str >
< str >< do href='download.php? path = rose.jpg'> Prenesite datoteko JPG</ do ></ str >
</ telo >
</ html >

Za prisilno nalaganje datoteke bomo ustvarili datoteko PHP z naslednjo kodo. Tukaj, odšel) Funkcija se uporablja za preverjanje, ali je $ _GET ['pot'] je definirano. Če je spremenljivka definirana, se file_exists () Funkcija se uporablja za preverjanje, ali datoteka obstaja v strežniku. Nato, header () Funkcija se uporablja za nastavitev potrebnih informacij o glavi pred uporabo readfile () funkcijo. The basename () funkcija se uporablja za pridobivanje imena datoteke in velikost datoteke() funkcija se uporablja za branje velikosti datoteke v bajtih, ki bo prikazana v pogovornem oknu za odpiranje datoteke. The flush () Funkcija se uporablja za brisanje izhodnega medpomnilnika. The readfile () Funkcija se tukaj uporablja samo z imenom datoteke.

download.php



če( odšel ($ _GET['pot']))
{
// preberite ime datoteke
$ ime datoteke = $ _GET['pot'];
// Preverite, ali datoteka obstaja ali ne
če( file_exists ($ ime datoteke)) {

// Določimo informacije o glavi
glavo ('Opis vsebine: prenos datotek');
glavo ('Content-Type: application/octet-stream');
glavo ('Cache-Control: no-cache, must-revalidate');
glavo ('Poteče: 0');
glavo („Vsebina-dispozicija: priloga; ime datoteke = ''. basename ($ ime datoteke).'' ');
glavo ('Dolžina vsebine:' . velikost datoteke ($ ime datoteke));
glavo ('Pragma: javna');

// Počisti sistemski izhodni vmesnik
splakniti ();

// Preberite velikost datoteke
readfile ($ ime datoteke);

// Končaj iz skripta
the ();
}
drugače{
vrgel ven 'Datoteka ne obstaja.';
}
}
drugače
vrgel ven 'Ime datoteke ni določeno.'
?>

Izhod
Naslednji izhod se prikaže, ko kliknete povezavo za prenos slikovne datoteke. Velikost datoteke rose.jpg slika je 27,2 KB , kot je prikazano v pogovornem oknu. Datoteko lahko prenesete tako, da izberete Shranite datoteko izbirnega gumba in pritisnite v redu gumb.

Primer 2: Prenesite datoteko s potjo datoteke

Če datoteka obstaja na danem mestu datoteke, jo bo treba pot URL -ja navesti v URL -ju. V tem primeru bomo ustvarili datoteko HTML z naslednjo kodo, ki bo podala ime datoteke s potjo datoteke:

download3.html

< html >
< glavo >
< naslov >Prenesite datoteke</ naslov >
</ glavo >
< telo >
< str >< do href='download.php? path = prenosi/predavanje.pdf'>Prenesite datoteko PDF</ do ></ str >
< str >< do href='download2.php? path = downloads/rose.jpg'>Prenesite datoteko JPG</ do ></ str >
</ telo >
</ html >

Za prenos datoteke s poti do datoteke bomo ustvarili datoteko PHP z naslednjo kodo. Koda PHP v prejšnjem primeru bo nekoliko spremenjena za prenos datoteke z dane poti. The clearstatecache () Funkcija se uporablja za brisanje predpomnilnika, ki je bil prej shranjen. V argumentu sta uporabljena dva argumenta readfile () funkcijo.

download2.php


če( odšel ($ _GET['pot']))
{
// Preberite url
$ url = $ _GET['pot'];

// Počisti predpomnilnik
clearstatcache ();

// Preverite, ali pot do datoteke obstaja ali ne
če( file_exists ($ url)) {

// Določimo informacije o glavi
glavo ('Opis vsebine: prenos datotek');
glavo ('Content-Type: application/octet-stream');
glavo („Vsebina-dispozicija: priloga; ime datoteke = ''. basename ($ url).'' ');
glavo ('Dolžina vsebine:' . velikost datoteke ($ url));
glavo ('Pragma: javna');

// Počisti sistemski izhodni vmesnik
splakniti ();

// Preberite velikost datoteke
readfile ($ url,prav);

// Končaj iz skripta
the ();
}
drugače{
vrgel ven 'Pot do datoteke ne obstaja.';
}
}
vrgel ven 'Pot datoteke ni določena.'

?>

Izhod
Ko kliknete povezavo za prenos datoteke PDF, se prikaže naslednji izhod.

Video vadnica

Zaključek

Ta članek je na preprost način prisilno naložil katero koli datoteko s skriptom PHP in bralcem pomagal dodati funkcijo prenosa v svoj skript.