Hướng dẫn how zip all files in folder in php? - cách nén tất cả các tệp trong thư mục trong php?

Tôi đã tìm thấy bài đăng này trong Google là kết quả hàng đầu thứ hai, đầu tiên là sử dụng Exec :(

Dù sao, trong khi điều này không chính xác là nhu cầu của tôi .. Tôi quyết định đăng một câu trả lời cho những người khác với phiên bản nhanh chóng nhưng mở rộng của tôi về điều này.

Các tính năng tập lệnh

  • Đặt tên tệp sao lưu từng ngày, tiền tố-yyyy-mm-dd-postfix.extension
  • Báo cáo tệp / Thiếu
  • Danh sách sao lưu trước đó
  • Không zip / bao gồm các bản sao lưu trước đó;)
  • Hoạt động trên Windows/Linux

Dù sao, vào kịch bản .. mặc dù nó có thể trông rất nhiều .. hãy nhớ rằng có dư thừa ở đây .. vì vậy hãy thoải mái xóa các phần báo cáo khi cần thiết ...

Ngoài ra, nó cũng có thể trông lộn xộn và một số thứ có thể được làm sạch dễ dàng ... vì vậy đừng bình luận về nó, đó chỉ là một kịch bản nhanh với những bình luận cơ bản được ném vào .. không phải để sử dụng trực tiếp .. nhưng dễ dàng để làm sạch để sử dụng trực tiếp !!

Trong ví dụ này, nó được chạy từ một thư mục bên trong thư mục gốc www / public_html .. vì vậy chỉ cần di chuyển lên một thư mục để đến gốc.

PHP Example: ZipArchive - Mayhem

'; // CHECK IF BACKUP ALREADY DONE if (file_exists($sFileZip)) { // IF BACKUP EXISTS... SHOW MESSAGE AND THATS IT echo "

Backup Already Exists

"; echo 'File Name: ',$sFileZip,'
'; echo 'File Size: ',$sFileZip,'
'; echo "
"; exit; // No point loading our function below ;) } else { // NO BACKUP FOR TODAY.. SO START IT AND SHOW SCRIPT SETTINGS echo "

Script Settings

"; echo 'Backup Directory: ',$pathBase,'
'; echo 'Backup Save File: ',$sFileZip,'
'; echo "
"; // CREATE ZIPPER AND LOOP DIRECTORY FOR SUB STUFF $oZip = new ZipArchive; $oZip->open($sFileZip, ZipArchive::CREATE | ZipArchive::OVERWRITE); $oFilesWrk = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathBase),RecursiveIteratorIterator::LEAVES_ONLY); foreach ($oFilesWrk as $oKey => $eFileWrk) { // VARIOUS NAMING FORMATS OF THE CURRENT FILE / DIRECTORY.. RELATE & ABSOLUTE $sFilePath = substr($eFileWrk->getPathname(),$iBaseLen, strlen($eFileWrk->getPathname())- $iBaseLen); $sFileReal = $eFileWrk->getRealPath(); $sFile = $eFileWrk->getBasename(); // WINDOWS CORRECT SLASHES $sMyFP = str_replace('\\', '/', $sFileReal); if (file_exists($sMyFP)) { // CHECK IF THE FILE WE ARE LOOPING EXISTS if ($sFile!="." && $sFile!="..") { // MAKE SURE NOT DIRECTORY / . || .. // CHECK IF FILE HAS BACKUP NAME PREFIX/POSTFIX... If So, Dont Add It,, List It if (substr($sFile,0, $iPreLen)!=$zipPREFIX && substr($sFile,-1, $iPostLen + 4)!= $zipPOSTFIX.$zipEXTENSION) { $oFiles[] = $sMyFP; // LIST FILE AS DONE $oZip->addFile($sMyFP, $sFilePath); // APPEND TO THE ZIP FILE } else { $oFiles_Previous[] = $sMyFP; // LIST PREVIOUS BACKUP } } } else { $oFiles_Error[] = $sMyFP; // LIST FILE THAT DOES NOT EXIST } } $sZipStatus = $oZip->getStatusString(); // GET ZIP STATUS $oZip->close(); // WARNING: Close Required to append files, dont delete any files before this. // SHOW BACKUP STATUS / FILE INFO echo "

Backup Stats

"; echo "Zipper Status: " . $sZipStatus . "
"; echo "Finished Zip Script: ",$sFileZip,"
"; echo "Zip Size: ",human_filesize($sFileZip),"
"; echo "
"; // SHOW ANY PREVIOUS BACKUP FILES echo "

Previous Backups Count(" . count($oFiles_Previous) . ")

"; foreach ($oFiles_Previous as $eFile) { echo basename($eFile) . ", Size: " . human_filesize($eFile) . "
"; } echo "
"; // SHOW ANY FILES THAT DID NOT EXIST?? if (count($oFiles_Error)>0) { echo "

Error Files, Count(" . count($oFiles_Error) . ")

"; foreach ($oFiles_Error as $eFile) { echo $eFile . "
"; } echo "
"; } // SHOW ANY FILES THAT HAVE BEEN ADDED TO THE ZIP echo "

Added Files, Count(" . count($oFiles) . ")

"; foreach ($oFiles as $eFile) { echo $eFile . "
"; } echo "
"; } // CONVERT FILENAME INTO A FILESIZE AS Bytes/Kilobytes/Megabytes,Giga,Tera,Peta function human_filesize($sFile, $decimals = 2) { $bytes = filesize($sFile); $sz = 'BKMGTP'; $factor = floor((strlen($bytes) - 1) / 3); return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor]; } ?>

NÓ LÀM GÌ??

Nó sẽ chỉ đơn giản là zip nội dung hoàn chỉnh của biến $ pathbase và lưu trữ zip trong cùng một thư mục đó. Nó thực hiện một phát hiện đơn giản cho các bản sao lưu trước đó và bỏ qua chúng.

CRON Sao lưu

Kịch bản này tôi vừa thử nghiệm trên Linux và hoạt động tốt từ một công việc cron với việc sử dụng URL tuyệt đối cho Pathbase.

Làm cách nào để tải xuống nhiều tệp zip trong PHP?

Bên trong là gì?..
Sử dụng nén các tệp đã tải lên vào một zip ..
Các thư viện hiện có để tạo zip của nhiều tệp ..
Về plugin ziparchive ..
Thực hiện mã để tạo tệp zip của nhiều tệp đã tải lên ..
Cấu trúc tập tin ..
HTML với tải lên tệp và tùy chọn tải xuống zip ..
Tạo zip bằng Php Ziparchive ..

Làm thế nào tải xuống tất cả các tệp từ thư mục trong PHP?

PHP $ name = $ _get ['nama'];Tải xuống ($ name);Tải xuống chức năng ($ name) {$ file = $ nama_fail;if (file_exists ($ file)) {header ('nội dung mô tả: chuyển tệp');Tiêu đề ('loại nội dung: Ứng dụng/-dòng octet');Tiêu đề ('Xác định nội dung: tệp đính kèm; fileName ='.