2010-10-13 64 views
2

远程服务器复制文件,我想使用PHP通过HTTP文件从一个链接复制这种格式使用PHP通过HTTP

http://myserver.com/?id=1234

,如果我打开链接,下载的文件开始的。 ..

所以我假设服务器重定向到一个.MP3文件开始下载。

那么如何复制/从远程服务器下载文件到我的服务器(本地主机)?

+0

你能告诉我们你如何试图实现这一目标? (code) – Claudiu 2010-10-13 16:58:29

回答

2

我假设这里说的远程服务器发送HTTP上的完整文件。您可以使用库(如curl)发送HTTP请求并将接收到的数据作为文件存储(使用CURLOPT_FILE)。

如果本地PHP服务器配置正确,你也可以用copy从远程URL复制到本地路径。

+0

你能否提供我使用这两种方法的例子? – sikas 2010-10-13 17:01:48

+1

对于第二种方法,我链接到的页面上有一个示例。我心情很好,所以我会提供一个直接的链接(http://fr.php.net/manual/en/function.copy.php#83955),但您可能需要处理您的文档技巧。 – 2010-10-13 17:04:04

6

只是为了戈夫什么维克多与卷曲tlking约一个例子:

$options = array(
    CURLOPT_FILE => '/local/path/for/file.mp3', 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_URL => 'http://myserver.com/?id=1234', 

); 

$ch = curl_init(); 
curl_setopt_array($ch, $options); 
curl_exec($ch); 
+0

正如我在你的例子中可以看到的,.mp3文件的路径被设置,但我不知道.mp3文件的网址! – sikas 2010-10-13 17:08:59

+0

多数民众赞成你想下载它的路径...你不需要知道远程服务器上的文件的路径,只要该url正在返回文件。 – prodigitalson 2010-10-13 17:09:57

+0

+1教我关于'curl_setopt_array()'!以前从未听说过它。 – chigley 2010-10-13 17:58:41

0

尝试使用通知回调(读此处MOR信息http://www.php.net/manual/function.stream-notification-callback.php

例如你可以到这一点,如果你想复制:

function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) 
{ 
    if($notification_code == STREAM_NOTIFY_PROGRESS) 
    { 
    // save $bytes_transferred and $bytes_max to file or database 
    } 
} 


$ctx = stream_context_create(); 
stream_context_set_params($ctx, array("notification" => "stream_notification_callback")); 
copy($remote_url,$Local_target,$ctx); 

另一个PHP文件可以读取保存$ bytes_transferred和$ bytes_max,并显示一个漂亮的进度条。