Katalog to coś takiego:
home/
file1.html
file2.html
Another_Dir/
file8.html
Sub_Dir/
file19.html
Używam tej samej klasy PHP Zip, która jest używana w PHPMyAdmin http://trac.seagullproject.org/browser/branches/0.6-bugfix/lib/other/Zip.php . Nie jestem pewien, jak spakować katalog, a nie tylko plik. Oto, co mam do tej pory:
$aFiles = $this->da->getDirTree($target);
/* $aFiles is something like, path => filetime
Array
(
[home] =>
[home/file1.html] => 1251280379
[home/file2.html] => 1251280377
etc...
)
*/
$zip = & new Zip();
foreach( $aFiles as $fileLocation => $time ){
$file = $target . "/" . $fileLocation;
if ( is_file($file) ){
$buffer = file_get_contents($file);
$zip->addFile($buffer, $fileLocation);
}
}
THEN_SOME_PHP_CLASS::toDownloadData($zip); // this bit works ok
ale kiedy próbuję rozpakować odpowiedni pobrany plik zip, otrzymuję komunikat „operacja niedozwolona”
Ten błąd występuje tylko wtedy, gdy próbuję rozpakować na komputerze Mac, kiedy rozpakuję za pomocą wiersza poleceń, plik rozpakuje się poprawnie. Czy podczas pobierania muszę wysyłać określony typ zawartości, obecnie „application / zip”
Odpowiedzi:
Oto prosta funkcja, która może rekurencyjnie skompresować dowolny plik lub katalog, wystarczy załadować rozszerzenie zip.
Nazwij to tak:
źródło
file_get_contents
i dodaje ciągi. zip nie obsługuje bezpośredniego dodawania plików?'/'
zDIRECTORY_SEPARATOR
aby to działało na Windows, oczywiście. W przeciwnym razie otrzymasz pełną ścieżkę (w tym nazwę dysku) w swoim ZIP, npC:\Users\...
.//
go,\
ponieważ w rzeczywistości powoduje to uszkodzenie wszystkich elementów w systemie Windows. Jeśli używasz wbudowanegoDIRECTORY_SEPARATOR
tak, jak powinieneś, nie ma potrzeby wymiany. To właśnie sztywne kodowanie/
powodowało, że niektórzy użytkownicy mieli problemy. Byłem trochę zdezorientowany, dlaczego otrzymuję puste archiwum. Moja wersja będzie działać poprawnie pod * nix i Windows.Kolejna rekurencyjna archiwizacja drzewa katalogów, zaimplementowana jako rozszerzenie ZipArchive. Jako bonus, dołączona jest funkcja pomocnicza do kompresji drzewa z pojedynczą instrukcją. Opcjonalna nazwa lokalna jest obsługiwana, podobnie jak w innych funkcjach ZipArchive. Kod obsługi błędów do dodania ...
źródło
Edytowałem Alix Axel , aby wziąć trzeci argrument, ustawiając ten trzeci argrument na
true
wszystkie pliki zostaną dodane do głównego katalogu, a nie bezpośrednio do folderu zip.Jeśli plik zip istnieje, plik zostanie również usunięty.
Przykład:
Struktura
true
zip trzeciego arkusza :Trzeci argrument
false
lub brakująca struktura zip:Edytowany kod:
źródło
$maindir
na preferowaną nazwę.ZASTOSOWANIE: thisfile.php? Dir =. / Path / to / folder (Po skompresowaniu rozpoczyna się również pobieranie :)
źródło
Spróbuj tego linku <- WIĘCEJ KODU ŹRÓDŁOWEGO TUTAJ
źródło
Oto mój kod dla Zip foldery i ich podfoldery oraz pliki i uczyń go do pobrania w formacie zip
W przypadku jakichkolwiek problemów z kodeksem daj mi znać.
źródło
Musiałem uruchomić tę funkcję Zip w systemie Mac OSX
więc zawsze spakowałem ten irytujący .DS_Store.
Dostosowałem https://stackoverflow.com/users/2019515/user2019515 , dołączając dodatkowe pliki Ignore.
SO, aby zignorować .DS_Store z zip, uruchamiasz
zipIt („/ ścieżka / do / folderu”, „/ ścieżka/do/skompresowanego.zip”, false, tablica („. DS_Store”));
źródło
Świetne rozwiązanie, ale do mojego systemu Windows potrzebuję modyfikacji. Poniżej kodu modyfikacji
źródło
Ten kod działa zarówno w systemie Windows, jak i Linux.
źródło
Oto moja wersja oparta na Alix, działa na Windows i miejmy nadzieję na * nix:
źródło
Oto prosta, łatwa do odczytania, rekurencyjna funkcja, która działa bardzo dobrze:
źródło
Po odpowiedzi @ user2019515 musiałem zająć się wykluczeniami z mojego archiwum. oto wynikowa funkcja z przykładem.
Funkcja Zip:
Jak tego użyć :
źródło