3
votes

I try to download a file from FTP server into client. If I use ftp_get, the file is downloaded into PHP server, which can write the output into browser. So the download process is

FTP server -> PHP server -> client

This doubles traffic - this is bad in downloading big files. There is a way how to write the file directly into the browser described here: Stream FTP download to output - but the data flows through PHP server anyway, am I right?

Is there any way how to establish this download (if yes, how?), or is it principially impossible?

FTP server -> client

Edit: it should work also with non-anonymous FTP servers in secure way.

3
No, this won't work with password protected servers. The user will have to directly connect to the FTP server, for which he'll need to know the password.deceze♦

3 Answers

1
votes

try below code for that.

$curl = curl_init();
$file = fopen("ls-lR.gz", 'w');
curl_setopt($curl, CURLOPT_URL, "ftp://ftp.sunet.se/ls-lR.gz"); #input
curl_setopt($curl, CURLOPT_FILE, $file); #output
curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_exec($curl);

Thanks.

3
votes

<a href="ftp://server/file.ext">Download the file</a> ;-)

2
votes

If the client can directly access the file in question (i.e. no secret usernames or passwords necessary), just redirect him to it:

header('Location: ftp://example.com/foobar');

This will cause the client to access the URL directly. You can't control what the client will do though. The browser may simply start to download the file, but it may also launch an FTP client or do other things which you may or may not care about.