ホームページ バックエンド開発 PHPチュートリアル PHPでファイルをダウンロードする

PHPでファイルをダウンロードする

May 24, 2023 am 09:11 AM
ドキュメントをダウンロード phpのダウンロードファイル ネットワークファイル転送

Web サイトやアプリケーションを開発する場合、ファイルのダウンロード機能を実装する必要があることがよくありますが、これは PHP を使用して簡単に実装できます。この記事ではPHPを使ってファイルダウンロード機能を実装する方法を紹介します。

1. ファイルのダウンロード プロセス

ファイルをダウンロードする前に、ダウンロード プロセスを理解する必要があります:

  1. ユーザーは Web ページ上のダウンロード ボタンをクリックするか、アプリケーション;
  2. サーバーはダウンロード要求を受け入れます;
  3. サーバーはユーザーの権限とファイルの存在を確認します;
  4. サーバーはユーザーにファイルを送信します;
  5. ユーザーはファイルを受け取り、保存します。

2. ファイルのダウンロードの準備

PHP では、readfile 関数を使用してファイルの内容を読み取り、ブラウザに出力できます。ただし、ファイルが存在することを確認する必要があります。存在しないと例外がスローされます。以下は簡単なコード例です:

$file_path = '/path/to/your/file/yourfile.extension';
if (file_exists($file_path))
{
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file_path));
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file_path));
    readfile($file_path);
    exit;
}
else
{
    die('File not found.');
}
ログイン後にコピー

上記のコードでは、最初に file_exists 関数を使用してファイルが存在するかどうかを確認します。ファイルが存在する場合は、HTTP ヘッダー ファイルを設定して、ファイルがあることをブラウザに伝えます。をダウンロードしようとしており、Content の -Disposition にファイル名を指定し、Content-Type にファイルの種類を指定して、readfile 関数を使用してファイルの内容を出力します。

3. ファイルのダウンロードがリンクの盗用を防ぐ

ブラウザの性質上、一部の悪質なサイトがファイルを盗む可能性があるため、ファイルのダウンロードがリンクの盗用を防ぐ必要があります。

次のコードを追加して、ファイルのダウンロードが盗まれるのを防ぐことができます:

$referer = $_SERVER['HTTP_REFERER'];
if ($referer && !preg_match('/^https?://' . $_SERVER['SERVER_NAME'] . '/', $referer))
{
    header("HTTP/1.1 403 Forbidden");
    die("Access denied.");
}
ログイン後にコピー

このコードは、HTTP_REFERER ヘッダー情報をチェックし、それが現在のサーバーのドメイン名と一致することを確認します。一致しない場合は、403 ステータス コードが返され、アクセスが禁止されます。

4. 分割ダウンロードの実装

大きなファイルをダウンロードする場合、ダウンロード速度を向上させ、ネットワーク帯域幅の使用量を削減するために、分割ダウンロード機能を実装する必要がある場合があります。 HTTP 1.1 の Range ヘッダー情報を利用すると、セグメント化されたダウンロードを簡単に実装できます。

以下はサンプルコードです:

$file_path = '/path/to/your/file/yourfile.extension';
if (file_exists($file_path))
{
    $size = filesize($file_path);
    $start = 0;
    $end = $size - 1;
    
    if (isset($_SERVER['HTTP_RANGE']))
    {
        if (preg_match('/bytes=h*(d+)-(d*)[D.*]?/i', $_SERVER['HTTP_RANGE'], $matches))
        {
            $start = intval($matches[1]);
            if (!empty($matches[2]))
            {
                $end = intval($matches[2]);
            }
        }
    }
    if ($start > $end || $end > $size - 1 || $start < 0)
    {
        header('HTTP/1.1 416 Requested Range Not Satisfiable');
        header("Content-Range: bytes $start-$end/$size");
        exit;
    }
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file_path));
    header('Content-Transfer-Encoding: binary');
    header("Content-Range: bytes $start-$end/$size");
    header('Accept-Ranges: bytes');
    header('Content-Length: ' . ($end - $start + 1));
    header("Cache-control: private");
    header('Pragma: private');
    header('Expires: ' . gmdate('D, d M Y H:i:s T', time() + 3600));
    
    $fp = fopen($file_path, 'rb');
    fseek($fp, $start);
    $buffer_size = 1024 * 8; //每次读取8 KB
    $bytes_send = 0;
    while (!feof($fp) && ($bytes_send < $end - $start + 1))
    {
        $buffer = fread($fp, $buffer_size);
        echo $buffer;
        flush();
        $bytes_send += strlen($buffer);
    }
    fclose($fp);
    exit;
}
else
{
    die('File not found.');
}
ログイン後にコピー

上記コードでは、まずHTTP_RANGEヘッダ情報を確認し、ヘッダ情報が存在しない場合はファイル全体を出力します。ヘッダー情報が存在する場合、開始オフセットと終了オフセットが解析され、fseek 関数を使用してファイル ポインターが特定され、fread 関数を使用してファイルの内容が読み取られてブラウザに出力されます。

5. 結論

PHP でファイルのダウンロード機能を実装することは、ファイルが存在するかどうかを確認し、正しい HTTP ヘッダー情報を設定するだけであり、それほど難しいことではありません。 HTTP 1.1 Range ヘッダー情報を使用すると、分割されたダウンロードを簡単に実現でき、盗まれたリンクからのファイルのダウンロードを防ぐことで、ファイルのセキュリティを保護できます。したがって、より良いユーザーエクスペリエンスを実現するために、ニーズに応じて必要な機能を実装することを選択できます。

以上がPHPでファイルをダウンロードするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ファイルをダウンロードした後にPythonで開く操作 ファイルをダウンロードした後にPythonで開く操作 Apr 03, 2024 pm 03:39 PM

Python には、ダウンロードしたファイルを開くための次のオプションが用意されています。 open() 関数: 指定されたパスとモード (「r」、「w」、「a」など) を使用してファイルを開きます。リクエスト ライブラリ: download() メソッドを使用して、名前を自動的に割り当て、ファイルを直接開きます。 Pathlib ライブラリ: write_bytes() メソッドと read_text() メソッドを使用して、ファイルの内容を読み書きします。

Workerman ドキュメントにファイルのアップロードとダウンロードを実装する Workerman ドキュメントにファイルのアップロードとダウンロードを実装する Nov 08, 2023 pm 06:02 PM

Workerman ドキュメントでファイルのアップロードとダウンロードを実装するには、特定のコード サンプルが必要です はじめに: Workerman は、シンプル、効率的、使いやすい高性能 PHP 非同期ネットワーク通信フレームワークです。実際の開発では、ファイルのアップロードとダウンロードが一般的な機能要件となりますが、この記事では、Workerman フレームワークを使用してファイルのアップロードとダウンロードを実装する方法と、具体的なコード例を紹介します。 1. ファイル アップロード: ファイル アップロードとは、ローカル コンピューター上のファイルをサーバーに転送する操作を指します。以下が使用されます

PHP 関数を使用して、電子メールの送受信用の添付ファイルをアップロードおよびダウンロードするにはどうすればよいですか? PHP 関数を使用して、電子メールの送受信用の添付ファイルをアップロードおよびダウンロードするにはどうすればよいですか? Jul 25, 2023 pm 08:17 PM

PHP 関数を使用して、電子メールの送受信用の添付ファイルをアップロードおよびダウンロードするにはどうすればよいですか?現代の通信技術の急速な発展に伴い、電子メールは人々が日常生活で情報を伝達および伝達するための重要な手段となっています。 Web 開発では、添付ファイル付きの電子メールを送受信する必要がよく発生します。 PHP は強力なサーバー側スクリプト言語として、電子メール処理プロセスを簡素化できる豊富な関数とクラス ライブラリを提供します。この記事では、PHPの関数を使ってメール送受信時の添付ファイルをアップロード・ダウンロードする方法を紹介します。電子メールが最初に送信されます。

Laravelを使用してファイルのアップロードおよびダウンロード機能を実装する方法 Laravelを使用してファイルのアップロードおよびダウンロード機能を実装する方法 Nov 02, 2023 pm 04:36 PM

Laravel を使用してファイルのアップロードおよびダウンロード機能を実装する方法 Laravel は、Web アプリケーションの開発をより簡単かつ効率的にするための豊富な機能とツールを提供する人気のある PHP Web フレームワークです。よく使用される機能の 1 つは、ファイルのアップロードとダウンロードです。この記事では、Laravelを使用してファイルのアップロードおよびダウンロード機能を実装する方法と、具体的なコード例を紹介します。ファイルのアップロード ファイルのアップロードとは、ローカル ファイルを保存するためにサーバーにアップロードすることを指します。 Laravelではファイルアップロードを使用できます

ファイルのダウンロードに Hyperf フレームワークを使用する方法 ファイルのダウンロードに Hyperf フレームワークを使用する方法 Oct 21, 2023 am 08:23 AM

Hyperf フレームワークを使用してファイルをダウンロードする方法 はじめに: ファイルのダウンロードは、Hyperf フレームワークを使用して Web アプリケーションを開発する場合の一般的な要件です。この記事では、Hyperf フレームワークを使用してファイルをダウンロードする方法を、具体的なコード例を含めて紹介します。 1. 準備 開始する前に、Hyperf フレームワークがインストールされ、Hyperf アプリケーションが正常に作成されていることを確認してください。 2. ファイル ダウンロード コントローラーを作成する まず、ファイル ダウンロード リクエストを処理するコントローラーを作成する必要があります。ターミナルを開いて入力します

HTML ボタンまたは JavaScript をクリックしたときにファイルのダウンロードをトリガーするにはどうすればよいですか? HTML ボタンまたは JavaScript をクリックしたときにファイルのダウンロードをトリガーするにはどうすればよいですか? Sep 12, 2023 pm 12:49 PM

現在、多くのアプリケーションでユーザーはファイルをアップロードおよびダウンロードできます。たとえば、盗作検出ツールを使用すると、ユーザーはテキストを含むドキュメント ファイルをアップロードできます。次に、盗作がないかチェックし、ユーザーがダウンロードできるレポートを生成します。 inputtypefile を使用してファイル アップロード ボタンを作成する方法は誰もが知っていますが、JavaScript/JQuery を使用してファイル ダウンロード ボタンを作成する方法を知っている開発者はほとんどいません。このチュートリアルでは、HTML ボタンまたは JavaScript がクリックされたときにファイルのダウンロードをトリガーするさまざまな方法を説明します。 HTML の <a> タグと download 属性を使用して、ボタンがクリックされたときにファイルのダウンロードをトリガーします。

PHPバックエンド機能開発でファイルのアップロードとダウンロードを実装するにはどうすればよいですか? PHPバックエンド機能開発でファイルのアップロードとダウンロードを実装するにはどうすればよいですか? Aug 05, 2023 pm 07:25 PM

PHPバックエンド機能開発でファイルのアップロードとダウンロードを実装するにはどうすればよいですか? Web 開発では、ファイルのアップロードとダウンロードは非常に一般的な機能です。ユーザーが画像、ドキュメントをアップロードするか、ファイルをダウンロードするかにかかわらず、それらを処理するにはバックエンド コードが必要です。この記事では、PHP バックエンドにファイルのアップロードおよびダウンロード機能を実装する方法を紹介し、具体的なコード例を添付します。 1. ファイルのアップロード ファイルのアップロードとは、ローカル コンピューターからサーバーにファイルを転送することを指します。 PHP には、ファイル アップロード機能を実装するための豊富な関数とクラスが用意されています。まず HTM で HTML フォームを作成します

CakePHP ミドルウェア: ファイルのアップロードおよびダウンロード機能を実装します。 CakePHP ミドルウェア: ファイルのアップロードおよびダウンロード機能を実装します。 Jul 30, 2023 pm 03:09 PM

CakePHP ミドルウェア: ファイルのアップロードとダウンロード機能を実現. インターネットの発展に伴い、ファイルのアップロードとダウンロード機能はますます一般的になってきています。 Web アプリケーションを開発する場合、ファイルのアップロードとダウンロードを実装する必要があることがよくあります。 CakePHP フレームワークを使用してアプリケーションを開発する場合、ミドルウェアは、コードを簡素化し、ファイルのアップロードおよびダウンロード機能を実装するのに役立つ非常に便利なツールです。次に、CakePHP ミドルウェアを使用してファイルのアップロードとダウンロード機能を実装する方法を紹介します。まず、新しいものを作成する必要があります

See all articles