function untar($tarfile) { $tarfile=fopen($tarfile,"r"); $datainfo=""; $data=""; while (!feof($tarfile)) { $readdata=fread($tarfile,512); if (substr($readdata,257,5)=="ustar") { if (!empty($datainfo)) { $poscount=0; $name=""; while (substr($datainfo,$poscount,1)!=chr(0)) { $name.=substr($datainfo,$poscount,1); $poscount++; } if (!empty($name)) { if (substr($name,-1)=="/") { echo "Creating ".$name."
"; mkdir($name); } else { echo "Extracting ".$name."
"; $datasize=strlen($data)-1; while ((substr($data,$datasize,1)==chr(0)) && ($datasize>-1)) { $datasize--; } $datasize++; $filedata=""; for ($datacount=0;$datacount<$datasize;$datacount++) { $filedata.=substr($data,$datacount,1); } $file=fopen($name,"w"); fwrite($file,$filedata); fclose($file); } } $datainfo=$readdata; $data=""; } else { $datainfo=$readdata; } } else { $data.=$readdata; } } if (!empty($datainfo)) { $poscount=0; $name=""; while (substr($datainfo,$poscount,1)!=chr(0)) { $name.=substr($datainfo,$poscount,1); $poscount++; } if (!empty($name)) { if (substr($name,-1)=="/") { echo "Creating ".$name."
"; mkdir($name); } else { echo "Extracting ".$name."
"; $datasize=strlen($data)-1; while ((substr($data,$datasize,1)==chr(0)) && ($datasize>-1)) { $datasize--; } $datasize++; $filedata=""; for ($datacount=0;$datacount<$datasize;$datacount++) { $filedata.=substr($data,$datacount,1); } $file=fopen($name,"w"); fwrite($file,$filedata); fclose($file); } } $datainfo=$readdata; $data=""; } fclose($tarfile); }