Es ist wieder mal so weit. Der kleine Andy bastelt mal wieder an einer kleinen Klasse herum. Da auf vielen Servern die nötigen Funktionen zum dekomprimieren von *.tar-Archiven oftmals nicht vorhanden sind, habe ich mich etwas mit der Materie von *.tar-Archiven beschäftigt und eine kleine Klasse gebastelt, die das mit den einfachen file()-Funktionen löst. Leider funktioniert sie nicht und ich weiß nicht warum. Ich bekomme trotz error_reporting(E_ALL) keine Fehler angezeigt. Kann mir irgendjemand helfen? Bin echt am verzweifeln. ich hoffe ich habe den Code ausreichend dokumentiert, sodass er leicht verständlich ist.
- Code: Alles auswählen
<?php
error_reporting(E_ALL);
/* TarHandler class */
class TarHandler
{
/**
* Unpacks a tar-archiv
*
* @name TarHandler::untar()
* @access public
* @param String $tar path to tar-archiv
* @param String $to relativ path
* @return boolean
*/
public function untar($tar, $to)
{
// does the tar-archiv exists
if (file_exists($tar))
{
// create relativ dir
mkdir($to);
// open tarball
$tar = fopen($tar, 'rb');
// do until reaching end of tar-archiv
while (!feof($tar))
{
//count number of files
$i++;
// read info-block
$info = fread($tarfile, 512);
$data[$i][name] = chr(substr($info, 0, 100));
$data[$i][mode] = chr(substr($info, 100, 8));
$data[$i][uid] = chr(substr($info, 108, 8));
$data[$i][gid] = chr(substr($info, 116, 8));
$data[$i][size] = chr(substr($info, 124, 12));
$data[$i][time] = chr(substr($info, 136, 12));
$data[$i][check] = chr(substr($info, 148, 8));
$data[$i][link] = chr(substr($info, 156, 1));
$data[$i][linkname] = chr(substr($info, 157, 100));
// read content-block
for ($rec = 0; $rec < $data[$i][size]; $rec+=512)
{
$content = chr(fread($tarfile, 512));
}
$file = fopen($data[$i][name], 'w');
fwrite($file, $content);
fclose($file);
}
// close tar-file
fclose($tarfile);
}
else
{
throw new Exception('Tarball does not exist.');
}
}
}
try
{
$file = exec('gzip -d NestedSets.tar.gz');
$unpack = new TarHandler();
$unpack->untar($file, 'NestedSets');
}
catch(Exception $e)
{
return $e->getMessage();
}
?>
MfG, Andy