Avatar billede elav Nybegynder
27. oktober 2006 - 19:34 Der er 8 kommentarer og
2 løsninger

Download af fil gennem php-script

Hejsa,

Jeg har nogle filer liggende på en ekstern server, og vil gerne logge hvor meget de downloades!

Da jeg ikke har kontrol over selve serveren (et webhotel), bliver jeg nød til at styre det gennem et script.

Hvordan gøres det nemmest/bedst/effektivt?

Sekundært: Kan jeg tvinge folk til at hente filen gennem scriptet? (så de ikke blot kan hente filen på normal vis, hvis de kender stien)
Avatar billede udvikler Nybegynder
27. oktober 2006 - 20:05 #1
gør sådan at når man klikker på linket så bliver man sendt til fx: www.sidenavn.dk/download.php?id=12&doing=dwl

også laver du bare et tjek på om doing indeholder "dwl" og hvis den gør det så må man downloade ellers kommer der en fejl meddelelse :-)
Avatar billede coderdk Praktikant
27. oktober 2006 - 20:15 #2
Her er et eksempel:

<?php

    // Ændr denne, husk / i slutningen!
    define( "DOWNLOAD_FOLDER", "/home/brugernavn/downloadfiler/" );
   
    $file = ( !empty( $_GET['file'] ) ? DOWNLOAD_FOLDER . basename( $_GET['file'] ) : '' );

    header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
    header( "Last-Modified: " . gmdate( "D,  d M Y H:i:s" ) . " GMT" );
    header( "Cache-Control: no-store,  no-cache,  must-revalidate" );
    header( "Cache-Control: post-check=0,  pre-check=0",  false );
    header( "Pragma: no-cache" );

    if ( !file_exists( DOWNLOAD_FOLDER . $file ) )
    {
        die( "The file does not exist." );
    }

    header( 'Content-Disposition: inline; filename="' . basename( $file ) . '"' );
    header( 'Content-Type: application/octet-stream' );
    header( 'Content-Length: ' filesize( $file ) );
   
    readfile( $file );
    exit;

?>

Kaldes med: script.php?file=en_fil.zip
Avatar billede udvikler Nybegynder
27. oktober 2006 - 20:21 #3
har først nu kigget helt på min besked, der er en lille fejl, har glemt at forklare hvad du skal hvis det virker.. fortsætter her:

hvis man godt må downloade den så skal du ved slutningen opdatere et felt i databasen som indeholder antal downloads..

sværer er det ikke ;-)
Avatar billede elav Nybegynder
27. oktober 2006 - 21:28 #4
Jeg får dette:

Parse error: syntax error, unexpected T_STRING in /hsphere/local/home/dallerwe/dallerweb.dk/ubuntu/dl.php on line 21

Som refererer til:   

header( 'Content-Length: ' filesize( $file ) );

Jeg har blot kopieret indholdet!
Avatar billede elav Nybegynder
27. oktober 2006 - 21:31 #5
Hvis jeg kommenterer den linje, får jeg blot at filen ikke eksisterer.

Er der noget galt her:

define( "DOWNLOAD_FOLDER", "http://dallerweb.dk/ubuntu/UNKNOWN_FOLDER/" );

Og dermed burde kørslen af dette virke?

http://dallerweb.dk/ubuntu/dl.php?file=wizardpen_drv.so

Stien til filen er:

http://dallerweb.dk/ubuntu/UNKNOWN_FOLDER/wizardpen_drv.so
Avatar billede elav Nybegynder
27. oktober 2006 - 22:02 #6
Hvis jeg annulerer tjekket af om filen eksisterer, så fungerer det!

På nær en ting, kommandoen:

wget http://dallerweb.dk/ubuntu/dl.php?file=wizardpen_drv.so

Henter filen fint, men kalder den: "dl.php?file=wizardpen_drv.so"

Kan det fikses?
Avatar billede coderdk Praktikant
27. oktober 2006 - 23:11 #7
http://dallerweb.dk/ubuntu/UNKNOWN_FOLDER/ er forkert, det skal være filens fysiske sti... Prøv at lave et script med indholdet:

<?php echo dirname(realpath(".")); ?>

Så har du den fysiske sti til scriptet. DOWNLOAD_FOLDER skal ligne den...
Avatar billede coderdk Praktikant
27. oktober 2006 - 23:12 #8
Og den fjel, var min skyld :)

header( 'Content-Length: ' filesize( $file ) );

skal være:

header( 'Content-Length: ' . filesize( $file ) );
Avatar billede elav Nybegynder
31. oktober 2006 - 23:50 #9
Ser fint ud...

Point?
Avatar billede coderdk Praktikant
31. oktober 2006 - 23:54 #10
Ok :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester