Set header row number
public setHeaderRowNumber ( integer $rowNumber, integer $duplicates = null ) : boolean | ||
$rowNumber | integer | Number of the row that contains column header names |
$duplicates | integer | How to handle duplicates (optional). One of: - CsvReader::DUPLICATE_HEADERS_INCREMENT; increments duplicates (dup, dup1, dup2 etc.) - CsvReader::DUPLICATE_HEADERS_MERGE; merges values for duplicate headers into an array (dup => [value1, value2, value3]) |
return | boolean |
/** * アップロードされたCSVファイルの行ごとの処理 * * @param $formFile * @return CsvImportService */ protected function getImportData($app, $formFile) { // アップロードされたCSVファイルを一時ディレクトリに保存 $this->fileName = 'upload_' . Str::random() . '.' . $formFile->getClientOriginalExtension(); $formFile->move($app['config']['csv_temp_realdir'], $this->fileName); $file = file_get_contents($app['config']['csv_temp_realdir'] . '/' . $this->fileName); // アップロードされたファイルがUTF-8以外は文字コード変換を行う $encode = Str::characterEncoding(substr($file, 0, 6)); if ($encode != 'UTF-8') { $file = mb_convert_encoding($file, 'UTF-8', $encode); } $file = Str::convertLineFeed($file); $tmp = tmpfile(); fwrite($tmp, $file); rewind($tmp); $meta = stream_get_meta_data($tmp); $file = new \SplFileObject($meta['uri']); set_time_limit(0); // アップロードされたCSVファイルを行ごとに取得 $data = new CsvImportService($file, $app['config']['csv_import_delimiter'], $app['config']['csv_import_enclosure']); $data->setHeaderRowNumber(0); return $data; }
/** * アップロードされたCSVファイルの行ごとの処理 * * @param $formFile * @return CsvImportService */ protected function getImportData($app, $formFile) { // アップロードされたCSVファイルを一時ディレクトリに保存 $this->fileName = 'upload_' . Str::random() . '.' . $formFile->getClientOriginalExtension(); $formFile->move($app['config']['csv_temp_realdir'], $this->fileName); $file = file_get_contents($app['config']['csv_temp_realdir'] . '/' . $this->fileName); if ('\\' === DIRECTORY_SEPARATOR && PHP_VERSION_ID >= 70000) { // Windows 環境の PHP7 の場合はファイルエンコーディングを CP932 に合わせる // see https://github.com/EC-CUBE/ec-cube/issues/1780 setlocale(LC_ALL, ''); // 既定のロケールに設定 if (mb_detect_encoding($file) === 'UTF-8') { // UTF-8 を検出したら SJIS-win に変換 $file = mb_convert_encoding($file, 'SJIS-win', 'UTF-8'); } } else { // アップロードされたファイルがUTF-8以外は文字コード変換を行う $encode = Str::characterEncoding(substr($file, 0, 6)); if ($encode != 'UTF-8') { $file = mb_convert_encoding($file, 'UTF-8', $encode); } } $file = Str::convertLineFeed($file); $tmp = tmpfile(); fwrite($tmp, $file); rewind($tmp); $meta = stream_get_meta_data($tmp); $file = new \SplFileObject($meta['uri']); set_time_limit(0); // アップロードされたCSVファイルを行ごとに取得 $data = new CsvImportService($file, $app['config']['csv_import_delimiter'], $app['config']['csv_import_enclosure']); $ret = $data->setHeaderRowNumber(0); return $ret !== false ? $data : false; }
public function testCountDoesNotMoveFilePointer() { $file = new \SplFileObject(__DIR__ . '/../../../Fixtures/data_column_headers.csv'); $CsvImportService = new CsvImportService($file); $CsvImportService->setHeaderRowNumber(0); $key_before_count = $CsvImportService->key(); $CsvImportService->count(); $key_after_count = $CsvImportService->key(); $this->assertEquals($key_after_count, $key_before_count); }