マルチスレッド操作に PHP を使用することを検討したことがありますか?
最近、ダウンロード クラスのリモート ダウンロード ファイルが改良され、ファイルの内容をセクションごとに読み込んで最終的に結合できるかどうかを検討してください。テスト後は動作します~これは私がテストしたローカル ファイルです~
私が望むのは、ローカル ファイルまたはリモート ファイルをパッケージ化して操作する最も簡単な方法です。
/ /PHP を参照してください。ここではファイルを 2 つのセグメントに分割しているだけです。実際には、ファイル サイズは所定のセグメント サイズに従って分割できます。
$file = dirname(__FILE__).'/bullyframework_zend.7z';
echo filesize($file);
$handle = fopen($file, "rb");
$contents = fread($handle, ceil(filesize( $file)) /2)); //ファイルの組み合わせを 2 回読み取ります
$now_tell = ftell($handle) //現在のポインターを取得します
$end = fread($handle) , filesize( $file) - $now_tell); // 現在のポインターから残りのファイルを読み取ります
fclose($handle);
file_put_contents('test.7z', $contents. $end) ; //ファイルが完了したかどうかを確認するためにファイルを書き込みます
echo "
";
echo filesize('test.7z');
? >
-----解決策---------
ダウンロードをブロックするには、双方が「再開可能なダウンロード」をサポートする必要があります
一般的なダウンロード ツールはこれをサポートしているため、サーバー側で行う必要があります。 PHP によって実装されるブレークポイント再開サービスは、大まかに次のとおりです
// ヘッダーの書き込みを開始します header("キャッシュ制御:"); header("キャッシュ制御: public"); header("Content-Type: $ctype"); $filespaces = str_replace("_", " ", $filename); // ファイル名にアンダースコアが含まれている場合は、スペースに置き換えます $header='Content-Disposition: 添付ファイル名='.$filespaces; ヘッダー($ヘッダー); header("Accept-Range: バイト"); $size = ファイルサイズ($file); // http_range がブラウザ (またはダウンロード マネージャー) によって送信されたかどうかを確認します if(isset($_SERVER['HTTP_RANGE'])) { // 「はい」の場合、不足している部分をダウンロードします $seek_range = substr($_SERVER['HTTP_RANGE'] , 6); $range =explode( '-', $seek_range); if($range[0] > 0) { $seek_start = intval($range[0]); } if($range[1] > 0) { $seek_end = intval($range[1]); } header("HTTP/1.1 206 部分コンテンツ"); header("Content-Length: " . ($seek_end - $seek_start + 1)); header("Content-Range: バイト $seek_start-$seek_end/$size"); } それ以外 { header("Content-Range: バイト 0-$seek_end/$size"); header("Content-Length: $size"); } // ファイルを開きます $fp = fopen("$file","rb"); //欠落部分の先頭を探す fseek($fp,$seek_start); // バッファリングされたダウンロードを開始します $n = 0; while(!feof($fp)) { //大きなファイルの制限時間をリセットします エコー fread($fp,1024*$speed); } fclose($fp); 終了;<div class="clear"></div>