ftp軟體的bug: 上傳和下載的php檔案換行丟失

來源:互聯網
上載者:User

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

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

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

由於linux下換行是n,而windows下換行是rn,當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
hello word!
WINDOWD TO UNIX !
TEST FTP ASCII;

二進位模式 Binary有問題

vi ftp_ascii.txt
hello word!^M
WINDOWD TO UNIX !^M
TEST FTP Binary;

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

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.