in_charset = 'windows-1251'; $this->filePath = $filePath; $this->hasHeaderRow = $hasHeaderRow; $this->first_line = $first_line; } // public function encodeFile( $in_charset, $out_charset, $filePath ){ // // $old_content = file_get_contents( $filePath ); // $encode_content = iconv( $in_charset, $out_charset, $old_content ); // $file = @fopen( $filePath, "w" ); // fwrite( $file, $encode_content ); // @fclose( $file ); // // } /** * @param string $delimiter * @param string $enclosure * @param string $escape * @return $this */ public function setup($delimiter = ';', $enclosure = '"', $escape = '\\') { $this->handler->setCsvControl($delimiter); } public function getIterator() { return new \ArrayIterator($this->read()); } /** * @return array * @throws InvalidFileException * @deprecated Use ::read instead. */ public function parseAll() { return $this->read(); } /** * @return array * @throws InvalidFileException */ public function read() { $return = []; $this->openHandler(); $line = 0; $keys = NULL; while (($row = $this->readRow()) !== FALSE) { $line++; if ($this->hasHeaderRow) { if ($keys === NULL) { $keys = array_values($row); } else { if (count($keys) !== count($row)) { // Yii::warning("Invalid columns detected on line #$line ."); return $return; } $return[] = array_combine($keys, $row); } } else { $return[] = $row; } } $this->closeHandler(); return $return; } private function openHandler() { try { $this->handler = new \SplFileObject( $this->filePath , 'r' );; } catch (ErrorException $e) { Yii::warning("Ошибка открытия файла {$this->filePath}"); } $this->handler->setFlags(\SplFileObject::READ_CSV);// | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY | \SplFileObject::DROP_NEW_LINE); $this->handler->fseek( $this->first_line ); $this->setup(); } private function closeHandler() { $this->handler = NULL; } private function readRow() { $dirt_value_arr = $this->handler->fgetcsv( ); return $this->encodeArray( $dirt_value_arr ); } private function encodeArray( $array_to_encode ) { return array_map(function($array_to_encode) { return iconv( $this->in_charset, $this->out_charset, $array_to_encode ); }, $array_to_encode); } }