0

ローカル サーバーまたはリモート サーバーにあるファイルをユーザーがダウンロードできるようにするダウンロード スクリプトを作成しています。どちらの場合も、ユーザーに元のファイルの場所を見つけてほしくありません。

私のファイルが私のサーバー上にある場合、それは簡単です:

$data = file_get_contents('/local/path');
$name = 'myphoto';
force_download($name, $data); //codeigniter

ただし、リモートファイルの場合、これを行うと:

$data = file_get_contents('/remote/path');
$name = 'myphoto';
force_download($name, $data);

最初にサーバーにダウンロードされるため、ユーザーのダウンロードが遅れます。

サーバーを介して何らかのファイルをユーザーにストリーミングする方法はありますか? それで、すぐにダウンロードが始まりますか?可能?

4

1 に答える 1

4

fpassthruを見てください:それはあなたが持っているものより少し多くかかるでしょう、しかしそれはあなたが望むことをするべきです。

次のようなものが必要になります。

    $fp = fopen('/remote/path');

    // you can't use force_download($name, $data): you'll need to set the headers 
appropriately by hand: see the code for the download_helper, but you'll need to set the mime type and content-length if you really care.

    header('Content-Type: "'.$mime.'"');
                        header('Content-Disposition: attachment;filename="myphoto"');
                        header("Content-Transfer-Encoding: binary");
                        header('Expires: 0');
                        header('Pragma: no-cache');
                        header("Content-Length: ".strlen($data));
    fpassthru($fp);
于 2012-09-01T13:26:24.623 に答える