如何从PHP下载URL中的多个文件?

时间:2010-08-17 16:28:16

标签: php curl file-get-contents

我有这个数组。

$urls = array(
'0'=>'http://www.domain.com/media1.mp3'
'1'=>'http://www.domain.com/media2.mp3'
'2'=>'http://www.domain.com/media3.mp3'
)

我想在PHP的帮助下同时下载这些文件。

我该怎么做?有什么建议吗?

我已尝试将标头放入for循环中,但它的作用是将所有文件的内容组合在一个大型mp3文件中。

这就是我的尝试:

foreach($urls as $url)
{
ob_start();
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=".basename($url));
header("Content-Type: audio/mpeg");
header("Content-Transfer-Encoding: binary");
print file_get_contents($url);
ob_clean();
ob_flush();
flush();
sleep(1);
}

由于 维沙尔

4 个答案:

答案 0 :(得分:1)

您要将每个文件下载到磁盘吗?以下是使用CURL实现这一目标的方法。

$path = '/path/to/download/directory';

foreach ($urls as $url)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    $fp = fopen($path . '/' . basename($url), 'w');

    // Set CURL to write to disk
    curl_setopt($ch, CURLOPT_FILE, $fp);

    // Execute download
    curl_exec ($ch);
    curl_close ($ch);

    fclose($fp);
}

答案 1 :(得分:1)

HTTP不直接支持在单个请求中下载多个文件。文档正文中没有提供MIME类型的dividors来显示一个文件的结束位置和另一个文件的开始位置。因此,所有单个文件都将被下载到header('Content-type: attachment....')调用的最后一个副本所指定的单个文件中。

您可以选择修改脚本以提供指向每个文件的链接,或者执行某种服务器端存档(.zip,.tar)并发送该文件而不是单个文件。

答案 2 :(得分:0)

结帐cURL

  

PHP支持libcurl,一个库   由Daniel Stenberg创建,那   允许您连接和沟通   到许多不同类型的服务器   有许多不同类型的   协议。 libcurl目前支持   http,https,ftp,gopher,telnet,   dict,file和ldap协议。   libcurl也支持HTTPS   证书,HTTP POST,HTTP PUT,FTP   上传(这也可以用   PHP的ftp扩展名),基于HTTP表单   上传,代理,cookies和   用户+密码验证。

您可以浏览the example并在for循环中使用类似的代码。

答案 3 :(得分:0)

您似乎并没有尝试下载文件,而是尝试为它们提供服务。我是对的吗?

Stephen Curran和Fernando之前提供的两个答案假设您正在尝试使用PHP进行下载,因此他们的解决方案无法使浏览器启动3个单独的下载。

我担心你不能使用PHP来做这件事,虽然你可能仍然需要它来强制浏览器下载文件而不是显示文件。您可能必须在客户端使用JavaScript来启动3个单独的连接。

一个想法是保留隐藏的< iframe>在网页上,然后使用JavaScript将每个指向一个MP3文件。我认为如果你的帧的名字是someframe1,someframe2和someframe3,你可以在JavaScript中这样做:

someframe1.location.href = 'path/to/one.mp3';
someframe2.location.href = 'path/to/two.mp3';
someframe3.location.href = 'path/to/three.mp3';

请记住,您仍然可能需要PHP来制作标题。

希望它有所帮助。

相关问题