vargefaret Skrevet 21. desember 2007 Del Skrevet 21. desember 2007 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
Gjest Slettet+142 Skrevet 21. desember 2007 Del Skrevet 21. desember 2007 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
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 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
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 Prøver og prøver, men ender stort sett bare opp med "PDF-filen finnes ikke...[]" Lenke til kommentar
Kagee Skrevet 21. desember 2007 Del Skrevet 21. desember 2007 (endret) Filnavnet (i denne spesifikke koden) setter du vet å kalle siden med f.eks download.php?fil=Dokumentasjon.pdf Endret 21. desember 2007 av Kagee Lenke til kommentar
Gjest Slettet+142 Skrevet 21. desember 2007 Del Skrevet 21. desember 2007 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
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 Funker som fy..! Tusen hjerteligst takk, begge to..! Lenke til kommentar
Kagee Skrevet 21. desember 2007 Del Skrevet 21. desember 2007 Det burde kanskje legges inn noen sikkerhetssjekker på denne scriptet? Hvis jeg ber om last.php?fil=../../../etc/passwd vil jeg vel i teorien få den med dette scriptet? Lenke til kommentar
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 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
Kagee Skrevet 21. desember 2007 Del Skrevet 21. desember 2007 Du kan (selv ville jeg) hardkodet det om det ikke er for mange filer - dvs at download.php?fil=1 laster ned Navn.pdf, mens download.php?fil=2 laster ned Dokumentasjon.pdf Lenke til kommentar
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 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
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 Dersom jeg senere skriver "<a href="http://www.mittdomene.no/mappe1/mappe2/download.php?fil=AnnetNavn.pdf" - blir det da slik som du mener..? Lenke til kommentar
Kagee Skrevet 21. desember 2007 Del Skrevet 21. desember 2007 <?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
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 Hva trenger jeg å forandre her inne for å få denne til å virke..? Lenke til kommentar
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 Og må jeg skrive det noe annerledes i hovedfilen (linken)..? Tidligere stod det der: ""<a href="http://www.mittdomene.no/mappe1/mappe2/download.php?fil=Navn.pdf" Lenke til kommentar
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 Hmmm... "PDF-filen finnes ikke...[/test/Navn.pdf]" Hva skal det stå i: $path_2_file_folder = ""; ..? Lenke til kommentar
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 Dersom kun $path_2_file_folder = ""; - så lar det meg laste ned *.php-fila. Dersom andre stier: $path_2_file_folder = "/test/"; - så "PDF-filen finnes ikke...[/test/Navn.pdf]" Lenke til kommentar
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 Dersom kun $path_2_file_folder = ""; - så lar det meg laste ned *.php-fila.Dersom andre stier: $path_2_file_folder = "/test/"; - så "PDF-filen finnes ikke...[/test/Navn.pdf]" Hvorfor finner den ikke filen min der da..? Lenke til kommentar
Kagee Skrevet 21. desember 2007 Del Skrevet 21. desember 2007 Har du et linuxsystem med ei mappe som heter /test? Hvis du ønsker å laste ned fra mappen test som ligger i samme mappe som php-scriptet (download.php) bruker du "test/" Lenke til kommentar
vargefaret Skrevet 21. desember 2007 Forfatter Del Skrevet 21. desember 2007 Filene mine ligger på en Linux-server på nettet, ja, men jeg får fremdeles ikke dette til å virke... Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå