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