2010-12-12 18 views
0

PHPで大きなファイルをダウンロードして再開できる単純なファイルダウンロードクライアントを実装する必要があります。ネイティブPHP関数を使用してPHPで大きなファイルをダウンロード/再開

大きなファイル(> 700 MB)をPHPでダウンロードしても、PHPメモリの上限が128Mになる方法はありますか?私はこれがファイルポインタに書き込むことと関係していると思います。ファイル処理機能を使用する手掛かりはありますか?とてもたくさんあります。私はfopen、flock、(fwrite、fgets、fread)、fcloseを推測しています。または、私はcURLを使うべきですか?

壊れたダウンロードを再開するにはどうすればよいですか?スクリプト実行タイムアウト、ユーザー停止スクリプト、リモートサーバータイムアウトなど?

答えて

2

これは、CURLOPT_FILECURLOPT_RESUME_FROMoptionsを設定することでcURLを使用して行う必要があります。 cURLがファイルを上書きするか、ファイルに追加するか、ファイルをメモリにバッファリングするか、ディスクに直接書き込むかどうかはわかりません。そこでいくつかのテストをしなければならないかもしれません。あなたは全体のプロセスをより細かく制御したい場合は

、あなたはからダウンロードしているサーバーへの生の接続を作成して書き込むと、通常のfreadfwrite機能を使用して、この接続から読み取るためにfsockopenを使用することができます。転送があるまでは、そのファイルにそれらを書いて、繰り返しfreadを使用して、いくつかのバイトを読み、その後再開するための転送-最も重要なRange headerを開始転送を-とする接続に正しいHTTPヘッダを(fwrite)を送信する必要があると思いますコンプリート。

0

問題はPHPではなく、ファイルの送信方法です。サーバー上のfopen()fread()などがありますが、クライアント側ではどのようにfopen()fwrite()でしょうか?標準のJavaScriptはブラウザ内から開いているファイルを、あなたはそれはしかし

まあ、HTML5、 it might be possible以来、...など(一口) Java applets、またはFlashコンポーネント(??)のような他の方法に依存しなければならないことはできませんまだ主要なブラウザでは完全に採用されていません。

+0

OPは、他のサーバーからファイルをダウンロードするためにPHPスクリプトを使用するように思えます。クライアントまたはJavascriptは関係ありません。 – deceze

+0

@deceze、あなたはそれをどう思いますか?何もそのような結論を意味するものではない –

+0

"大きなファイルをダウンロードできるPHPで単純な**ファイルダウンロードクライアント**を実装する" - PHP *ダウンロード*のファイルではなく、* – deceze

関連する問題