CSV ファイルを入力として処理するモジュールがあります。私のチームの誰かが Microsoft Excel を使用して csv を作成し始めるまで、私の Ubuntu マシンでは問題なく動作します。
その結果、新しい入力 CSV には ^M ( \r\n ) 文字が含まれているため、コードは CSV が 1 行のみで構成され、すべてのデータが $header に入力されると想定しています。
php.net がテキストを t モードで開くことを推奨しているため、読み取りモードを「rt」に変更しましたが、問題はまだ存在します。rt は、Windows が \n を \rn に変換する場合にのみ機能するようです。
PHP.NET から: Windows は、ファイルを操作するときに透過的に \n を \r\n に変換するテキストモード変換フラグ ('t') を提供します。対照的に、「b」を使用して、データを変換しないバイナリ モードを強制することもできます。これらのフラグを使用するには、モード パラメータの最後の文字として「b」または「t」を指定します。
できればPHPコードのみを変更することで、両方の種類の改行( Microsoft と UNIX )を受け入れる方法はありますか? 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);
}