webForumDet fria alternativet

Spara fil från FTP

Webbutveckling

4 svar · 703 visningar · startad av zlasher

Medlem sedan okt. 2001157 inlägg
Frågan#1

Hej!

Har letat lääänge nu utan att finna något bra svar.
Jag har skapat ett administrationsverktyg där användare som loggar in ska kunna ladda ner filer från en FTP-server. FTP-servern är min egen och jag vill att användare ska kunna klicka på filer och ladda ner dem utan att behöva skriva in något användarnamn eller lösenord.

Jag testade ftp_get-funktionen i PHP men då loggar scriptet in, hämtar filen och sparar den lokalt utan att användaren kan välja var den ska sparas.

Hur gör jag för att användaren ska kunna spara filer var de vill på sin dator?

Sorry om det här har blivit besvarat; har letat på webforum så gott jag kan utan att finna något tillfredsställande svar.

Tack tack!

Medlem sedan juni 20008 205 inlägg
#2

Efter att du laddat ner filen lokalt på webbservern kan du använda t.ex. readfile för att skicka vidare den till klienten (se till att ange vettiga headers först, som content-type och content-disposition). Typ...

<?php
$tempfile = tempnam(sys_get_temp_dir(), 'ftp');
[I]... ladda ner filen från FTP till $tempfile...[/I]
header('Content-Type: application/octet-stream'); // eller någon annan vettig innehållstyp
header('Content-Disposition: attachment'); // spara istället för att öppna i webbläsare
readfile($tempfile);
unlink($tempfile);
?>

Kom dock ihåg att det här är rätt krävande för bandbredden - du använder dubbelt så mycket bandbredd som den nedladdade filen är stor. Vill du åtgärda det får du antingen mellanlagra filerna på webbservern (alt. spegla FTP-servern på en katalog där), eller så får du tillåta anonym inloggning på din FTP.

Medlem sedan okt. 2001157 inlägg
#3

Det där löste ju nästan allt! Tack så mkt! :)

Ett problem återstår dock...
Namnet på filen som ska laddas ner blir namnet på sidan som kör scriptet. Går det att döpa om filen på något sätt? Jag testade att köra rename innan readfile men det hjälpte inte...

Koden jag kör är:

$filename = 'bilder.doc';

$conn_id = ftp_connect("*****");

$login_result = ftp_login($conn_id, "****", "******");

$tempfile = tempnam(sys_get_temp_dir(), 'ftp');

ftp_get($conn_id, $tempfile, $filename, FTP_BINARY);

header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment'); 

readfile($tempfile);
unlink($tempfile);
Medlem sedan juni 200032 967 inlägg
#4

Vad tror du om en filename-header?

http://se2.php.net/header

Medlem sedan okt. 2001157 inlägg
#5

Tack @nders. Du hann skicka ditt innan mig... :)

Aahh!
Sökte lite på

header('Content-Disposition: attachment');

och såg att man kunde lägga till ;filename="filnamn.ext" vilket löser allt!
Tack så mkt! Återkommer om jag skulle köra fast igen... :)

262 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)