我有这个数组。
$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);
}
由于 维沙尔
答案 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来制作标题。
希望它有所帮助。