У меня есть этот массив.
$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);
}
Спасибо Вишал
Вы хотите загрузить каждый файл на диск? Вот как этого добиться с помощью 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);
}
Посмотрите cURL :
PHP поддерживает libcurl, библиотеку созданный Даниэлем Стенбергом, позволяет подключаться и общаться ко многим различным типам серверов с множеством разных типов протоколы. libcurl в настоящее время поддерживает http, https, ftp, gopher, telnet, dict, file и ldap протоколы. libcurl также поддерживает HTTPS сертификаты, HTTP POST, HTTP PUT, FTP загрузка (это также можно сделать с помощью PHP-расширение ftp), на основе HTTP-формы загрузка, прокси, файлы cookie и аутентификация пользователя + пароль.
Вы можете просмотреть пример и использовать аналогичный код внутри цикла for.
HTTP не поддерживает прямую загрузку нескольких файлов за один запрос. В теле документа нет разделителей типа MIME, показывающих, где заканчивается один файл и начинается другой. Таким образом, все ваши отдельные файлы будут загружены в один, как указано последней копией заголовка ('Content-type: attachment ....')
.
Вы можете изменить сценарий для предоставления ссылок на каждый отдельный файл или выполнить какое-то архивирование на стороне сервера (.zip, .tar) и отправить этот файл вместо отдельных.
Похоже, что вы не пытаетесь загрузить файлы, а скорее пытаетесь их обслужить. Я прав?
В двух предыдущих ответах Стивена Куррана и Фернандо предполагалось, что вы пытаетесь использовать PHP для загрузки, поэтому их решения не будут работать для того, чтобы заставить браузер инициировать 3 отдельные загрузки.
Боюсь, что вы не можете использовать PHP для этого, хотя он может понадобиться для заголовков, чтобы заставить браузер загрузить файлы, а не отображать их. Скорее всего, вам придется использовать JavaScript на стороне клиента, чтобы инициировать 3 отдельных соединения.
Одна из идей - держать на веб-странице скрытые
someframe1.location.href = 'path/to/one.mp3';
someframe2.location.href = 'path/to/two.mp3';
someframe3.location.href = 'path/to/three.mp3';
Имейте в виду, что вам, вероятно, понадобится PHP для создания заголовков.
Надеюсь, это поможет.