2

Web サイトで実行していた CSVimporter V3 for PHP というスクリプトがあり、問題なく動作しました。数年後、別のプロジェクトで使用する同じスクリプトを掘り起こしました。ヘッダー行と複数行ではなく、CSV ファイルが 1 つの長い行として読み取られることを除いて、すべて正常に動作します。

これがスクリプトの一部です。

なぜそれが長い行として読まれるのでしょうか?

<?php 

//  Reference session variable for short-hand
        $f = &$_SESSION['csv_file'];

        //  Open file - fp = file pointer
        if (!$fp = @fopen($f, 'r')) {

            error(L_ERROR_PREVIEW_NO_FILE);

        } else {

            //  Array to store each row to be inserted
            $batch = array();

            //  Row counter
            $rc = 0;

            //  Work out starting row
            switch ($_SESSION['csv_first_row']) {
                case 'data':
                    $start_row = 0;
                break;

                default:
                    $start_row = 1;
            }

            //  Get contents, while below preview limit and there's data to be read
            while ($data = fgetcsv($fp, 1024, delimiter_to_char($_SESSION['csv_delimiter']))) {

                if ($rc < $start_row) {

                    //  Incremement counter
                    $rc++;

                    //  Go to next loop
                    continue;

                } else {

                    //  Array to store data to be inputted
                    $values = array();

                    //  Loop data
                    for ($i = 0; $i < count($data); $i++) {

                        //  If data is wanted, put data into array
                        if (array_key_exists($i, $column_index)) {
                            $values[$column_index[$i]] = $data[$i];
                        }

                    }

                    //  Sort array into correct order by index
                    ksort($values);

                    //  Join values together and store in array
                    $batch[] = '("' . implode('", "', str_replace('"', '\"', $values)) . '","'.$accti.'","'.$impt.'")';

                }

            }


        }
            //  Close the file
            fclose($fp); 
4

1 に答える 1

1

これをコードの先頭に追加したところ、すべてが機能するようになりました!

ini_set('auto_detect_line_endings', true);
于 2013-03-14T11:30:00.420 に答える