第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Nginx環(huán)境下,PHP下載,中文文件,下載失效(英文可以下載)怎么解決呢?

554731700001f4e903570195.jpghttp://img1.sycdn.imooc.com//5547318900011dd304670142.jpg

背景介紹:

文件名 ?為英文時可以下載,文件名 為中文時報404錯誤,而實際上服務器端 ?文件是存在的。

網上找一下,據(jù)說是 ?URL發(fā)送時編碼問題。有兩種解決方案:

①打開瀏覽器,去掉默認的以utf8發(fā)送(測試過沒問題,但因為要在客戶端操作,所有沒采納)

②寫一個下載處理函數(shù)。

$id:記錄的id

$table:表名

$urlField:表中存儲 路徑+文件名.后綴 的字段

function?download($id,$table='tender_uploadfile',$urlField='upload_url'){
????global?$db,$pre;
????$file?=?$db->get_one("SELECT?A.*?FROM?`{$pre}{$table}`?A?WHERE?A.id?=?'$id'");
????$fileType?=?strtolower(strrchr($file[$urlField],?'.'));
????if(!$file?||?!file_exists(ROOT_PATH?.?$file[$urlField])){
????????showerr("I'm?so?sorry!?File?not?found!",1);
????}?else?{
????????//點擊量
????????($table?==?'tender_uploadfile')?&&?@$db->query("UPDATE?`{$pre}{$table}`?SET?hits?=?hits?+?1??WHERE?id?=?'$id'");

????????$fp?=?fopen(ROOT_PATH?.?$file[$urlField],"r");

		header("Pragma:?public");?
		header("Expires:?0");?
		header("Cache-Control:?must-revalidate,?post-check=0,?pre-check=0");?
		header("Cache-Control:?public");??
		header("Content-Description:?File?Transfer");?

????????Header("Content-type:?"?.?getFileMimeMapping($fileType));
????????Header("Accept-Ranges:?bytes");
		header('Content-Transfer-Encoding:?binary');?
????????Header("Accept-Length:?".filesize(ROOT_PATH?.?$file[$urlField]));
????????//若出現(xiàn)亂碼iconv("utf-8","gbk",$file[upload_title]))
????????$fileName?=?$file[upload_title]???$file[upload_title]?:?$file[title];
????????Header("Content-Disposition:?attachment;?filename="?.?$fileName);

	
????????echo?fread($fp,?filesize(ROOT_PATH?.?$file[$urlField]));
????????/*此方式使用大文件,起緩存
????????$content?=?"";
????????while?(!feof($fp))?{
????????????$content?.=?fread($fp,?1024);
????????????$stream_meta_data?=?stream_get_meta_data($fp);?//Added?line
????????????if($stream_meta_data['unread_bytes']?<=?0)?break;?//Added?line

????????}
????????*/
????????fclose($fp);
????????//echo?$content;
????}
????exit;
}


問題:

在IE、360上,下載時丟失文件后綴,或下載下來的為.php的文件,實際上傳的為doc、rar、docx、zip中的任意一種。這該怎么解決?

正在回答

3 回答

你可以判斷下要下載的文件名第一個字符是否為中文,如果是中文的話需要通過iconv轉碼,接著在指定下載文件名那加個判斷,是中文就不要使用basename了,如果第一個字符不是中文這個寫法就ok

^-^...

1 回復 有任何疑惑可以回復我~

謝謝大家了,我找到了更好的解決辦法,存的時候,存為英文的,同時把中文名(帶后綴的)也存入表中,下載時候,直接用中文的來表示,發(fā)現(xiàn)下載后的文件名就為中文的。

1 回復 有任何疑惑可以回復我~
#1

UFO2015

不錯喲!
2015-10-24 回復 有任何疑惑可以回復我~

第3行, 不要用 basename ;直接用 $filename

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

Nginx環(huán)境下,PHP下載,中文文件,下載失效(英文可以下載)怎么解決呢?

我要回答 關注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號