Avatar billede kgp43 Nybegynder
22. maj 2005 - 15:07 Der er 8 kommentarer og
1 løsning

Download file placeret udenfor public_html på anden server

Hejsa,

Jeg bruger denne kode til at downloade en file placeret udenfor public_html på server1. Hvordan får jeg denne kode til at downloade en fil placeret udenfor publichtml på en anden server (server2)? Er det muligt at connecte til server IP med FTP og få det til at arbejde samme med denne kode?

$filename = "/home/username/download/file.zip";
header("Content-Type: application/octet-stream");
$save = basename($filename);
header("Content-Disposition: attachment; filename=\"$save\"");
readfile($filename);
Avatar billede barklund Nybegynder
22. maj 2005 - 15:20 #1
Det kan du vel sagtens. Kig på FTP-funktionerne[1] i manualen - der kan du ret let hente en fil. Se eksemplet på manual-siden om ftp_get[2]. Med dette øverst i din fil kan du først lave den remote fil til en lokal fil (for eksempel bare placeret midlertidigt i /tmp/) og sende brugeren denne fil.

[1] http://dk2.php.net/ftp
[2] http://dk2.php.net/manual/en/function.ftp-get.php

--
Morten Barklund
Avatar billede ranglen Nybegynder
22. maj 2005 - 15:24 #2
Eller som et alternativ, kunne du også placere et script til download af filer udenfor publichtml på server2.
Avatar billede kgp43 Nybegynder
22. maj 2005 - 15:34 #3
barklund: Det betyder at server1 skal downloade alle filer inden brugeren kan hente dem. Hvilken vil betyde at den kommer meget over de tilladte 1200GB/md.

ranglen: Det har jeg også overvejet, men gik fra denne metode, da jeg ikke viste hvordan sikkeheden skulle håndteres.

På server1 sætter jeg en session, for at sikre mig at brugeren kommer fra den korrekte side. Hvis jeg laver en php side på server2 (med koden ovenfor), vil det så være muligt at overfører session'en, så jeg er sikker på at brugeren kommer fra den korrekte side (og ikke hotlinker/direct linker)?
Avatar billede barklund Nybegynder
22. maj 2005 - 15:57 #4
Nu ved jeg jo ikke hvilke eller hvor mange filer det drejer sig om. Men hvis det er de samme få filer, så kan du jo hente dem første gang og lægge dem lokalt på server1 til næste gang nogen beder om den samme fil.
Avatar billede ranglen Nybegynder
22. maj 2005 - 16:14 #5
Måske noget i denne stil.. På server1 lægger du et script som bekræfter om et fil kan downloads ellers ej. Dette script kaldes fra server2, når en bruger forsøger at hente en fil.

-- download-script på server2
-- link: download.php?sid=xxx&file=enfil
-- sid er session id på brugeren (fra server1)

<?php
$file = isset($_GET['file']) ? $_GET['file'] : "";
$sid = isset($_GET['sid']) ? $_GET['sid'] : "";

// bekæft fra hovedserver, at filen kan downloades
@$fh = fopen("http://server1/verifydownload.php?sid=$sid&file=$file", "r") or die("error");
$result = "";
do{
    $buf = fread($fh, 512);
    $result .= $buf;
}while(strlen($buf));
fclose($fh);

// hent fil, hvis der bliver returneret "true"
if($result == "true"){
    echo "okay";
}else{
    echo "du har ikke adgang til denne fil";
}
?>


-- på server1 placeres verifydownload.php:

<?php
$sid = isset($_GET['sid']) ? $_GET['sid'] : "";

if($sid == ""){
    // ingen sid angivet
    exit("false");
}

// skift til den angivne session
session_id($sid);
session_start();

// har brugeren adgang til filen?
//    "true": ja
//    "false": nej
if(isset($_SESSION['auth']) && $_SESSION['auth'] == 'user'){
    echo "true";
}else{
    echo "false";
}
?>
Avatar billede kgp43 Nybegynder
22. maj 2005 - 18:08 #6
barklund: Har +1500 filer liggende (~10GB)
ranglen: Den må jeg lige teste - vender tilbage senere
Avatar billede kgp43 Nybegynder
02. juni 2005 - 01:49 #7
ranglen: brugte noget lignende.
lig et svar så er der point :)
Avatar billede kgp43 Nybegynder
11. juni 2005 - 03:03 #8
venter...
Avatar billede kgp43 Nybegynder
12. september 2005 - 12:00 #9
lukker
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