Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Spakowanie folderu (komenda linuksowa)
Forum PHP.pl > Forum > Przedszkole
RSVx
  1. <?php
  2. exec("tar -zcvf abc.zip abc.txt");
  3. ?>


W ten sposób tworzę archiwum z jednego pliku txt. W jaki sposób mam spakować folder w którym są pliki i foldery. Nie znam komend linuksa (szukałem, ale znalazłem właśnie tylko spakowanie pliku), a właśnie tutaj mogę je użyć. Bardzo mi na tym zależy.

DZIĘKI
Aquarius
z tego co dobrze pamiętam to:

Kod
tar cf




tak się składa że akurat miałem pod ręką jedną taka funkcję...


  1. <?php
  2. function downloadArchive($down) {
  3.  global $cfg;
  4.  $current = "";
  5.  
  6.  if (tfb_isValidPath($down)) {
  7.      // This prevents the script from getting killed off when running lengthy tar jobs.
  8.      @ini_set("max_execution_time", 3600);
  9.      $down = $cfg["path"].$down;
  10.      $arTemp = explode("/", $down);
  11.      if (count($arTemp) > 1) {
  12.          array_pop($arTemp);
  13.          $current = implode("/", $arTemp);
  14.      }
  15.      // Find out if we're really trying to access a file within the
  16.      // proper directory structure. Sadly, this way requires that $cfg["path"]
  17.      // is a REAL path, not a symlinked one. Also check if $cfg["path"] is part
  18.      // of the REAL path.
  19.      if (is_dir($down)) {
  20.          $sendname = basename($down);
  21.          switch ($cfg["package_type"]) {
  22.              Case "tar":
  23.                  $command = "tar cf - \"".addslashes($sendname)."\"";
  24.                  break;
  25.              Case "zip":
  26.                  $command = "zip -0r - \"".addslashes($sendname)."\"";
  27.                  break;
  28.              default:
  29.                  $cfg["package_type"] = "tar";
  30.                  $command = "tar cf - \"".addslashes($sendname)."\"";
  31.                  break;
  32.          }
  33. ?>





może się przyda winksmiley.jpg
HellRider
Google.pl -> tar linux

Drugi wynik http://lowfatlinux.com/linux-tar.html

Ehh, z przykładami, z flagami, jak na tacy. Osobiście wierzę, że szybciej google poda odpowiedź niż forum smile.gif
RSVx
Mnie akurat google zawodzi, więc zostaje tylko to forum smile.gif

  1. <?php
  2. exec("tar -xvf  files/foty.zip");
  3. ?>


Ten kawałek kody zgodnie z http://lowfatlinux.com/linux-tar.html powinien mi rozpakować archiwum, ale tego nie robi. Wie ktoś może czemu??

Proszę bardzo o pomoc, ostatni RAZ, please....
webdice
Z tego co ja się orientuje, to tar nie obsługuje formatu zip. Skorzystaj z unzip (o ile masz zainstalowane).
RSVx
Pewnie mam zainstalowane, ale z jakimi parametrami go mam wywołać??
Znalazłem tą stronkę http://linux.about.com/od/commands/l/blcmdl1_unzip.htm , ale po angielsku. Nie bardzo rozumiem. Jeśli mógłbyś napisać z jakimi parametrami ... TO WIELKIE DZIĘX
Aquarius
a podałem ci kodzik z funkcją - całkiem fajną z resztą smile.gif
była tam komenda na pakowanie w formacie zip:

Kod
zip -0r
michalkjp
RSVx

Ponieważ nie używałeś Linuksa, to zabierasz się do problemu trochę ze złej strony. Jeśli chcesz spakować pojedynczy plik

gzip -9 plik.txt (zamiast -9 możesz dać mniejsze stopnie kompresji, będzie szybciej)

dostaniesz plik.txt.gz

Gdy chcesz spakować katalog musisz napisać

tar cvf nazwa_archiwum.tar katalog

następnie go kompresujesz gzip'em jak w pierwszym przykładzie. Nie nadawaj rozszerzenia zip, bo możesz zmylić jakiś głupszy program do rozpakowywania.

Zamiast gzip możesz użyć innych programów np. bzip2, zip lub rar.

W każdym bądź razie musisz zapamiętać – nie da się spakować katalogu tak jak pojedynczego pliku – najpierw archiwum tar'em a następnie kompresja.
RSVx
Wielkie Dzięki Aquarius (ale teraz chcę rozpakować)

Ej Webmasterzy,Webmasterzy :/, nie czytacie mnie w ogóle... JA CHCĘ TERAZ ROZPAKOWAĆ PLIK files/foty.zip, (bo już udało mi się go spakować dzięki waszej pomocy). I teraz jak unzip'em to wypakować questionmark.gif
michalkjp
A czym pakowałeś, bo już się pogubiłem?

Jeśli zip'em, to unzip będzie najlepszy.

Jeśli jest tak naprawdę tar.gz (a ty dałeś .zip), to tar zxvf powinno działać.

To, że napisałem dłuższą instrukcję, to nie dlatego, że nie czytałem, tylko dlatego, że widziałem "tar zcvf plik.zip" smile.gif

(gzip to nie zip)
RSVx
  1. <?php
  2. exec("tar -cf abc.zip abc/");
  3. ?>

Tak spakowałem... WIN RAR mi to otworzy. Teraz spakowałem folder foty win rar'em do zip'a, przeslalem to na server i chcę to rozpakować, ale
  1. <?php
  2. exec("tar -xvf  files/foty.zip");
  3. ?>

powyższa instrukcja mi nie dzila
Aquarius
no ja tak samo myślałem że nadal chcesz pakować winksmiley.jpg

ja proponowałbym ci tak:

Kod
unzip -o nazwa.archiwum.zip -d katalog_docelowy


-o - spowoduje rozpakowanie i nadpisanie plików (jeżeli takowe istnieją już)
-d - możesz sprecyzować gdzie ma rozpakować
RSVx
DZIĘKI WSZYSTKIM... (szkoda że mi tylko nie działa... ale może sobie jakoś poradzę). Pewnie Admin lub Moderator mnie opieprzy że pisze taki post, więc wyjaśnię dlaczego to robię:

1) Mógłbym kliknąć na 'Pomógł', ale niestety mi nie działa więc tego nie zrobię biggrin.gif
2) Zajęło wam to trochę czasu więc dlatego ma PISZE BIG THX

POZDRO
michalkjp
RSVx




Eh... Źle mnie zrozumiałeś

1 ) Nie rób tar -cf abc.zip abc/ bo nie dostajesz pliku spakowanego zip'em tylko archiwum .tar – to, że WinRAR to otwiera dowodzi tylko tego, że należy do grupy mądrzejszych programów nie patrzących się na rozszerzenie, tylko sprawdza nagłówek pliku.

2) Aquarius podał Ci polecenie, którym możesz rozpakować plik zip, który wysłałeś na serwer.

Krótki manual v2:

Kompresja pliku - gzip

gzip -{1..9 – poziom kompresji} plik.txt

otrzymujesz plik.txt.gz (to nie jest zip)

Kompresja pliku - bzip2

bzip2 -{1..9 – poziom kompresji} plik.txt

otrzymujesz plik.txt.bz2

Dekompresja pliku – gzip

gzip -d plik.txt.gz

otrzymujesz plik.txt

Dekompresja pliku – bzip2

bzip2 -d plik.txt.bz2

otrzymujesz plik.txt

Archiwizacja katalogu – tar + gzip

tar cvf katalog.tar katalog/

gzip -{1..9 – poziom kompresji} katalog.tar

otrzymujesz plik katalog.tar.gz

Archiwizacja katalogu – tar + bzip2

tar cvf katalog.tar katalog/

bzip2 -{1..9 – poziom kompresji} katalog.tar

otrzymujesz plik katalog.tar.bz2

Dekompresja archiwum tar.gz

tar zxvf katalog.tar.gz

Dekompresja archiwum tar.bz2

tar xjvf katalog.tar.bz2




Proponuję stosować powyższe na serwerach uniksowych, bo tam zawsze jest gzip i bzip2 a zip'a i unzip'a może nie być.
Aquarius
właśnie tak jak michalkjp napisał
jak spakujesz TAR'em plik/folder z roszerzeniem .zip to w rzeczywistości to nie będzie plik w formacie ZIP, będzie miał on tylko rozszerzenie .zip
jeżeli chcesz otrzymać format ZIP - musisz stosować się do komend ZIPa, tak więc nie-pakować TARem

ja akurat problemu nie mam, to czego nie ma na serwerze w standardzie - to sobie doinstaluję
ale ty powinieneś stosować komend tar, gzip i bzip2
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.