2

私はこの配列を持っています。

$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ループに入れてみましたが、すべてのファイルのコンテンツを1つの大きな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

4

4 に答える 4

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);
}
于 2010-08-17T16:51:45.723 に答える
1

ファイルをダウンロードしようとしているのではなく、ファイルを提供しようとしているようです。私は正しいですか?

Stephen CurranとFernandoによって以前に提供された2つの回答は、PHPを使用してダウンロードしようとしていることを前提としているため、ブラウザーに3つの個別のダウンロードを開始させるためのソリューションは機能しません。

PHPを使用してこれを行うことはできませんが、ヘッダーでファイルを表示する代わりにダウンロードするように強制するためにPHPが必要になる場合があります。3つの個別の接続を開始するには、おそらくクライアント側でJavaScriptを使用する必要があります。

1つのアイデアは、Webページに非表示の<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が必要になることを覚えておいてください。

それが役に立てば幸い。

于 2010-08-17T17:13:47.823 に答える
1

HTTP は、単一の要求で複数のファイルをダウンロードすることを直接サポートしていません。あるファイルがどこで終了し、別のファイルが開始するかを示す MIME タイプの区切り記号が文書本体に用意されていません。そのため、個々のファイルはすべて、呼び出しの最後のコピーで指定された 1 つのファイルにダウンロードされheader('Content-type: attachment....')ます。

オプションは、スクリプトを変更して個々のファイルへのリンクを提供するか、ある種のサーバー側アーカイブ (.zip、.tar) を実行して、個々のファイルの代わりにそのファイルを送信することです。

于 2010-08-17T18:01:36.257 に答える
0

cURLをチェックしてください:

PHP は、Daniel Stenberg によって作成されたライブラリである libcurl をサポートしています。これにより、さまざまな種類のプロトコルを持つさまざまな種類のサーバーに接続して通信することができます。libcurl は現在、http、https、ftp、gopher、telnet、dict、file、および ldap プロトコルをサポートしています。libcurl は、HTTPS 証明書、HTTP POST、HTTP PUT、FTP アップロード (これは PHP の ftp 拡張機能でも実行できます)、HTTP フォーム ベースのアップロード、プロキシ、Cookie、およびユーザー + パスワード認証もサポートしています。

を見て、for ループ内で同様のコードを使用できます。

于 2010-08-17T16:32:29.353 に答える