如何在PHP中从URL下载多个文件?
我有这个数组如何在PHP中从URL下载多个文件?,php,curl,file-get-contents,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的帮助下同时下载这些文件 我该怎么做?有什么建议吗 我曾尝试过将标题放入循环中,但它所做的是将所有文件的内容合并到一个大的mp3文件中 这就是我所尝试的: foreach($url
$urls = array(
'0'=>'http://www.domain.com/media1.mp3'
'1'=>'http://www.domain.com/media2.mp3'
'2'=>'http://www.domain.com/media3.mp3'
)
我想在PHP的帮助下同时下载这些文件
我该怎么做?有什么建议吗
我曾尝试过将标题放入循环中,但它所做的是将所有文件的内容合并到一个大的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);
}
谢谢
Vishal退房:
PHP支持libcurl,一个库
由Daniel Stenberg创作的
允许您连接和通信
到许多不同类型的服务器
有许多不同类型的
协议。libcurl目前支持
http、https、ftp、gopher、telnet、,
dict、文件和ldap协议。
libcurl还支持HTTPS
证书、HTTP POST、HTTP PUT、FTP
上载(这也可以通过
PHP的ftp扩展),基于HTTP表单
上传、代理、cookie和
用户+密码身份验证
您可以在for循环中使用类似的代码。是否要将每个文件下载到磁盘?下面是使用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);
}
看起来你不是想下载文件,而是想为它们服务。我说得对吗 Stephen Curran和Fernando之前提供的两个答案假设您正在尝试使用PHP进行下载,因此他们的解决方案无法使浏览器启动3个单独的下载 我担心您不能使用PHP来实现这一点,尽管您可能仍然需要它作为标题来强制浏览器下载文件,而不是显示它们。您可能需要在客户端使用JavaScript来启动3个独立的连接 一个想法是在网页上隐藏一个文件,然后使用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来制作标题
希望有帮助。HTTP不支持在一个请求中直接下载多个文件。文档正文中没有提供MIME类型dividor来显示一个文件的结束位置和另一个文件的开始位置。因此,您的所有单个文件都将下载到一个单独的文件中,如
标题('Content-type:attachment…')
调用的最后一个副本所指定
您可以选择修改脚本以提供指向每个文件的链接,或者执行某种服务器端存档(.zip、.tar)并发送该文件而不是单个文件。我也尝试了cURL!它不起作用。我也试过这个例子。但是没有快乐!它只是在浏览器上打印所有内容!并表示fopen的许可被拒绝。当我们做fopen时,它将在哪里写入文件?我尝试了我的c:/windows文件夹,但它不工作:(它会将文件写入当前工作目录。在您的情况下,最好指定目录的绝对路径,并确保PHP具有写入此目录的权限。我将修改我的示例以反映这一点。我很困惑。您是尝试下载文件还是提供文件(或两者兼而有之)?嗨,Helgi,谢谢你的回复。我真的想在我的电脑上下载这些文件。你的解决方案在那里也能用吗?哇,我很困惑。如果你想下载文件,为什么你要发送标题并打印出文件的内容?而我怎么下载呢?我的印象是我们需要更改标题来下载文件例如,如果我想下载CSV文件,如果我更改了文件头,它将立即开始下载文件。我确实有指向每个文件的链接。可以这样做吗?它已经在数组中。要压缩所有文件,我仍然需要获取每个文件的内容并将其写入服务器,然后压缩这些文件d下载它。。。。