1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php
$file_name = "哈哈.jpg" ; //需要下载的文件
$file_name =iconv( "utf-8" , "gb2312" , "$file_name" );
$fp = fopen ( $file_name , "r+" ); //下载文件必须先要将文件打开,写入内存
if (! file_exists ( $file_name )){ //判断文件是否存在
echo "文件不存在" ;
exit ();
}
$file_size = filesize ( "a.jpg" ); //判断文件大小
//返回的文件
Header( "Content-type: application/octet-stream" );
//按照字节格式返回
Header( "Accept-Ranges: bytes" );
//返回文件大小
Header( "Accept-Length: " . $file_size );
//弹出客户端对话框,对应的文件名
Header( "Content-Disposition: attachment; filename=" . $file_name );
//防止服务器瞬时压力增大,分段读取
$buffer =1024;
while (! feof ( $fp )){
$file_data = fread ( $fp , $buffer );
echo $file_data ;
}
//关闭文件
fclose( $fp );
?>
|
ファイル名が中国語の場合、PHP関数は中国語のファイル名を認識できません。通常、プログラムのエンコードがUTF-8の場合、PHP関数は比較的古く、gb2312でエンコードされた中国語しか認識できないため、iconv("original。中国語の「エンコード」、「変換先のエンコード」、「トランスコードする文字列」)関数でトランスコードできます。
例えば、文字列をutf-8からgb2312に変換します
$file_name=iconv(“utf-8”,”gb2312”,”$file_name”);