ホームページ > バックエンド開発 > PHPチュートリアル > ファイルパスを保護しながら、PHP で再開可能なダウンロードを実装するにはどうすればよいですか?

ファイルパスを保護しながら、PHP で再開可能なダウンロードを実装するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-26 11:50:10
オリジナル
858 人が閲覧しました

How Can I Implement Resumable Downloads in PHP While Protecting File Paths?

PHP スクリプトでの再開可能なダウンロード

ファイル パスを保護するために PHP スクリプトを介してファイルのダウンロードをトンネリングする場合、デフォルトのメソッドではサポートされていないことが明らかになります。再開可能なダウンロード。この問題に対処するには、次の解決策を検討してください。

再開可能なダウンロードをサポートする核心は、部分的なコンテンツ処理を実装することです。これを開始するには、すべての応答で Accept-Ranges: bytes ヘッダーを送信し、部分コンテンツのサポートを示します。

Range: bytes=x-y ヘッダーを持つリクエストを受信すると、クライアントによって指定された範囲を解析します。ファイルを開き、バイト x をシークし、要求された y ~ x バイトを送信します。さらに、応答ステータスを HTTP/1.0 206 Partial Content に設定します。

このアプローチに大まかに従う基本的な PHP コード スニペットを次に示します。

$filesize = filesize($file);

if (isset($_SERVER['HTTP_RANGE'])) {
    $partialContent = true;
    preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);

    $offset = intval($matches[1]);
    $length = intval($matches[2]) - $offset;
} else {
    $partialContent = false;
}

$file = fopen($file, 'r');
fseek($file, $offset);

$data = fread($file, $length);
fclose($file);

if ($partialContent) {
    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
}

header('Content-Type: ' . $ctype);
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Accept-Ranges: bytes');

print($data);
ログイン後にコピー

このメカニズムを組み込むことで、再開可能が有効になります。 PHP スクリプトをトンネリングに利用することで、ファイルの場所のプライバシーを維持しながらダウンロードします。

以上がファイルパスを保護しながら、PHP で再開可能なダウンロードを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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