台灣最大程式設計社群網站
線上人數
1393
 
會員總數:242274
討論主題:187365
歡迎您免費加入會員
討論區列表 >> PHP >> 檔案換行問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
檔案換行問題
價值 : 50 QP  點閱數:191 回應數:3

樓主

迷路
高級專家
9583 131
6209 1614
發送站內信

捐贈 VP 給 迷路
老實說我不太確定這個問題該在哪問
有時候會發生同一台主機上的同一個網站,某些檔案下載下來後
每行都會額外多一個換行
原本的內容

下載的內容

如果這時直接對檔案進行修改
上傳回去全部的檔案就會變成一行
然後大部分的情況下,檔案執行就會出錯

必須得先將主機上的舊檔更名,把剛載下來有問題的檔案
不做任何修改直接上傳回主機,然後再下載一次
這時再開檔案就會恢復正常

請問有人知道這個問題發生的原因和解決方法嗎?
要大量改檔案卻碰到這種問題真是心累

搜尋相關Tags的文章: [ 換行異常 ] ,
本篇文章發表於2017-12-20 09:45
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
一般來說,這大多都是換行符號不同的問題。

大多數而言的做法如下。

1.替代式處理吧。也就是將所有可能性的換行符號,\n或是\r\n。直接取代成統一的換行。
好處是比較快速處理,缺點是有時會處理錯誤。

2.使用讀行函數(fget)來處理重建陣列。
這方式比較不容易有不同換行符號的問題。
不過這會比較消耗效能,並不太建議這樣使用

3.依換行符號做explode,再將空白相關的值給移除掉後再重建。
基本本這方式跟用第一個方式有點類同,差別在於會再順便處理掉原本正常的空字串空行移除。
如果沒打算有空行的情況,用這樣的方式會比較好。比較不容易有第一個方式的缺點。

另外一種方式我是沒試過,也就是讀取檔案的編碼格式。畢竟換行不同的主因,就在於檔案的編碼格式。
當然在這邊指的並不是像是big5或utf-8那樣的文字編碼。
而是像是unix、dos、ansi.....這一類的格式編碼。

在多點小知識
一般來說各大系統不同的編碼如下
LINUX與unix 其換行為 \n 檔案編碼格式大多是unix的多。這也是目前比較常用的模式。
MAC系統則是 \r 檔案編碼我倒是不太確定是什麼,畢竟不常碰到。
windows 則是 \r\n 格式大多是ansi(有些編輯器內會叫dos)

我大多數比較喜歡用第一種方式來處理。


本篇文章回覆於2017-12-20 13:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

迷路
捐贈 VP 給 迷路 檢舉此回應
星空大,如果是PHP程式要讀取寫入的檔案我就會處理了
讀取部分靠str_replace來替換,寫入就用PHP_EOL
但是我的問題是php檔本身,例如:test.php上傳下載時換行跑掉
本篇文章回覆於2017-12-20 14:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
這個問題就得看你的ftp設定了,或是看你用哪一套軟體做上傳的。

像目前比較常用的fz。
他的上傳設定就得要改一下。因為他的預設值是用windows格式上傳的。
(這當然是指文件檔的部份)
php檔也是屬於文件檔。

在我公司堛漱u程師。之前就是被這個問題給搞死。
上傳後就會程式碼很奇怪,要不然就是會報錯。

但錯誤在哪邊完全不知道。
後來我發現他用的ftp軟體是fz。我就看了一下他的設定檔。
果然是上傳時會強制用ansi格式上傳。

就將其改一下不變動就行了。

你看看你是不是也是這樣的問題。

目前他也是跟我一樣,直接用nb編輯器來做同步了。
之前他也是被這種很奇怪的換行問題給搞死過。
本篇文章回覆於2017-12-20 15:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.