Skip to content

Commit 45b61fc

Browse files
authored
3.16.1
-improve import tar.gz
1 parent 5a35fc7 commit 45b61fc

1 file changed

Lines changed: 22 additions & 13 deletions

File tree

lite.php

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
session_start();
77
$bg=2;
88
$step=20;
9-
$version="3.16.0";
9+
$version="3.16.1";
1010
$bbs=['False','True'];
1111
$deny=['sqlite_sequence'];
1212
$js=(file_exists('jquery.js')?"/jquery.js":"https://code.jquery.com/jquery-1.12.4.min.js");
@@ -353,13 +353,15 @@ public function imp_xml($fname,$fbody) {
353353
}
354354
public function imp_sqlite($fname,$fbody) {
355355
$res=[];
356-
if(substr($fbody,0,15) !="SQLite format 3") $res[$fname]="No SQLite file";
356+
if(substr($fbody,0,15) !="SQLite format 3") $res[$fname]="No sqlite file";
357357
$file=pathinfo($fname);
358358
$new=$this->dir.$this->sanitize($file['filename']).$this->ext;
359+
if(!file_exists($new)) {
359360
$sfile=fopen($new,"wb");
360361
if(!$sfile) $res[$fname]="Unable to create sqlite file";
361362
fwrite($sfile,$fbody);
362363
fclose($sfile);
364+
} else $res[$fname]="File already exists";
363365
return $res;
364366
}
365367
public function tb_structure($tb,$fopt,$tab='') {
@@ -1130,7 +1132,7 @@ public function getTables($db) {
11301132
$db=$ed->sg[1];
11311133
$tb=$ed->sg[2];
11321134
$ed->con->exec("DELETE FROM ".$tb);
1133-
$ed->redir("5/$db",['ok'=>"Table is empty"]);
1135+
$ed->redir("20/$db/$tb",['ok'=>"Table is empty"]);
11341136
break;
11351137

11361138
case "26"://drop table
@@ -1210,35 +1212,42 @@ public function getTables($db) {
12101212
}
12111213
if(@function_exists('gzopen')) {
12121214
preg_match("/^(.*)\.(sql|csv|json|xml|db|sqlite|tar)$/i",$fext[1],$ex);
1213-
if($ex[2]!='tar') {
12141215
$gzfile=@gzopen($tmp,'rb');
12151216
if(!$gzfile) $ed->redir("5/$db",['err'=>"Can't open GZ file"]);
12161217
$e='';
12171218
while(!gzeof($gzfile)) {
12181219
$e.=gzgetc($gzfile);
12191220
}
12201221
gzclose($gzfile);
1221-
}
12221222
if($ex[2]=='sql') $e=preg_split($rgex,$ed->utf($e),-1,PREG_SPLIT_NO_EMPTY);
12231223
elseif($ex[2]=='csv') $e=$ed->imp_csv($ex[1],$e);
12241224
elseif($ex[2]=='json') $e=$ed->imp_json($ex[1],$e);
12251225
elseif($ex[2]=='xml') $e=$ed->imp_xml($ex[1],$e);
12261226
elseif(in_array($ex[2],['db',substr($ed->ext,1)])) $lite[]=$ed->imp_sqlite($ex[1],$e);
12271227
elseif($ex[2]=='tar') {
1228-
$e=[];$tmpTar=$ed->dir.'_tmp.tar';
1229-
file_put_contents($tmpTar, gzdecode(file_get_contents($tmp)));
1230-
$pd=new PharData($tmpTar);
1231-
foreach($pd as $en) {
1232-
$fi=$en->getFilename();
1228+
$fh=gzopen($tmp,'rb');
1229+
$fsize=strlen($e);
1230+
$total=0;$e=[];
1231+
while(false !== ($block=gzread($fh,512))) {
1232+
$total+=512;
1233+
$t=unpack("a100name/a8mode/a8uid/a8gid/a12size/a12mtime",$block);
1234+
$file=['name'=>$t['name'],'mode'=>@octdec($t['mode']),'uid'=>@octdec($t['uid']),'size'=>@octdec($t['size']),'mtime'=>@octdec($t['mtime'])];
1235+
$file['bytes']=($file['size'] + 511) & ~511;
1236+
if($file['bytes'] > 0) {
1237+
$block=gzread($fh,$file['bytes']);
1238+
$f_b=substr($block,0,$file['size']);
1239+
$fi=trim($file['name']);
12331240
preg_match("/^(.*)\.(sql|csv|json|xml|db|sqlite)$/i",$fi,$fx);
1234-
$f_b=$en->getPathName();
12351241
if($fx[2]=='sql') $e[]=preg_split($rgex,$ed->utf($f_b),-1,PREG_SPLIT_NO_EMPTY);
12361242
elseif($fx[2]=='csv') $e[]=$ed->imp_csv($fx[1],$f_b);
12371243
elseif($fx[2]=='json') $e[]=$ed->imp_json($fx[1],$f_b);
12381244
elseif($fx[2]=='xml') $e[]=$ed->imp_xml($fx[1],$f_b);
1239-
elseif(in_array($fx[2],['db',substr($ed->ext,1)])) $lite[]=$ed->imp_sqlite($fx[1],file_get_contents($f_b));
1245+
elseif(in_array($fx[2],['db',substr($ed->ext,1)])) $lite[]=$ed->imp_sqlite($fx[1],$f_b);
1246+
$total+=$file['bytes'];
1247+
}
1248+
if($total >= $fsize-1024) break;
12401249
}
1241-
@unlink($tmpTar);
1250+
gzclose($fh);
12421251
if(!empty($e)) $e=call_user_func_array('array_merge',$e);
12431252
}
12441253
} else {

0 commit comments

Comments
 (0)