Gå til innhold

Nedlasting - ikke åpning av linkinnhold


Anbefalte innlegg

Trenger hjelp til følgende: Man skal, ved å trykke på en knapp (eg. en *.png-fil) på hjemmesiden min, få opp valget om å laste ned og lagre, eller evt. åpne denne filen. Jeg vil altså ikke la webleseren åpne denne filen direkte.

Dette gjelder som tidligere nevnt et *.pdf-fil.

Hvordan går jeg fram her?

Jeg MÅ nevne for dere at jeg nok trenger dette totalt inn med teskje..!

 

På forhånd takk..!

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+142

test.php:

<a href="last.php">Last ned PDF-filen</a>

 

 

last.php:

<?php

// Filnavn
$pdf_filpath = $_GET["fil"];
$filnavn = basename($pdf_filpath);

$fil = explode(".", $filnavn);
$filendelse = strtolower( $fil[count($fil)-1] );

unset($fil);

Avslutt skriptkjøring hvis $pdf_filnavn ikke er et gyldig filnavn
if($filendelse!='pdf' || !file_exists($pdf_filpath)) die("PDF-filen finnes ikke...[{$pdf_filpath}]");

$len = filesize($pdf_filpath);

// Gi nettleseren beskjed om at en pdf-fil sendes og SKAL lastes ned, ikke vises i nettleseren
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$filnavn.";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$len);

// Send (innholdet i) filen
@readfile($pdf_filpath);

// Avslutt kjøring av skript
exit;

?>

 

Slik?

Lenke til kommentar
test.php:

<a href="last.php">Last ned PDF-filen</a>

 

 

last.php:

<?php

// Filnavn
$pdf_filpath = $_GET["fil"];
$filnavn = basename($pdf_filpath);

$fil = explode(".", $filnavn);
$filendelse = strtolower( $fil[count($fil)-1] );

unset($fil);

Avslutt skriptkjøring hvis $pdf_filnavn ikke er et gyldig filnavn
if($filendelse!='pdf' || !file_exists($pdf_filpath)) die("PDF-filen finnes ikke...[{$pdf_filpath}]");

$len = filesize($pdf_filpath);

// Gi nettleseren beskjed om at en pdf-fil sendes og SKAL lastes ned, ikke vises i nettleseren
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$filnavn.";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$len);

// Send (innholdet i) filen
@readfile($pdf_filpath);

// Avslutt kjøring av skript
exit;

?>

 

Slik?

 

Takker for lynkjapt svar, mariyo...

Kan denne koden (last.php) brukes "as is"..?

Hvor setter jeg inn filnavnet..?

(Sa jo at jeg var treg) ;-)

Lenke til kommentar
Gjest Slettet+142

Ja du har rett der. Jeg endret på koden i tekstboksen en del og glemte å endre HTML-koden.

Uansett, om du ikke skjønte hva Kagee sa, så skal altså linken til nedlastingen se slik ut:

<a href="last.php?fil=navn_på_pdf_fil.pdf">Last ned PDF-Fil</a>

Så bare endrer du "navn_på_pdf_fil.pdf" til det virkelige navnet på pdf-filen du vil at linken skal tvinge brukeren til å laste ned :)

Lenke til kommentar

Skjønner hva du sikter til, Kagee...

 

Jeg ser at følgende funker: ...download.php?fil=Navn.pdf"

 

Denne funker ikke: ...download.php?fil=/mappe1/mappe2/Navn.pdf"

 

Det vil si at dersom jeg må inn med hele stien funker den ikke...

 

Er det andre sikkerhetstiltak jeg bør få med meg..?

 

Her er jo endel filer jeg er redd for - på flere vis, så det hadde sikkert vært på sin plass med sikkerhetsforanstaltninger i så måte.

Lenke til kommentar

Siste: Joda, det stemmer nok det du sier...

Dersom jeg skriver "<a href="http://www.mittdomene.no/mappe1/mappe2/download.php?fil=Navn.pdf" så fungerer det...

 

Her burde man kanskje tenke sikkerhet - men hvordan skal jeg sikre meg mot onde medverdensborgere i så måte..?

 

Vi skrev litt om hverandre her...

Jeg trenger selvsagt også dette inn med teskje..! :-)

 

Det er foreløpig kun snakk om én fil, men det kan selvsagt bli flere etterhvert...

Lenke til kommentar

<?php

// Filnavn
$pdf_filpath_raw = $_GET["fil"];
/*
$filnavn = basename($pdf_filpath);

$fil = explode(".", $filnavn);
$filendelse = strtolower( $fil[count($fil)-1] );

unset($fil);

Avslutt skriptkjøring hvis $pdf_filnavn ikke er et gyldig filnavn
if($filendelse!='pdf' || !file_exists($pdf_filpath)) die("PDF-filen finnes ikke...[{$pdf_filpath}]");
*/
$path_2_file_folder = "C:\www\files\";

$available_files['1'] = 'Navn.pdf';
$available_files['dok'] = 'dokumentasjon.pdf';
$available_files['test'] = 'NavnTest.pdf';

$pdf_filpath = $path_2_file_folder . $available_files[$pdf_filpath_raw];

if(!file_exists($pdf_filpath)) die("PDF-filen finnes ikke...[{$pdf_filpath}]");

$len = filesize($pdf_filpath);

// Gi nettleseren beskjed om at en pdf-fil sendes og SKAL lastes ned, ikke vises i nettleseren
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$filnavn.";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$len);

// Send (innholdet i) filen
@readfile($pdf_filpath);

// Avslutt kjøring av skript
exit;

?>

 

Hardkodet.

Hvis jeg ber om download.php?fil=test får jeg C:\www\files\NavnTest.pdf

Det ser riktignok ut som om jeg har hoppet over noen kapitler i koden - ved å bruke basename, henter det ut bare filnavnet, slik at hvis du bruker f.eks ..\..\ for å få tak i "ulovlige" filer får scriptet uansett bare filnavnet (navn.pdf) å arbeide med.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...