*.tar

Forum / Coding / PHP & MySQL
rompers am 16.04.2007 um 05:16
Hallo !

Wie kann ich mit PHP *.tar files entpacken?

Bin für jede hilfe dankbar.
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php

Markus René Einicher am 16.04.2007 um 07:09
Hm auf php.net hats jemand mit der pack() Funktion gemacht, müsste mir das aber selber mal genau anschauen. Wenn du PHP auf einem Linux Rechner laufen hast gehts ganz einfach mit der exec() Funktion sofern diese aktiviert ist.
rompers am 16.04.2007 um 07:16
Hallo !

exec hat mein anbieter deactiviert gibt es noch andere möglichkeiten ?
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php

Markus René Einicher am 16.04.2007 um 07:22
+qt=php#
function Tar_by_Vladson($tar_file='backup.tar') {
$this->tar_file = $tar_file;
$this->fp = fopen($this->tar_file, "wb");
$tree = $this->build_tree();
$this->process_tree($tree);
fputs($this->fp, pack("a512", ""));
fclose($this->fp);
}
#qt+

Ich finde diesen Teil aus einer fremden Klasse ziemlich interessant, habe das jetzt aber nur auf die Schnelle gefunden und erst am Abend Zeit das aufzuarbeiten.

Im Prinzip macht der aber eine ganz normale Datei auf uns speichert sie über einen Binärstrom als .tar Archiv. Ich denke aber dass es vielleicht sogar eine von der Installation unabhängige Klasse zum tar packen gibt, werd später meine Kollegen fragen. Sag am Abend bescheid.
rompers am 16.04.2007 um 07:28
mh habe mit jetzt 5 minuten das angesehn kann damit nix anfangen
warte dann mal bis heute abend
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php

Markus René Einicher am 16.04.2007 um 09:16
Ja ch hab das aus dem Zusammenhang gerissen aber in den php.net Kommentaren hat jemand eine ganze Klasse gepostet mit der man .tar machen kann:

+qt=PHP#<?php
/***********************************************************
* Title: Classic-TAR based backup script v0.0.1-dev
**********************************************************/

Class Tar_by_Vladson {
var $tar_file;
var $fp;
function Tar_by_Vladson($tar_file='backup.tar') {
$this->tar_file = $tar_file;
$this->fp = fopen($this->tar_file, "wb");
$tree = $this->build_tree();
$this->process_tree($tree);
fputs($this->fp, pack("a512", ""));
fclose($this->fp);
}
function build_tree($dir='.'){
$handle = opendir($dir);
while(false !== ($readdir = readdir($handle))){
if($readdir != '.' && $readdir != '..'){
$path = $dir.'/'.$readdir;
if (is_file($path)) {
$output[] = substr($path, 2, strlen($path));
} elseif (is_dir($path)) {
$output[] = substr($path, 2, strlen($path)).'/';
$output = array_merge($output, $this->build_tree($path));
}
}
}
closedir($handle);
return $output;
}
function process_tree($tree) {
foreach( $tree as $pathfile ) {
if (substr($pathfile, -1, 1) == '/') {
fputs($this->fp, $this->build_header($pathfile));
} elseif ($pathfile != $this->tar_file) {
$filesize = filesize($pathfile);
$block_len = 512*ceil($filesize/512)-$filesize;
fputs($this->fp, $this->build_header($pathfile));
fputs($this->fp, file_get_contents($pathfile));
fputs($this->fp, pack("a".$block_len, ""));
}
}
return true;
}
function build_header($pathfile) {
if ( strlen($pathfile) > 99 ) die('Error');
$info = stat($pathfile);
if ( is_dir($pathfile) ) $info[7] = 0;
$header = pack("a100a8a8a8a12A12a8a1a100a255",
$pathfile,
sprintf("%6s ", decoct($info[2])),
sprintf("%6s ", decoct($info[4])),
sprintf("%6s ", decoct($info[5])),
sprintf("%11s ",decoct($info[7])),
sprintf("%11s", decoct($info[9])),
sprintf("%8s", " "),
(is_dir($pathfile) ? "5" : "0"),
"",
""
);
clearstatcache();
$checksum = 0;
for ($i=0; $i<512; $i++) {
$checksum += ord(substr($header,$i,1));
}
$checksum_data = pack(
"a8", sprintf("%6s ", decoct($checksum))
);
for ($i=0, $j=148; $i<7; $i++, $j++)
$header[$j] = $checksum_data[$i];
return $header;
}
}

header('Content-type: text/plain');
$start_time = array_sum(explode(chr(32), microtime()));
$tar = & new Tar_by_Vladson();
$finish_time = array_sum(explode(chr(32), microtime()));
printf("The time taken: %f seconds", ($finish_time - $start_time));
?>#qt+

Ich werd mich am Abend dazusetzen und das mal testen und dann schreib ich hier gleich ein Tutorial drübe r sofern das verwendbar ist.

Muss weiterarbeiten,
mfg
rompers am 16.04.2007 um 09:22
ne ich will ja keine machen
ich will ja eine +f#entpacken#f+
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php

Markus René Einicher am 17.04.2007 um 13:11
Hab was gefunden:
http://www.devshed.com/c/a/PHP/TAR-File-Management-With-PHP-Archive-Tar/

Allerdings erfordert das die PEAR-Umgebung, sagt dir das was?
rompers am 17.04.2007 um 16:40
mh hab ich jetzt mal probiert aber ohne erfolg vieleicht sollte ich es lieber lassen :(
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php

Markus René Einicher am 17.04.2007 um 18:30
Ja, mit "ohne Erfolg" tapp ich ziemlich im Dunkeln. Was hast denn gemacht und was ist passiert (Einbinden, Aufrufen, Fehlermeldung usw.)
rompers am 18.04.2007 um 05:38
nichts bekomme nur ne weiße seite
schau ich dann auf den ftp dann hat sich da auch nichts getan :(
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php

Markus René Einicher am 18.04.2007 um 07:42
Sieht nach unterdrückten Fehlermeldungen aus.

Hast du error_reporting abgestellt? Mach mal an den Anfang deines Skripts das:

+qt=PHP#<?php
error_reporting('E_ALL')
?>#qt+

Weil irgendwie sollte er schon schimpfen wenns nit geht.

Ich hab ja die Befürchtung dass er die Umgebung der PEAR installiert braucht und eine zusätzliche Bibliothek :/
rompers am 18.04.2007 um 21:30
mh die seite bleibt weiß :(
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php

Markus René Einicher am 19.04.2007 um 12:14
Poste mal den Teil vom Quelltext wo du das einbindest und den Teil wo dus verwendest wenn möglich ...
rompers am 11.10.2009 um 12:08
hab da jetzt was gefunden nur wenn ich nen verzeichnis mit drin habe entpackt er das verzeichnis nicht
if(isset($_GET['tar'])) {
$tarfile=fopen($_GET['tar'],"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."<br>";
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);
}</code>
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php

rompers am 21.10.2009 um 23:43
hat keiner eine idee ???

bitte helft mir
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php

Markus René Einicher am 23.10.2009 um 09:35
Aso, dachte dass hier nur das Datum falsch is und der Thread noch von 2005 is ;-)

Was genau passiert denn? Gibt er dir einen Fehler aus, macht er einen leeren Ordner oder sowas ... komm leider erst frühestens morgen dazu mir das Script genauer anzuschauen.
rompers am 24.10.2009 um 14:57
na er macht error wegen der ordner er erstellt die dateien dann auch nicht weil er die ordner nicht erstellt
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php

rompers am 16.01.2010 um 16:14
schieb frag hat da schon mal jemand geschaut
mfg rompers
1
2
3
<?php
echo 'wir sind die guten';
?>
Quelltext: php