ファイルダウンロードコードのphp実装
PHP でファイルのダウンロードを実装するには、header 関数を使用して関連情報をクライアントのブラウザーに送信し、同時にそれを filesize 関数と組み合わせてファイル サイズを読み取り、ダウンロード操作を実行する必要があります。
単純なファイルのダウンロードの場合、HTML 接続タグ を使用し、ダウンロードされるファイルとして属性 href の URL 値を指定するだけです。
ファイルのダウンロードでは、ブラウザがデフォルトで認識できない一部の MIME タイプのファイルのみを処理できます。たとえば、book.rar ファイルにアクセスすると、ブラウザはそのファイルを直接開きませんが、ダウンロード プロンプト ボックスが表示され、ユーザーに「ダウンロード」を要求します。 「」または「open」」などの処理方法。ただし、拡張子 .html の付いた Web ページ ファイル、画像ファイル、PHP プログラム スクリプト ファイルなどをダウンロードする必要がある場合、この接続フォームを使用すると、ファイルの内容がブラウザに直接出力され、ユーザーにダウンロードを求めるプロンプトは表示されません。ダウンロード。
ファイルのセキュリティを向上させるために、 タグでファイルへのリンクを指定したくない場合は、必要なヘッダー情報をブラウザに送信して、ファイルが次のものであることをブラウザに通知する必要があります。ダウンロードされるようになります。 PHP は、header() 関数を使用して、Web ページのヘッダー情報をブラウザーに送信します。この関数は、ヘッダー情報の文字列をパラメーターとして受け取ります。ファイルのダウンロード時に送信する必要があるヘッダー情報は以下の 3 つの部分で構成されており、header() 関数を 3 回呼び出すことで完了します。例として、画像 test.gif をダウンロードする場合、送信する必要があるヘッダー情報は次のとおりです。
header('Content-Type:imge/gif') //指定されたファイルの MIME タイプのヘッダー情報を送信します。 header('Content-Disposition:attachment; filename="test.gif"'); //ファイル、添付ファイル、ファイル名を記述したヘッダー情報を送信
header('Content-Length:3390'); //ファイルサイズ(バイト単位)
ヘッダー情報を設定した後、ファイルの内容をブラウザに出力してダウンロードする必要があります。 PHP のファイル システム関数を使用して、ファイルの内容を読み取り、ブラウザに直接出力できます。最も便利な方法は、readfile() 関数を使用してファイルの内容を読み取り、直接出力することです。次のようにファイル test.gif をダウンロードします。
$filename = "test.gif";
header('Content-Type:image/gif') //ダウンロード ファイルの種類を指定します
header('Content) - Disposition:attachment; //ダウンロードしたファイルの説明を指定
header('Content-Length:'.filesize($filename));ダウンロードされたファイル
//ファイルの内容を読み取り、ダウンロード用に直接出力します
readfile($filename);
?>
上記に中国語の名前が含まれている場合は、正常にダウンロードされません。中国語名のファイルをダウンロードする場合は、別のファイル ダウンロード サンプル コードを見つけました
header("Content-type:text/html;charset= utf-8 ");
// $file_name="cookie.jpg";
$file_name="クリスマスカーニバル.jpg";
//中国語が表示できない問題を解決するには
$file_name=iconv("utf- 8", "gb2312",$file_name);
$file_sub_path=$_SERVER['DOCUMENT_ROOT']."marcofly/phpstudy/down/down/";
$file_path=$file_sub_path.$file_name;
//まず、ファイルが存在するかどうか
if(!file_exists($file_path)){
echo "そのようなファイルはありません"
}
$fp=fopen($file_path,"r"); ($ file_path);
//ファイルのダウンロードに必要なヘッダー
Header("Content-type: application/octet-stream")
Header("Accept- Length:" .$file_size);
Header("Content-Disposition:attachment; filename=".$file_name);
$buffer=1024;
$file_count=0;
//データをブラウザに返す
while(! feof($ fp) && $file_count<$file_size){
$file_count+=$buffer;
echo $file_con
?> ;
header ("Content-type: text/html; charset=utf-8"): サーバーがブラウザのリクエストに応答すると、コンテンツを UTF-8 エンコード形式で表示するようにブラウザに指示します
file_exists() について関数 中国語のパスをサポートしていない問題: PHP 関数は比較的初期のもので中国語をサポートしていないため、ダウンロードしたファイル名が中国語の場合は文字エンコードを変換する必要があり、そうしないと file_exists() 関数が認識できません。 iconv() 関数を使用できます エンコード変換を実行します (www.jbxue.com Script School)
$file_sub_path() 相対パスよりも効率的な絶対パスを使用します
Header("Content-type : application/octet-stream"): through このコードを使用すると、クライアント ブラウザはサーバーから返されたファイル形式を知ることができます。 Header("Accept-Ranges: bytes") の機能は、クライアント ブラウザにファイルのサイズを伝えることです。返されるファイルはバイト単位で計算されます。 Header(" Accept-Length: ".$file_size) の役割: 返されるファイルのサイズをブラウザーに伝えます
Header("Content-Disposition:attachment; filename=" の役割)。 $file_name): 返されたファイルの名前をブラウザーに伝えます
上記の4つのHeader()が必要です
fclose($fp)は、バッファに残っている最後のデータをディスクファイルに出力し、ファイルポインタと関連バッファを解放できます
http://www.bkjia.com/PHPjc/866465.html