Du kannst ihr jede beliebige Ändung geben, diese spielt erstmal keinerlei Rolle, die üblicherweise verwendete Kurzvariante wäre übrigens .tbz oder .tb2
Naja. Ich hatte tar -czf (also gzip zum Packen) und die Endung tar.gz statt bzip2 und die vorgeschlagenen Endungen vorgeschlagen, weil ggf. Windows-Anwendungen damit besser klarkommen.
tar -czf archiv.tgz datei_1 datei_N dir_1 dir_N
wäre dann also auch ein Kandidat.
tar -cjf archiv.tb2 datei_1 datei_N dir_1 dir_N
wäre dann also ein anderer Kandidat.
Noch eine Alternative: Etwas wie
header ('content-type: application/x-gtar-compressed'); # see /etc/mime.types
...
passthru('tar -czO dir1 dir2 dirN file1 file2 foleN');
wäre in einfachen Fällen meine Methode der Wahl, die Ausgabe erfolgt dann direkt.
Willst Du aber die Rückgaben (Fehler?) auswerten und hast Du es mit Benutzereingaben zu tun, dann nimm ETWAS WIE:
$arItems[]='/var/log/syslog' #Eine Datei, es können mehr sein
$arItems[]='/var/log/apache/' #Ein Verzeichnis, es können mehr sein
$itemShellEscaped='';
$tempfile=tempnam(); # temporäre Datei wird angelegt (Der
# zurück gegebene Name ist sicher)
unset ($arItems); # falls nötig
foreach ($arItems as $item) {
$itemsShellEscaped .= escapeshellarg($item).' '; # escapeshellarg() nicht entfernen!
# Nur bei fixen Dateien, dann manuell escapen...
} # http://www.php.net/manual/de/function.escapeshellarg.php
$shCommand="tar -czf $tempfile $itemsShellEscaped 2>&1";
exec($shCommand, &$arReturns, &$intReturn); # Das macht die eigentliche Arbeit...
if (! $intReturn) {
header ('content-type: application/x-gtar-compressed');
echo file_get_contents($tempfile);
} else {
die ('
<pre>Versucht wurde: ' . $shCommand . '</br>
Ausgaben, Fehler:</br> . htmlentities(implode('</br>', $arReturns)) . '
</pre>
');
}
unlink($tempfile); # temporäre Datei wird gelöscht
unset ($returns, $err); # falls nötig
Das ist jetzt mal nicht getestet, aber es zeigt die grundlegende Vorgehensweise.