2013-05-02 48 views
1

我正在使用PHP將文件上傳到服務器,然後將路徑傳遞給SQL存儲過程,該存儲過程執行BULK INSERT將文件導入到SQL表中。PHP檢測Windows或Unix格式的csv或txt文件?

在SQL中,我知道如何讓BULK INSERT與基於Windows和Unix的csv和txt文件一起工作,但我需要知道它是哪種格式。

我希望我可以在PHP中弄清楚,然後將它傳遞給存儲過程。然後我可以相應地更新ROWTERMINATOR

有沒有辦法在PHP中檢測csv或txt是基於Windows還是Unix?

任何幫助,這將是偉大的。

謝謝!

+3

閱讀使用與fgets幾行( )並測試「\ r \ n」或「\ n」作爲字符串中的最後一個字符 - 特別注意http://www.php.net/manual/en/filesystem.configuration.php#ini。自動檢測行結束 – 2013-05-02 23:04:51

回答

3

從文件中獲取第一行。檢查最後兩個字符或最後一個字符是:

  • \r\n - >窗口
  • \n - > UNIX

例子:

$lines = file('test.csv'); 
$line = $lines[0]; 

switch(TRUE) { 
    case substr($line, -2) === "\r\n" : 
     echo "windows"; 
     break; 
    case substr($line, -1) === "\n" : 
     echo "unix"; 
     break; 
    default : 
     // pigs can fly 
     echo "unknown line ending" 
     break; 
} 
+0

+1的情況下使用我以前沒有見過。 – schmunk 2013-05-02 23:31:55

+0

謝謝! :)我也喜歡這個用法。請注意,通過這種用法,您可以與'switch'進行* strict *比較。一個常規開關可以像使用'=='運算符 – hek2mgl 2013-05-02 23:33:23

+0

YEP +1這樣使用! – Lock 2013-05-03 02:07:03