Avatar billede fizk Nybegynder
11. januar 2005 - 22:16 Der er 9 kommentarer og
1 løsning

Hvordan virker download.php?fil=102 ?

Hej folkens, jeg har lige et spørgsmål, som en af jer forhåbentlig kan hjælpe mig med!

Jeg har ved flere lejligheder hentet div. ting fra sider, hvor linket så ud som download.php?fil=108, men hvordan i al verden er det mon blevet arrangeret? - Jeg har regnet mig frem til at det må have noget med en database at gøre, hvor der så bliver gjort et eller andet så man forwardes til filen, uden nogensinde at se den reelse placering (hvilket gør det svært at deep-linke), men længere har jeg ikke lige kunne gennemskue det!

Så hvis der er en af jer der har et godt forslag til hvordan og hvorledes det skal gøres, så lad mig endelig høre!!!
Avatar billede iss Novice
11. januar 2005 - 22:22 #1
Sådan, f.eks....

<?
include ('MySQL.inc');

$Handler = @mysql_connect($MySQLserver,$MySQLusername,$MySQLpassword);
@mysql_select_db($MySQLdatabase, $Handler);

if ($Row = @mysql_fetch_array(@mysql_query("SELECT * FROM MySQLtable WHERE Filename = '$File'"))) {
    $IP = $GLOBALS['REMOTE_ADDR'];
    $FIP = $GLOBALS['HTTP_X_FORWARDED_FOR'];
    if (($FIP != "") && ($FIP != "unknown")) $IP = $FIP;
    $IP = @explode(",", $IP);
    $IP = $IP[0];
    $Host = @gethostbyaddr($IP);
    $Date = @time();
    @mysql_query("UPDATE MySQLtable SET Hits = Hits+1, IP = '$IP', LastDown = '$Date', Host = '$Host' WHERE Filename = '$File'");
    header("Content-Disposition: filename=\"$File\"");
    header("Content-Type: $Row['ContentType']");
    if ($FileSize=@filesize($Row['Path'].$File)) header("Content-Length: $FileSize");
    header("Pragma: no-cache");
    header("Expires: 0");
    @readfile($Row['Path'].$File);
}
else {
    header("Location: http://domæne.dk/FileNotFound.php?File=$File");
}
?>
Avatar billede iss Novice
11. januar 2005 - 22:27 #2
Ved godt den laver lidt mere end du bad om:D

Her er så strukturen:
CREATE TABLE `Downloads` (
  `Program` varchar(100) NOT NULL default '',
  `Version` varchar(10) NOT NULL default '',
  `Author` varchar(50) NOT NULL default '',
  `Sample` varchar(70) NOT NULL default '',
  `Doc` varchar(70) NOT NULL default '',
  `Path` varchar(255) NOT NULL default '',
  `Filename` varchar(100) NOT NULL default '',
  `Hits` bigint(20) unsigned NOT NULL default '0',
  `LastDown` int(11) NOT NULL default '0',
  `IP` varchar(15) NOT NULL default '',
  `Host` varchar(100) NOT NULL default '',
  `ContentType` varchar(20) NOT NULL default '',
  `Des` text NOT NULL
) TYPE=MyISAM PACK_KEYS=1;

Og et data eksempel:
INSERT INTO `Downloads` VALUES ('Windows', '0.0001', 'Billy Gates', 'Sample/Windows', 'Sample/Windows.doc', '/usr/home/public_html/Files/', 'Windows0001.zip', 1, 1089109718, '80.80.80.80', 'kasper.domæne.dk', 'application/zip', 'The worst OS ever');
Avatar billede fizk Nybegynder
11. januar 2005 - 22:29 #3
Kan det passe at hele download'ningen sker i
header("Content-Disposition: filename=\"$File\"");
- så vidt jeg kan se er resten statistik over hvor brugeren er kommet fra og hvilket IP nummer han har, samt hvor mange gange filen er hentet!?
Avatar billede iss Novice
11. januar 2005 - 22:48 #4
Næsten:
include ('MySQL.inc');

$Handler = @mysql_connect($MySQLserver,$MySQLusername,$MySQLpassword);
@mysql_select_db($MySQLdatabase, $Handler);

if ($Row = @mysql_fetch_array(@mysql_query("SELECT * FROM MySQLtable WHERE Filename = '$File'"))) {
    header("Content-Disposition: filename=\"$File\"");
    header("Content-Type: $Row['ContentType']");
    if ($FileSize=@filesize($Row['Path'].$File)) header("Content-Length: $FileSize");
    header("Pragma: no-cache");
    header("Expires: 0");
    @readfile($Row['Path'].$File);
}
else {
    header("Location: http://domæne.dk/FileNotFound.php?File=$File");
}

Dette er hvad det kan skæres ned til.

PS skal lige siges det er et GAMMELT script, fra 2000/2001, så der skal nok laves noget om på det.
Avatar billede fizk Nybegynder
11. januar 2005 - 22:59 #5
Fint nok! - det ser ud til at virke, så jeg har bare lige et hurtigt bonus spørgsmål!
Kan de ikke lade sig gøre at echo'e et eller andet, så man kan gøre det lidt fancy? Jeg får kun blank skærm uden noget kode, selvom jeg laver body og alt det andet de skal til! :(
Avatar billede fizk Nybegynder
11. januar 2005 - 23:10 #6
Ok, nu har jeg løst den!!! - Tusind tak for hjælpen!!! :D
Avatar billede fizk Nybegynder
11. januar 2005 - 23:11 #7
(hov, mangler et svar ;) )
Avatar billede iss Novice
11. januar 2005 - 23:38 #8
For guds skyld, skal der ikke være nogle tomme linier osv! :D
Avatar billede fizk Nybegynder
11. januar 2005 - 23:40 #9
Næ, det er totalt overvurderet den slags :D
Avatar billede iss Novice
12. januar 2005 - 01:25 #10
Ikke nok med det, det laver en del mere lort end det er værd når man bruger header();D
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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