Commit 221da14e7555f531c3ed670becdf127cb8273514

Authored by Mihail
1 parent cd8b9f70

change SplFileObject om fopen

lib/CsvParser.php
... ... @@ -22,9 +22,9 @@ class CsvParser extends TableParser
22 22 public function setup()
23 23 {
24 24  
25   - $this->file->setCsvControl($this->delimiter);
26   - $this->file->setFlags(\SplFileObject::READ_CSV);
27   - $this->file->setFlags(\SplFileObject::SKIP_EMPTY);
  25 +// $this->file->setCsvControl($this->delimiter);
  26 +// $this->file->setFlags(\SplFileObject::READ_CSV);
  27 +// $this->file->setFlags(\SplFileObject::SKIP_EMPTY);
28 28  
29 29 parent::setup();
30 30  
... ... @@ -42,7 +42,7 @@ class CsvParser extends TableParser
42 42  
43 43 protected function readRow( )
44 44 {
45   - $this->row = $this->file->fgetcsv();
  45 + $this->row = fgetcsv( $this->file, 0, $this->delimiter );
46 46 }
47 47  
48 48 protected function isEmptyRow(){
... ...
lib/Parser.php
... ... @@ -12,13 +12,17 @@ namespace yii\multiparser;
12 12 //@todo - xml - убрать из названий функций xml и array - это и так понятно
13 13  
14 14  
  15 +use common\components\CustomVarDamp;
  16 +
15 17 abstract class Parser
16 18 {
17 19 public $converter_conf = [];
18 20 protected $converter = NULL;
19 21  
20   - /** @var экземляр SplFileObject читаемого файла */
  22 + /** @var file-resource читаемого файла */
21 23 public $file;
  24 + /** @var string путь читаемого файла */
  25 + public $file_path;
22 26  
23 27 /**
24 28 * @var array - результирующий массив с отпарсенными значениями
... ... @@ -90,10 +94,12 @@ abstract class Parser
90 94  
91 95 protected function cleanUp( )
92 96 {
  97 +
93 98 unset( $this->file );
94 99 unset( $this->converter );
95 100 unset( $this->converter_conf );
96 101  
  102 +
97 103 }
98 104  
99 105  
... ...
lib/ParserHandler.php
... ... @@ -3,24 +3,25 @@
3 3 namespace yii\multiparser;
4 4  
5 5  
  6 +use common\components\CustomVarDamp;
  7 +
6 8 class ParserHandler
7 9 {
8 10 //@todo - добавить комменты на анг язе (ошибки выкидывать тоже на англ яз.)
9 11 //@todo - сделать универсальную обработку ошибок
10 12 //@todo - возможно отказаться от YiiParserHandler
11 13 const DEFAULT_MODE = 'web';
12   - /** @var string */
13   - protected $filePath;
  14 +
14 15  
15 16 /** @var string */
16 17 protected $configuration = [];
17 18 /** @var string */
18 19 protected $custom_configuration = [];
19 20  
20   - /** @var instance of SplFileObject */
21   - protected $fileObject;
  21 + /** @var file handle */
  22 + protected $file;
22 23  
23   - /** @var string - extension of file $filePath */
  24 + /** @var string - extension of file $file_path */
24 25 protected $extension;
25 26  
26 27 /** @var string - */
... ... @@ -32,9 +33,9 @@ class ParserHandler
32 33 /**
33 34 * @param string first line in file for parsing
34 35 */
35   - public function setup($filePath, $options = [])
  36 + public function setup($file_path, $options = [])
36 37 {
37   - $this->filePath = $filePath;
  38 + //$this->file_path = $file_path;
38 39 if (isset($options['mode'])) {
39 40  
40 41 $this->mode = $options['mode'];
... ... @@ -47,12 +48,10 @@ class ParserHandler
47 48 }
48 49  
49 50 $this->options = $options;
50   -
51   - $this->fileObject = new \SplFileObject($this->filePath, 'r');
52   -
53   - $options['file'] = $this->fileObject;
54   - $this->extension = $this->fileObject->getExtension();
55   -
  51 + $this->file = fopen($file_path, 'r');
  52 + $options['file'] = $this->file;
  53 + $options['file_path'] = $file_path;
  54 + $this->extension = pathinfo( $file_path, PATHINFO_EXTENSION );
56 55 $this->custom_configuration = $this->getCustomConfiguration($this->extension, $this->mode);
57 56 $this->custom_configuration = array_merge_recursive($this->custom_configuration, $options);
58 57  
... ... @@ -65,7 +64,9 @@ class ParserHandler
65 64 $parser->setup();
66 65 $result = $parser->read();
67 66  
68   - unset($this->fileObject);
  67 + unset($parser);
  68 + fclose( $this->file );
  69 +
69 70 return $result;
70 71 }
71 72  
... ...
lib/TableParser.php
... ... @@ -160,7 +160,7 @@ abstract class TableParser extends Parser {
160 160  
161 161 protected function filterRow(){
162 162 // если есть заголовок - все значения нужны, не фильтруем
163   - if ( $this->has_header_row || $this->row === NULL ) {
  163 + if ( $this->has_header_row || !is_array( $this->row ) ) {
164 164 return;
165 165 }
166 166 $this->row = array_filter( $this->row, function($val){
... ...
lib/XlsxParser.php
... ... @@ -86,12 +86,13 @@ class XlsxParser extends TableParser {
86 86 }
87 87  
88 88 $zip = new \ZipArchive;
89   - if ( $zip->open( $this->file->getPathname() ) === TRUE ) {
  89 + if ( $zip->open( $this->file_path ) === TRUE ) {
90 90 $zip->extractTo( $this->path_for_extract_files . '/' );
91 91 $zip->close();
92 92 } else {
93 93 throw new \Exception( 'Ошибка чтения xlsx файла' );
94 94 }
  95 + unset($zip);
95 96 }
96 97  
97 98 protected function readSheets ()
... ...
lib/XmlParser.php
... ... @@ -15,8 +15,8 @@ class XmlParser extends Parser{
15 15  
16 16 public function read()
17 17 {
18   - $file = $this->file;
19   - $result = $this->xmlToArray( $file->getPathname() );
  18 + //$file = $this->file;
  19 + $result = $this->xmlToArray( );
20 20  
21 21 if ( isset($this->node) ) {
22 22  
... ... @@ -36,13 +36,13 @@ class XmlParser extends Parser{
36 36 * @throws Exception
37 37 * @throws \Exception
38 38 */
39   - protected function xmlToArray( $file_path ) {
  39 + protected function xmlToArray( ) {
40 40  
41 41 try {
42   - $xml = new \SimpleXMLElement( $file_path, 0, true );
  42 + $xml = new \SimpleXMLElement( $this->file_path, 0, true );
43 43 //\common\components\CustomVarDamp::dumpAndDie($xml->children()->children());
44 44 $result = $this->recursiveXMLToArray( $xml );
45   - } catch(Exception $ex) {
  45 + } catch(\Exception $ex) {
46 46  
47 47 throw $ex;
48 48 }
... ...
lib/YiiMultiparser.php
... ... @@ -17,7 +17,7 @@ class YiiMultiparser extends Component{
17 17  
18 18 public $configuration;
19 19 public $parserHandler;
20   -public $filePath;
  20 +//public $file_path;
21 21  
22 22 public function init()
23 23 {
... ... @@ -30,7 +30,7 @@ public $filePath;
30 30  
31 31 public function parse( $filePath, $options = [] ){
32 32  
33   - $this->filePath = $filePath;
  33 + // $this->file_path = $file_path;
34 34 $this->parserHandler->setup( $filePath, $options );
35 35  
36 36 return $this->parserHandler->run();
... ...
lib/YiiParserHandler.php
... ... @@ -18,9 +18,9 @@ class YiiParserHandler extends ParserHandler{
18 18 * @param array $options
19 19 * проверяет читабельность переданного файла, а также наличие настроек парсера в конфигурационном файле для данного типа файла
20 20 */
21   -// public function setup($filePath, $options = [])
  21 +// public function setup($file_path, $options = [])
22 22 // {
23   -// $this->filePath = $filePath;
  23 +// $this->file_path = $file_path;
24 24 // if (isset($options['mode'])) {
25 25 //
26 26 // $this->mode = $options['mode'];
... ... @@ -35,10 +35,10 @@ class YiiParserHandler extends ParserHandler{
35 35 // $this->options = $options;
36 36 //
37 37 // try {
38   -// $this->fileObject = new \SplFileObject($this->filePath, 'r');
  38 +// $this->fileObject = new \SplFileObject($this->file_path, 'r');
39 39 // } catch (\ErrorException $e) {
40   -// // Yii::warning("Ошибка открытия файла {$this->filePath}");
41   -// echo "Ошибка открытия файла {$this->filePath}";
  40 +// // Yii::warning("Ошибка открытия файла {$this->file_path}");
  41 +// echo "Ошибка открытия файла {$this->file_path}";
42 42 // return [];
43 43 // }
44 44 //
... ...