php でファイルをダウンロードする方法: 1. "$_GET['file']" からファイル パスを取得します; 2. ヘッダー情報を設定します; 3. "file_get_contents()" と "file( )" メソッド; 4. "readfile" メソッドと "fopen" メソッドを通じて。
PHP ビデオ チュートリアル 」
PHP でファイルをダウンロードする方法
1. ファイル パスを取得します$_GET['file']$path_parts = pathinfo($_GET['file']); $file_name = $path_parts['basename']; $file_path = '/mysecretpath/' . $file_name;からファイル パスを取得します。パスを取得するには、必ず上記の方法を使用してください。文字列を連結するだけでパスを取得できます。
$mypath = '/mysecretpath/' . $_GET['file'];入力が ../../ の場合、任意のパスにアクセスできます2。ヘッダー情報を設定します
header('Content-Description: File Transfer'); //描述页面返回的结果 header('Content-Type: application/octet-stream'); //返回内容的类型,此处只知道是二进制流。具体返回类型可参考http://tool.oschina.net/commons header('Content-Disposition: attachment; filename='.basename($file));//可以让浏览器弹出下载窗口 header('Content-Transfer-Encoding: binary');//内容编码方式,直接二进制,不要gzip压缩 header('Expires: 0');//过期时间 header('Cache-Control: must-revalidate');//缓存策略,强制页面不缓存,作用与no-cache相同,但更严格,强制意味更明显 header('Pragma: public'); header('Content-Length: ' . filesize($file));//文件大小,在文件超过2G的时候,filesize()返回的结果可能不正确3 . 出力ファイル file_get_contents() メソッド file_get_contents() は、ファイルの内容を文字列に読み取ります、つまり、ファイルをメモリに読み取り、内容を出力します
$str = file_get_contents($file); echo $str;このように、ファイルが少し大きい限り、メモリ制限を超えます4. 出力 file の file() メソッドは file_get_contents() と似ていますが、file() が内容を 1 行ずつ配列に格納し、メモリを占有する必要もあります
$f = file($file); while(list($line, $cnt) = each($f)) { echo $cnt; }ファイルが大きい場合、メモリ制限を超えます5. 出力ファイルの Readfile() メソッドreadfile() メソッド: ファイルを読み取り、出力バッファに書き込みます。このメソッドは、ファイル全体がメモリを占有することなく、バッファに直接出力できます。前提条件は、ファイルをクリアすることです。最初にバッファを作成し、ファイルをダウンロードするためのダイアログ ボックスがユーザーに表示されるようにします。
while (ob_get_level()) ob_end_clean(); //设置完header以后 ob_clean(); flush(); //清空缓冲区 readfile($file);このメソッドは大きなファイルを出力することができ、次の状況を除いて 1 つのファイルの読み取りがメモリ制限を超えることはありません。
readfile() は、複数の人がファイルを読み取る場合にも PHP メモリの枯渇を引き起こします: http://stackoverflow.com/questions/6627952/why-does-readfile-exhaust-php-memoryPHP はファイルを読み取って出力バッファに書き込む必要があるため、300Mb ファイルの場合、どのような実装を記述したとしても (多数の小さなセグメントごと、または 1 つの大きなチャンクごと)、PHP は 300Mb のファイルを読み取らなければなりません。#複数のユーザーがファイルをダウンロードする必要がある場合、問題が発生します (1 つのサーバーでは、ホスティング プロバイダーが各ホスティング ユーザーに与えられるメモリを制限します。このように制限されたメモリでは、バッファを使用することはできません) )
私は、直接リンクを使用してファイルをダウンロードする方が、大きなファイルに対してははるかに優れたアプローチだと思います。
主な考え方: PHP は、 file を作成し、バッファに出力します。 300M ファイルの場合、PHP は依然として 300M のメモリを読み取る必要があります。したがって、複数のユーザーが同時にダウンロードすると、バッファーもメモリ不足になります。 (間違っていたら修正してください)
たとえば、100 人のユーザーがダウンロードしている場合、100*buffer_size のメモリが必要になります
6. 出力ファイルの fopen() メソッド
set_time_limit(0); $file = @fopen($file_path,"rb"); while(!feof($file)) { print(@fread($file, 1024*8)); ob_flush(); flush(); }
fopen() は大きなファイルを読み取ることができ、毎回読み取る内容の一部を指定できます。大きなファイルを操作する場合にも役立ちます
7. 概要
PHP を使用してファイルをダウンロードする場合は、シナリオに注意する必要があります。少数の小さなファイルだけをダウンロードする場合は、PHP を使用してダウンロードする方が良いですが、PHP が多数のダウンロード要求に耐える必要がある場合は、ファイルのダウンロードを PHP で行うべきではありません。
Apache の場合、mod_xsendfile を使用するとダウンロード タスクを完了でき、より簡単かつ高速になります。
以上がphpでファイルをダウンロードする方法【まとめ】の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、酸とベースのデータベースモデルを比較し、その特性と適切なユースケースを詳述しています。酸は、財務およびeコマースアプリケーションに適したデータの整合性と一貫性を優先し、ベースは可用性に焦点を当て、

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

記事では、組み込み関数、ホワイトリストアプローチ、サーバー側の検証などの手法に焦点を当てたセキュリティを強化するためのPHP入力検証のベストプラクティスについて説明します。

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

この記事では、パスワードを保護するためにPHPでpassword_hashとpassword_verifyを使用することの利点について説明します。主な議論は、これらの関数が自動塩の生成、強力なハッシュアルゴリズム、およびSecurを通じてパスワード保護を強化するということです

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

この記事では、PHPでのXSS攻撃を防ぐための戦略について説明し、入力の消毒、出力エンコード、セキュリティを向上させるライブラリとフレームワークの使用に焦点を当てています。

この記事では、PHPでのインターフェイスと抽象クラスの使用について説明し、それぞれをいつ使用するかに焦点を当てています。インターフェイスは、無関係なクラスや複数の継承に適した、実装なしで契約を定義します。抽象クラスは共通の機能を提供します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









