Pracuję ostatnio trochę z Laravelem, zatem w przyszłości może powstać kilka krótkich wpisów na ten temat. Dzisiaj pierwsza rzecz, prosta ale często przydatna – pakowanie plików do ZIP z opcjonalnym pobieraniem archiwum.
Tworzenie archiwum ZIP
Skorzystamy z klasy ZipArchive.
1 | use ZipArchive; |
Zaczniemy od krótkiej deklaracji ścieżki i nazwy nowego archiwum ZIP.
1 2 3 | $downloadDir= '../download'; $archiveFileName = 'archive.zip'; |
Tworzymy nowy obiekt klasy ZipArchive.
1 | $zip = new ZipArchive; |
Sprawdzamy, czy archiwum może być utworzone we wskazanej ścieżce. Tutaj za chwilę będziemy pakować pliki.
1 2 3 4 5 | if ($zip->open($downloadDir. '/' . $archiveFileName, ZipArchive::CREATE) === TRUE) { // tutaj pakujemy pliki $zip->close(); } |
Pakowanie plików
Sprawdzamy, czy plik istnieje, a następnie dorzucamy do do paczki. Opcjonalnie możemy przypisać mu nową nazwę.
1 2 3 4 | $file = '../path/to/file.pdf'; if(file_exists($file)) $zip->addFile($file, 'New Name.pdf'); |
Pobieranie archiwum ZIP
Przekazujemy ścieżkę pliku, jego nazwę…
1 2 3 4 | if(file_exists($downloadDir. '/' . $archiveFileName)) { return response()->download($downloadDir. '/' . $archiveFileName, $archiveFileName, $headers); } |
Naszym nagłówkiem będzie:
1 2 3 | $headers = array( 'Content-Type' => 'application/octet-stream', ); |
Po wykonaniu skryptu przeglądarka uruchomi pobieranie.
Podsumowanie
To w zasadzie wszystko. Pełny kod możecie podejrzeć na moim GitHubie.
Tagi: archiwum • Laravel • PHP • pobieranie • top • zip • ZipArchive