Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kompresja zip wypakowuje wszystkie pliki do folderu root
Forum PHP.pl > Forum > Przedszkole
Johnas
witam, mam taki kod do kompresowania plików pod ZIP...

  1. $rootPath = realpath('./');
  2. $zip = new ZipArchive;
  3. $zip->open('update-'.$version.'.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
  4. $files = new RecursiveIteratorIterator(
  5. new RecursiveDirectoryIterator($rootPath),
  6. RecursiveIteratorIterator::LEAVES_ONLY
  7. );
  8.  
  9. foreach ($files as $name => $file)
  10. {
  11. // Skip directories (they would be added automatically)
  12. if (!$file->isDir())
  13. {
  14. // Get real and relative path for current file
  15. $filePath = $file->getRealPath();
  16. $relativePath = substr($filePath, strlen($rootPath) + 1);
  17.  
  18. // Add current file to archive
  19. if (strpos($relativePath, "nstall\\") or strpos($relativePath, "ake-update.php") or strpos($relativePath, "old\\") or strpos($relativePath, "zepsuty") or strpos($relativePath, "lobal\config.php") or strpos($relativePath, "vs\\") or strpos($relativePath, "git\\") or strpos($relativePath, "idea\\") or strpos($relativePath, "pload\\") or strpos($relativePath, "cache\\") or strpos($relativePath, 'ploads\\') or strpos($relativePath, "emplates_c")) {
  20. echo "Ignoruje ".$relativePath."</br>";
  21. } else {
  22. echo "Dodano plik: ".$relativePath."</br>";
  23. $zip->addFile($filePath, $filePath);
  24. }
  25. }
  26. }
  27.  
  28. // Zip archive will be created only after closing object
  29. $zip->close();


i kiedy wypakowuje to wszystkie pliki wyrzuca mi do folderu... nie tworzy mi subfolderów i nie wypakowuje plików z subfolderów do nich

Wytłumaczy mi ktoś dlaczego ten z**any PHP tak wypakowuje pliki ?








Dziękuję za tak wyczerpujące odpowiedzi.... Jesteście fantastyczni,,,

Czy naprawdę PHP jest tak zje**ane że nie można kompresować plików za pomocą niego ? Może wprowadzą to w wersji 50.0.49 ?

a propos wypakowywania:

  1. define('_PATH', dirname(__FILE__));
  2.  
  3. // Zip file name
  4. $filename = 'update-0.0.1-alpha.zip';
  5. $zip = new ZipArchive;
  6. $res = $zip->open($filename);
  7. if ($res === TRUE) {
  8.  
  9. // Unzip path
  10. $path = _PATH."/";
  11.  
  12. // Extract file
  13. $zip->extractTo($path);
  14. $zip->close();
  15.  
  16. echo 'Aktualizacja zakończona pomyślnie!';
  17. } else {
  18. echo 'Błąd aktualizacji! Skontaktuj się z firmą <a href="mailto:kontakt@oxi-jon.pl">Bomb of Creative</a>!';
  19. }


robię to w ten piękny sposób... nie wiem czy może można jeszcze inaczej coś tu napisać bo to jest tak ****cie obszerny kod że pisałem go przez 4 lata świetlne
trueblue
Cytat(Johnas @ 29.08.2022, 08:32:34 ) *
i kiedy wypakowuje to wszystkie pliki wyrzuca mi do folderu... nie tworzy mi subfolderów i nie wypakowuje plików z subfolderów do nich

Sprawdzałeś przed wypakowaniem archiwum w środku, tj. czy faktycznie zawiera foldery i podfoldery?
Johnas
masz screena i jak widac to zawiera... problemem jest to że nie wiadomo czemu PHP ignoruje te foldery gdy jest utworzone przez PHP... Dziwny przypadek, chyba że to mój serwer ma takie odpały...
trueblue
Na screenie z zipem widać tylko folder global, nic więcej.
Johnas
bo żeby nie kompresować po kilka razy 110 mb wszystkich plików to kompresuje tylko jeden folder i jak wypakuje mi to do folderu test tworząc folder global to znaczy że działa, ale nie dzieję się tak pewnie dlatego że nie działa...
trueblue
Cytat(Johnas @ 29.08.2022, 09:48:53 ) *
jak wypakuje mi to do folderu test tworząc folder global to znaczy że działa, ale nie dzieję się tak pewnie dlatego że nie działa...

Napisz jeszcze raz po polsku.

Kompresujesz dla testów jeden folder, tak? I plik z tego folderu wypakowywują się do folderu aktualnego, a nie do folder global, tak?
Johnas
dokładnie... kompresuje folder global żeby sprawdzić czy będzie to dobrze się dekompresować, i w folderze test powinno stworzyć folder global, a w nim wypakować wszystkie pliki (niestety tak się nie dzieje)
trueblue
Według mnie przekazujesz niepoprawną wartość drugiego argumentu do metody addFile, to ma być lokalna ścieżka (w archiwum, a nie ścieżka systemowa).
Johnas
  1. $dir = dirname(__FILE__);
  2. $filePath = $file->getRealPath();
  3. $relativePath = substr($filePath, strlen($rootPath) + 1);
  4. $path_in_zip = str_replace($dir."\\", "", $filePath);


ani relativepath,aniani path_in_zip nie działa poprawnie jako drugi parametr
trueblue
Jaką wartość dla katalogu "global" ma zmienna $relativePath?
Johnas
Kod
Dodano plik: Accounts.php
Dodano plik: composer.json
Dodano plik: composer.lock
Dodano plik: composer.phar
Dodano plik: config.backup.php
Dodano plik: config.php
Dodano plik: Configuration.php
Dodano plik: Engine.php
Dodano plik: files\fonts\AbhayaLibre-Bold.ttf
Dodano plik: files\fonts\AbhayaLibre-ExtraBold.ttf
Dodano plik: files\fonts\AbhayaLibre-Medium.ttf
Dodano plik: files\fonts\AbhayaLibre-Regular.ttf
Dodano plik: files\fonts\AbhayaLibre-SemiBold.ttf
Dodano plik: files\fonts\AbrilFatface-Regular.otf


ignoruje nawet pliki w files\fonts\ --- wywala wszystko na jeden katalog
trueblue
Zamiast backslashy używaj slashy.
Johnas
ja pierdziele... na 90 % masz rację że to kwestia tego biggrin.gif


działa, dziękuje.... konflikt pomiędzy linuxem, a windowsem
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.