Entfernen der Ordnerstruktur beim Erstellen eines Tar aus einem Ordner

872
StevenBullen

Ok, ich möchte nicht noch mehr Zeit damit verschwenden, dies zu untersuchen, aber ich möchte eine .tar-Option zum Herunterladen anstelle von nur zip anbieten.

 $archive = "/home/stevenbu/public_html/temp/".$twitter_name.".tar"; $directory = "/home/stevenbu/public_html/temp/".$twitter_name; exec("tar -cf $archive $directory"); 

Das Problem ist, dass, wenn ich die .tar extrahiere, 5 Ordner tief sind. Ich möchte keine Ordner und nur die Dateien in der .tar

Danke vielmals

1
Nicht wirklich eine PHP-Frage, eher eine Teerfrage. AJ. vor 13 Jahren 0
und tar hat keine Option für Junk-Ordner ... pavium vor 13 Jahren 0
Obwohl es sich nicht direkt auf Ihre Frage bezieht, betrachten Sie immer ** die Möglichkeit, dass jemand * `$ (rm -rf ~)` * als ihren Twitter-Namen angibt. grawity vor 13 Jahren 0
@AJ Es ist PHP bezogen, da es von PHP Exec ausgeführt wird und nicht direkt. Was in bestimmten Situationen einen Unterschied macht. @ grawity Vielen Dank für das Heads-up, aber Twitter lässt diesen Namen nicht zu und Benutzer müssen sich bei Twitter authentifizieren, um das Skript verwenden zu können. Der Twitter-Name kommt von mir, nicht von ihnen. StevenBullen vor 13 Jahren 0

2 Antworten auf die Frage

1
Ahe

Es ist schon eine Weile her, seit ich PHP zuletzt benutzt habe, aber

exec("cd /home/stevenbu/public_html/temp/;tar -cf $archive $directory"); 

würde in der Schale helfen.

Das funktioniert zwar, aber stattdessen musste ich && anstelle von; Andernfalls wurde das Standardverzeichnis wiederhergestellt. exec ("cd / home / stevenbu / public_html / temp /; tar -cf $ archive $ directory"); StevenBullen vor 13 Jahren 0
0
grawity
$parent = "/home/stevenbu/public_html/temp"; $dir = $twitter_name; $archive = $twitter_name.".tgz";  exec('tar -cz -f '.escapeshellarg($archive).' -C '.escapeshellarg($parent).' '.escapeshellarg($dir)); 

Dies ist etwas besser, da die .tar.gzDatei direkt an den Browser ausgegeben wird, anstatt eine temporäre Datei zu erstellen:

$parent = "/home/stevenbu/public_html/temp"; $dir = $twitter_name; $archive = $twitter_name.".tar.gz";  header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.addslashes($archive).'"'); passthru('tar -cz -C '.escapeshellarg($parent).' '.escapeshellarg($dir));