1. 程式人生 > >使用php下載的文件打不開,自己用著沒問題,客戶用就不行?

使用php下載的文件打不開,自己用著沒問題,客戶用就不行?

erl 設置 文件頭部 ati 方便 問題 操作系統 下載 為我

1 現象:

  開發的時候用的好好的文件下載功能,部署到客戶那邊就不好使了,幾乎所有從服務器下載下來的文件都不能打開。

  比較了上傳前的文件、上傳後服務器端的文件、下載後本機的文件,發現同一個文件,上傳後還好好的,通過PHP下載下來就多了3個字節。

  使用uediter用16進制模式打開文件發現文件頭部多了“EF BB BF”這三個字節。

2 分析:

  上網很容易查到這三個字節叫bom頭,windows用來標識這是個utf8格式的文件。

  一開始很容易想岔,比如在下載文件的時候刪除這個bom頭、比如強制windows在下載的時候不添加這個bom頭,可惜以上方法是不可能實現的。

  最後看到某大神在某帖子裏留言說,如果PHP文件自己帶著一個bom頭,那麽通過這個PHP文件下載的文件就會自動被添加上bom頭!

  於是我下載了服務器端的PHP文件,發現服務器端的PHP文件還真的多了這三個字節!而我本地的PHP文件沒有!

  那這三個字節是哪裏來的呢?

  因為客戶在上傳這個PHP文件前用記事本編輯了該文件!!!!!!

  因為我們使用編譯器的時候,考慮到中文問題,一般會將PHP文件設置成utf-8格式,整個項目都是utf-8的。

  如果用記事本編輯了這個utf-8格式的文件,系統就會自動給它加上一個BOM頭,備註這是個utf-8格式的文件,系統以後方便識別這個文件!!!

  終極原因還是因為PHP開發的時候就沒考慮到中文問題,所以必須用utf-8格式,而操作系統為了方便自己就給文件前面加bom頭!

  所以機緣巧合之下,看到這篇文章的你,也遇到這個問題啦。

3 解決辦法:

  很簡單,把沒有用記事本編輯過的PHP文件發給客戶就問題解決啦!

  並且叮囑客戶不要用記事本去打開這些文件!!!

使用php下載的文件打不開,自己用著沒問題,客戶用就不行?