2011-04-29 238 views
2

我尝试从FTP服务器下载文件到客户端。如果我使用ftp_get,则该文件被下载到PHP服务器,该服务器可以将输出写入浏览器。所以下载过程是FTP从服务器直接下载文件到客户端

FTP server -> PHP server -> client 

这使流量加倍 - 这在下载大文件时不好。有一种方法可以直接将文件写入浏览器,如下所示:Stream FTP download to output - 但数据流经PHP服务器,对吗?

有没有办法建立这个下载(如果是的话,怎么做?),还是原则上不可能?

FTP server -> client 

编辑:应该在安全的方式非匿名FTP服务器也工作。

+0

不,这不适用于受密码保护的服务器。用户将不得不直接连接到FTP服务器,为此他需要知道密码。 – deceze 2011-04-30 00:22:34

回答

1

请尝试下面的代码。

$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); 

谢谢。

+0

这在我看来是最好的解决方案,我会做一些测试。你可以指出我找到的原始源代码:http://stackoverflow.com/questions/1178425/download-a-file-from-ftp-using-curl-and-php – 2011-04-29 11:39:44

+0

yes.exactly .... thx。 – Chandresh 2011-04-29 11:52:27

2

如果客户端可以直接访问有问题的文件(即没有秘密的用户名或密码必要),只是他重定向到它:

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

这将导致客户端直接访问URL。您无法控制客户端将执行的操作。浏览器可能会只是开始下载文件,但它也可能启动FTP客户端或做其他事情,你可能会或可能不关心。

3

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

+0

+1更直接...:o) – deceze 2011-04-29 09:59:25

+1

确实很简单,但如果需要FTP登录名/密码,则不起作用。 – 2011-04-29 10:54:24

+0

如果登录名/密码是公开的,您可以使用'ftp:// login:password @ server/file.ext'语法 – Capsule 2011-04-29 10:58:37

相关问题