@@ -551,6 +551,12 @@ protected function createTmpDb()
551551        $ sql  = 'CREATE  ' .'TABLE `_ips` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `ip` INTEGER,`action` TEXT, `parameter` TEXT, `value` TEXT, `offset` TEXT); CREATE INDEX `ip` ON `_ips` (`ip`); CREATE INDEX `parameter` ON `_ips` (`parameter`); CREATE INDEX `value` ON `_ips` (`value`); ' ;
552552        $ this  ->pdo ->exec ($ sql );
553553        $ prepare ['insert ' ]['ips ' ] = $ this  ->pdo ->prepare ('INSERT  ' .'INTO `_ips` (`ip`,`action`,`parameter`,`value`) VALUES (:ip,:action,:parameter,:value); ' );
554+         $ prepare ['insert ' ]['ips ' ]->execute (array (
555+             'ip '  => 0 ,
556+             'action '  => 'add ' ,
557+             'parameter '  => NULL ,
558+             'value '  => NULL ,
559+         ));
554560        foreach  ($ this  ->networks  as  $ network ) {
555561            $ file  = $ this  ->csv [$ network ['csv ' ]];
556562            $ csv  = fopen ($ file ['file ' ], 'r ' );
@@ -709,7 +715,7 @@ protected function createTmpRegisters()
709715     */ 
710716    protected  function  createTmpNetworks ()
711717    {
712-         $ ip  = 0 ;
718+         $ ip  = - 1 ;
713719        $ fields  = array ();
714720        $ values  = array ();
715721        $ format  = array ();
@@ -725,24 +731,28 @@ protected function createTmpNetworks()
725731            $ values [$ register ][] = 0 ;
726732        }
727733        $ pack  = implode ('' ,$ format ['pack ' ]);
728-         $ empty   = self ::packArray ($ pack ,$ fields );
729-         $ bin   = pack ('N ' ,$ ip  ).$ empty  ;
734+         $ binaryPrevData   = self ::packArray ($ pack ,$ fields );
735+         $ empty   = pack ('N ' ,0 ).$ binaryPrevData  ;
730736        $ this  ->meta ['networks ' ]['pack ' ] = implode ('/ ' ,$ format ['unpack ' ]);
731737        $ offset  = 0 ;
732-         $ this  ->meta ['networks ' ]['len ' ] = strlen ($ bin  );
738+         $ this  ->meta ['networks ' ]['len ' ] = strlen ($ empty  );
733739        $ this  ->meta ['index ' ][0 ] = 0 ;
734740        $ file  = $ this  ->temporaryDir .DIRECTORY_SEPARATOR .'networks. ' .uniqid ().'.tmp ' ;
735741        $ tmpFile  = fopen ($ file ,'w ' );
736742        $ ipinfo  = $ this  ->pdo ->query ('SELECT *  ' .'FROM `_ips` ORDER BY `ip` ASC, `action` DESC, `id` ASC; ' );
737743        while  ($ row  = $ ipinfo ->fetch ()) {
738744            if  ($ row ['ip ' ] !== $ ip ) {
739745                foreach  ($ values  as  $ param =>$ v ) {
740-                     $ fields [$ param ] = array_pop ($ v );
746+                     if  (!empty ($ param )) $ fields [$ param ] = array_pop ($ v );
747+                 }
748+                 $ binaryData  = self ::packArray ($ pack ,$ fields );
749+                 if  ($ binaryData  !== $ binaryPrevData  || empty ($ ip )) {
750+                     fwrite ($ tmpFile , pack ('N ' , $ ip ) . $ binaryData );
751+                     $ octet  = (int )long2ip ($ ip );
752+                     if  (!isset ($ this  ->meta ['index ' ][$ octet ])) $ this  ->meta ['index ' ][$ octet ] = $ offset ;
753+                     $ offset ++;
754+                     $ binaryPrevData  = $ binaryData ;
741755                }
742-                 fwrite ($ tmpFile ,pack ('N ' ,$ ip ).self ::packArray ($ pack ,$ fields ));
743-                 $ octet  = (int )long2ip ($ ip );
744-                 if  (!isset ($ this  ->meta ['index ' ][$ octet ])) $ this  ->meta ['index ' ][$ octet ] = $ offset ;
745-                 $ offset ++;
746756                $ ip  = $ row ['ip ' ];
747757            }
748758            if  ($ row ['action ' ] == 'remove ' ) {
@@ -756,12 +766,15 @@ protected function createTmpNetworks()
756766        }
757767        if  ($ ip  < ip2long ('255.255.255.255 ' )) {
758768            foreach  ($ values  as  $ param  => $ v ) {
759-                 $ fields [$ param ] = array_pop ($ v );
769+                 if  (!empty ($ param )) $ fields [$ param ] = array_pop ($ v );
770+             }
771+             $ binaryData  = self ::packArray ($ pack , $ fields );
772+             if  ($ binaryData  !== $ binaryPrevData ) {
773+                 $ octet  = (int )long2ip ($ ip );
774+                 if  (!isset ($ this  ->meta ['index ' ][$ octet ])) $ this  ->meta ['index ' ][$ octet ] = $ offset ;
775+                 $ offset ++;
776+                 fwrite ($ tmpFile , pack ('N ' , $ ip ) . $ binaryData );
760777            }
761-             $ octet  = (int )long2ip ($ ip );
762-             if  (!isset ($ this  ->meta ['index ' ][$ octet ])) $ this  ->meta ['index ' ][$ octet ] = $ offset ;
763-             $ offset ++;
764-             fwrite ($ tmpFile , pack ('N ' , $ ip ) . self ::packArray ($ pack , $ fields ));
765778        }
766779        $ this  ->meta ['networks ' ]['items ' ] = $ offset ;
767780        for ($ i =1 ;$ i <=255 ;$ i ++) {
0 commit comments