在PHP中处理CSV文件,能够满足MS和UNIX断线的要求

在PHP中处理CSV文件,能够满足MS和UNIX断线的要求,php,csv,fopen,Php,Csv,Fopen,我有一个处理CSV文件作为输入的模块。它在我的Ubuntu机器上运行良好,直到我的团队中有人开始使用Microsoft Excel创建csv 因此,新的输入CSV上有^M(\r\n)个字符,因此,我的代码假定CSV仅由一行组成,并且所有数据都填充到$header 我已经将读取模式改为“rt”,因为php.net建议以t模式打开文本,但问题仍然存在。rt似乎只适用于Windows将\n转换为\n . 来自PHP.NET:Windows提供了一个文本模式转换标志('t'),在处理文件时,该标志将\

我有一个处理CSV文件作为输入的模块。它在我的Ubuntu机器上运行良好,直到我的团队中有人开始使用Microsoft Excel创建csv

因此,新的输入CSV上有^M(\r\n)个字符,因此,我的代码假定CSV仅由一行组成,并且所有数据都填充到$header

我已经将读取模式改为“rt”,因为php.net建议以t模式打开文本,但问题仍然存在。rt似乎只适用于Windows将\n转换为\n .

来自PHP.NET:Windows提供了一个文本模式转换标志('t'),在处理文件时,该标志将\n透明地转换为\r\n。相反,您也可以使用“b”强制二进制模式,这将不会转换您的数据。要使用这些标志,请指定“b”或“t”作为模式参数的最后一个字符

有没有办法接受这两种换行符(Microsoft和UNIX),最好只更改PHP代码?我知道有dos2unix(ubuntu中的fromdos)命令,但最新的ubuntu默认没有这个命令,我想避免安装其他实用程序

以下是我当前的源代码:

        $row = 1;
        if (($handle = fopen($file, "r")) !== FALSE)
        {
            while (($data = fgetcsv($handle)) !== FALSE)
            {
                $num = count($data);

                if($row == 1)
                {
                    $header = $data;
                }else
                {
                    $rows[$row-1] = $data;
                }
                $row++;
            }
            fclose($handle);
        }


有没有可能它只读了一行好的内容,然后是一行空行,这会打破你的循环?我已经在windows结尾和文件读取器中看到了这种效果。
ini\u set('auto\u detect\u line\u endings',true)
ini_set('auto_detect_line_endings',true);