php
で中国語ファイルをダウンロードする問題を解決する
次の関数は、ダウンロードされたファイル (中国語、英語などを含む) が PHP に存在するかどうかを確認するもので、存在しない場合は、元の名前でダウンロードされます。もちろん、サーバー名もカスタマイズできます。
まず、Web サイトのディレクトリは次のとおりであることに注意してください。
/
....down.html
....sphinx 技術交換.zip
....リブ
???…download.php
?
もちろん、Web サイトの相対パスと絶対パスを知っている場合は、ディレクトリのレイアウトを理解してソース プログラムを直接見る必要はありません。
?
ファイル名: down.html ダウンロードページ
ファイル名は次のとおりです: download.php はダウンロード プログラム ページを処理します
header("Content-Type:text/html;charset=utf-8");
$fn =
urldecode($_REQUEST['fn']);?
//ファイル名(パッケージ拡張子を含む)をデコードします
//ダウンロード名が元の名前かカスタマイズされた名前かを判断します
if(!empty($_REQUEST['savefn'])){
?? ?
$savefn = urldecode($_REQUEST['savefn']);? //ダウンロード時に表示されるファイル名(拡張子を除く)をデコードします
???
$fnArr =explode('.',$fn);
???$savefn =
$savefn.".".$fnArr[count($fnArr)-1];? //utf-8 を GB2312 に変換します
}else{
???
= $fn;? //ダウンロード時に表示されるファイル名として元のファイル名を使用します
}
$fn = iconv('UTF-8','GB2312//IGNORE',$fn);?
//utf-8 を GB2312 に変換します
$fp = '../'.$fn; //ファイルをダウンロードするパス ($fp = に変更された場合)
'http://localhost/'.$fn; 相対パスを使用し、ルート ディレクトリから直接移動することをお勧めします
if (!is_file($fp))
// ファイルが存在するかどうかを確認します
??? echo "";
???
終了;
} else {
???
iconv('UTF-8','GB2312//IGNORE',$savefn);
??? $file = fopen($fp,"r");
ファイル
??? header("Content-type: application/octet-stream") を開きます。
header("Accept-Range: バイト");
??? header("Accept-Length: ".filesize($fp));
??? header("Content-Disposition:attachment; filename=" . $savefn);
#ダウンロード時に表示されるファイル名
??? echo fread($file,filesize($fp));
???終了;
}
?>