ホームページ > バックエンド開発 > PHPチュートリアル > マルチスレッド操作に PHP を使用することを考えたことはありますか?

マルチスレッド操作に PHP を使用することを考えたことはありますか?

WBOY
リリース: 2016-06-13 13:09:48
オリジナル
755 人が閲覧しました

マルチスレッド操作に 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 によって実装されるブレークポイント再開サービスは、大まかに次のとおりです

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>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート