Een bestand downloaden in PHP

How Download File Php



Over het algemeen is er geen PHP-script nodig om een ​​bestand met de extensies te downloaden exe en zip . Als de bestandslocatie van dit type bestand is ingesteld in de href attribuut van het ankerelement, dan wordt het bestand automatisch gedownload wanneer de gebruiker op de downloadlink klikt. Sommige bestanden, zoals afbeelding bestanden, PDF bestanden, tekst bestanden, CSV bestanden, enz., worden niet automatisch gedownload en openen in plaats daarvan in de browser wanneer de gebruiker op de downloadlink klikt. Deze bestanden kunnen geforceerd worden gedownload in PHP met behulp van het leesbestand() functie die niet automatisch wordt gedownload. Deze tutorial laat je zien hoe je elk bestand met geweld kunt downloaden met behulp van PHP-script.

Controleer downloadlinks

Eerder werd vermeld dat zip en exe bestanden worden automatisch gedownload, zonder PHP-script te gebruiken. Maak eerst een HTML-bestand met de volgende code. Hier worden de vier ankerelementen gedefinieerd om de vier soorten bestanden te downloaden. Deze bestandstypen omvatten TEKST-, ZIP-, PDF- en JPG-bestanden.







Download.html



< html >
< hoofd >
< titel >Bestanden downloaden</ titel >
</ hoofd >
< lichaam >
< P >< tot href='abc.txt'>TEXT-bestand downloaden</ tot ></ P >
< P >< tot href='horizon.zip'>ZIP-bestand downloaden</ tot ></ P >
< P >< tot href='lezing.pdf'>PDF-bestand downloaden</ tot ></ P >
< P >< tot href='roos.jpg'>JPG-bestand downloaden</ tot ></ P >
</ lichaam >
</ html >

Uitgang:
Het volgende dialoogvenster verschijnt om het bestand te downloaden nadat u op de zip-bestandslink hebt geklikt. De gebruiker kan het bestand vervolgens downloaden of het bestand openen in de archiefbeheerder.




Als u op het afbeeldingsbestand klikt, wordt de afbeelding automatisch geopend in de browser, zoals weergegeven in de volgende uitvoer. U moet het bestand opslaan om een ​​kopie van het afbeeldingsbestand op het lokale station te kunnen maken. Op dezelfde manier, wanneer u op PDF- en TEKST-bestandskoppelingen klikt, wordt de inhoud van het bestand in de browser geopend zonder het bestand te downloaden. De oplossing voor dit probleem is om het bestand geforceerd te downloaden met behulp van de ingebouwde PHP leesbestand() functie.





Bestand downloaden met de functie readfile()

De leesbestand() functie wordt gebruikt in PHP-script om elk bestand van de huidige locatie of het bestand met het bestandspad met geweld te downloaden. De syntaxis van deze functie wordt hieronder gegeven.



Syntaxis
int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )

Deze functie kan drie argumenten aannemen. Het eerste argument is verplicht en de andere twee argumenten zijn optioneel. Het eerste argument, $bestandsnaam , slaat de bestandsnaam of bestandsnaam op met het pad dat wordt gedownload. De standaardwaarde van de tweede parameter, $use_include_path , is onwaar en wordt ingesteld op waar als de bestandsnaam met het pad in het eerste argument wordt gebruikt. Het derde argument, $context , wordt gebruikt om de contextstreambron aan te geven. Deze functie retourneert het aantal bytes dat is gelezen uit het bestand dat in het eerste argument wordt genoemd. Het gebruik van deze functie wordt getoond in de volgende twee voorbeelden.

Voorbeeld 1: Download bestand met bestandsnaam

In dit voorbeeld maken we een HTML-bestand met de volgende code, waarbij de bestandsnaam wordt doorgegeven als parameter van de URL met de naam pad , en de waarde van deze parameter wordt doorgegeven aan het PHP-bestand met de naam download.php .

download2.html

< html >
< hoofd >
< titel >Bestanden downloaden</ titel >
</ hoofd >
< lichaam >
< P >< tot href='download.php?path=abc.txt'>DownloadenTEKSThet dossier</ tot ></ P >
< P >< tot href='download.php?path=horizon.zip'>ZIP-bestand downloaden</ tot ></ P >
< P >< tot href='download.php?path=lezing.pdf'>Download PDF-bestand</ tot ></ P >
< P >< tot href='download.php?path=rose.jpg'>Download JPG-bestand</ tot ></ P >
</ lichaam >
</ html >

We zullen het PHP-bestand maken met de volgende code om het bestand met geweld te downloaden. Hier de weg) functie wordt gebruikt om te controleren of de $_GET[‘pad’] is gedefinieerd. Als de variabele is gedefinieerd, de Bestand bestaat() functie wordt gebruikt om te controleren of het bestand op de server bestaat. Volgende, de kop() functie wordt gebruikt om de benodigde koptekstinformatie in te stellen voordat de leesbestand() functie. De basisnaam() functie wordt gebruikt om de bestandsnaam op te halen, en de bestandsgrootte() functie wordt gebruikt om de grootte van het bestand in bytes te lezen, die wordt weergegeven in het openingsdialoogvenster om het bestand te downloaden. De spoelen() functie wordt gebruikt om de uitvoerbuffer te wissen. De leesbestand() functie wordt hier alleen met de bestandsnaam gebruikt.

download.php



indien( weg ($_GET['pad']))
{
//Lees de bestandsnaam
$bestandsnaam = $_GET['pad'];
//Controleer of het bestand bestaat of niet
indien( Bestand bestaat ($bestandsnaam)) {

//Definieer koptekstinformatie
koptekst ('Inhoudsbeschrijving: bestandsoverdracht');
koptekst ('Content-Type: applicatie/octet-stream');
koptekst ('Cache-Control: no-cache, must-revalidate');
koptekst ('Verloopt: 0');
koptekst ('Content-Disposition: bijlage; bestandsnaam=''. basisnaam ($bestandsnaam).'' ');
koptekst ('Inhoud lengte: ' . bestandsgrootte ($bestandsnaam));
koptekst ('Pragma: openbaar');

//Uitvoerbuffer van systeem wissen
doorspoelen ();

//Lees de grootte van het bestand
leesbestand ($bestandsnaam);

//Beëindigen van het script
de ();
}
anders{
gooide uit 'Bestand bestaat niet.';
}
}
anders
gooide uit 'Bestandsnaam is niet gedefinieerd.'
?>

Uitgang:
De volgende uitvoer verschijnt nadat u op de downloadlink van het afbeeldingsbestand hebt geklikt. De bestandsgrootte van de rose.jpg afbeelding is 27,2 KB , zoals weergegeven in het dialoogvenster. U kunt het bestand downloaden door de te selecteren Sla bestand op keuzerondje en druk op de Oke knop.

Voorbeeld 2: Bestand downloaden met bestandspad

Als het bestand op de opgegeven bestandslocatie bestaat, moet het bestandspad in de URL worden vermeld. In dit voorbeeld maken we een HTML-bestand met de volgende code, die de bestandsnaam met het bestandspad doorgeeft:

download3.html

< html >
< hoofd >
< titel >Bestanden downloaden</ titel >
</ hoofd >
< lichaam >
< P >< tot href='download.php?path=downloads/lezing.pdf'>PDF-bestand downloaden</ tot ></ P >
< P >< tot href='download2.php?path=downloads/rose.jpg'>JPG-bestand downloaden</ tot ></ P >
</ lichaam >
</ html >

We zullen een PHP-bestand maken met de volgende code om een ​​bestand van het bestandspad te downloaden. De PHP-code in het vorige voorbeeld wordt enigszins aangepast om het bestand van het opgegeven pad te downloaden. De clearstatecache() functie wordt gebruikt om de cache te wissen die eerder was opgeslagen. Er worden twee argumenten gebruikt in de leesbestand() functie.

download2.php


indien( weg ($_GET['pad']))
{
//Lees de url
$url = $_GET['pad'];

// Wis de cache
clearstatcache ();

//Controleer of het bestandspad bestaat of niet
indien( Bestand bestaat ($url)) {

//Definieer koptekstinformatie
koptekst ('Inhoudsbeschrijving: bestandsoverdracht');
koptekst ('Content-Type: applicatie/octet-stream');
koptekst ('Content-Disposition: bijlage; bestandsnaam=''. basisnaam ($url).'' ');
koptekst ('Inhoud lengte: ' . bestandsgrootte ($url));
koptekst ('Pragma: openbaar');

//Uitvoerbuffer van systeem wissen
doorspoelen ();

//Lees de grootte van het bestand
leesbestand ($url,waar);

//Beëindigen van het script
de ();
}
anders{
gooide uit 'Bestandspad bestaat niet.';
}
}
gooide uit 'Bestandspad is niet gedefinieerd.'

?>

Uitgang:
Nadat op de downloadlink van het PDF-bestand is geklikt, verschijnt de volgende uitvoer.

Video-instructies

Conclusie

Dit artikel bood een eenvoudige manier om elk bestand geforceerd te downloaden met behulp van het PHP-script, om lezers te helpen de downloadfunctie in hun script toe te voegen.