Re: [請益] move_uploaded_file 失敗

看板PHP作者 (霸格尼尼)時間12年前 (2013/02/25 06:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
就分三層,兩個作業系統來看好了 encoding夾在兩層中間表示這兩層間用溝通用的編碼 Windows Linux UI UTF-8 UTF-8 PHP ANSI UTF-8 FS 上表中,寫UTF-8的部份是可以自己改的,不過當然是建議用UTF-8, 在中文環境的Windows下ANSI指的是Big5,這是官方版PHP的限制,沒得改, Windows上用UTF-8的話就必然會跟FS用不同編碼, 所以PHP比需處理上下兩層的轉換。 Windows上PHP只能用ANSI的原因如下︰ 類似上表,在FS及更底層的地方其實是 FAT/NTFS EXTFS PROGRAM ANSI UNICODE 隨便傳 FS \ / UCS-2 隨便放 DISK EXTFS以及大部分其他POSIX系統用的檔案系統都不做編碼處理, 指要求跟ASCII相容,擋掉一些保留字元, 剩下的收什麼存什麼,讀到什麼就吐回去 至於FAT/NTFS 存的是UCS-2(Unicode的一種編碼),但因為UCS-2是定長2 bytes, 所以中間一定會有很多0,譬如原本ASCII的"123",16位元看起來是"\x31\x32\x33", 但在UCS-2看起來會是"\x00\x31\x00\x32\x00\x33" 然而00在C-style的字串中是用來 作為字串結尾,也就是說UCS-2是跟ASCII不相容的,所以要嘛讓編碼去適應程式,要嘛 改程式來支援編碼(用wide char),這兩種作法在Windows API上就分成了兩套系統, PHP在其他系統上都快快樂樂的使用,因為其他系統都儘可能用ASCII相容的編碼, 但到了Windows上要改程式不是一件小工程,所以PHP一直以來都是用讓編碼去適應程式 的那套API,就這樣。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.221.51.22 ※ 編輯: buganini 來自: 61.221.51.22 (02/25 06:20)
文章代碼(AID): #1HAf7wDd (PHP)
文章代碼(AID): #1HAf7wDd (PHP)