天天看點

****使用ftp軟體上傳下載下傳php檔案時換行符丢失bug

在使用ftp軟體上傳下載下傳php源檔案時,我們偶爾會發現在本地windows下notepad++編輯器寫好的php檔案,在使用ftp上傳到linux伺服器後,php檔案的換行符全部丢失了,導緻php檔案無法正常運作。

    這個時候,再次通過ftp軟體把剛才上傳的php檔案下載下傳到本地windows,用notepad++編輯器打開後,發現php源代碼變成了一行,換行丢失。

    發生這種情況的原因是什麼呢?飄易就以一句話概括下:

    由于linux下換行是\n,而windows下換行是\r\n,當ftp軟體在上傳時,預設是以ASCII方式上傳的,而ASCII方式上傳檔案有個特點,會将檔案裡的換行符進行适當處理以符合上傳伺服器的運作環境。在這個過程中,部分檔案就會處理不當,出現換行符丢失的bug。(注意,不是全部php檔案,是小部分的php檔案會出現這個問題)。

    上訴問題尤其在php源碼裡有單行注釋符“//”時,會導緻php源檔案直接無法運作。因為源碼變成了一行代碼後,單行注釋符把//後面所有的代碼都注釋掉了。

    FTP上傳bug解決方法:

方法1: 将單行注釋符 // 改成 多行注釋符 /* 注釋文字 */ 這樣即使換行符丢失,也不影響後面源碼的執行。(但是下載下傳到本地二次修改時,依然是件頭疼的事!)

方法2: FTP上傳php檔案不要使用ASCII模式,全部使用二進制方式。這是最保險的。 如何設定ftp軟體以二進制方式Binary上傳,請網絡搜尋下自己使用的ftp軟體的設定方式。

    【知識補充:FTP的ASCII和Binary傳輸模式】 :

FTP有ASCII和Binary兩種傳輸模式:

Binary模式不會對資料進行任何處理。

Ascii模式會将回車換行轉換為本機的回車字元。

由于WINDOWS和UNIX的行結束符不一樣。是以從WINDOWS用Binary傳輸方式傳輸文本檔案到UNIX時可能會出現^M。同樣從UNIX用Binary方式傳輸檔案到WINDOWS時,也可能出現回車換行顯示不正确的問題。

WINDOWS下建立ftp_ascii.txt内容如下:

hello word!

WINDOWD TO UNIX !

TEST FTP ASCII;

我們分别用兩種模式上傳到UNIX.

ASCII模式正常

vi ftp_ascii.txt

二進制模式 Binary有問題

hello word!^M

WINDOWD TO UNIX !^M

TEST FTP Binary; 

    由此可知我們采用ASCII模式傳輸文本可以避免傳輸中的^M問題。 FTP中雖然ASCII模式可以避免^M的問題。但大多數情況還是選擇Binary方式,這樣可以保證傳輸的内容不會被改變。尤其是在傳輸可執行檔案如php源碼時, 大多選用binary方式。

    在FlashFXP中可以在菜單->會話->傳輸模式中 選擇ASCII ,BINARY ,自動三種模式。

    另外,我們以ssh登入sftp的方式上傳檔案時,也可以避免換行丢失的問題。

如何聯系我:【萬裡虎】www.bravetiger.cn

【QQ】3396726884 (咨詢問題100元起,幫助解決問題500元起)

【部落格】http://www.cnblogs.com/kenshinobiy/