4

わかりました、私はあなたが私を解決するのを手伝ってくれることを願っています。

非常に大きなビデオ ファイルを格納するサーバーを実行しており、最大 650 MB のものもあります。ユーザーがこのページをリクエストして、ファイルを自分のマシンにダウンロードできるようにする必要があります。私はすべてを試しましたが、終了する前に単純な readfile() リクエストが約 90 秒間ハングし、「No data received error 324 code」というメッセージが表示されます。 、PHP ソリューションを介した FTP は、ファイルを取得しようとしたときにエラーが発生するだけでした。私が見つけた唯一の cURL ソリューションは、サーバー上に別のファイルを作成するだけでした。それは私が必要とするものではありません。

明確にするために、ユーザーがサーバーではなく自分のコンピューターファイルをダウンロードできるようにする必要があります。

このコードがゴミなのか、それとも 1 つか 2 つの調整が必要なだけなのかはわかりませんが、助けていただければ幸いです。

<?php

$fn = $_GET["fn"];

echo $fn."<br/>";

$url  = $fn;
$path = "dl".$fn;

$fp = fopen($path, 'w');

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);

$data = curl_exec($ch);

curl_close($ch);
fclose($fp);

?>
4

3 に答える 3

4

PHP やその他のスクリプト テクノロジを使用して大きなバイナリ ファイルを提供することはお勧めしません。彼らはこれを設計することは決してありません.apache、nginx、またはバックエンドにある標準のhttpサーバーを使用できます。それでも PHP を使用する必要がある場合は、おそらく readfile_chunked を確認する必要があります。

http://php.net/readfile#48683 とここに素晴らしいチュートリアルがあります。 http://teddy.fr/blog/how-serve-big-files-through-php

幸運を。

于 2012-06-09T04:19:11.890 に答える
0

発生する可能性のある2つの問題があります。

  • まず、Webサーバーがタイムアウトによって接続を閉じている可能性があります。Webサーバーの構成を確認する必要があります。
  • 2番目:curlでタイムアウトします。この投稿を見ることをお勧めします。
于 2012-06-09T04:42:20.563 に答える
0

readfile() はバッファリングしません。ただし、php 自体がバッファリングする可能性があります。バッファリングをオフにする

while (ob_get_level())
    ob_end_clean();
readfile($file);

Web サーバーがバッファリングする場合があります。それもオフにします。どのように行うかは、Web サーバーとそのバッファリングの理由によって異なります。

于 2012-06-09T04:25:22.340 に答える