Hướng dẫn how do i zip a whole directory and download using php? - làm cách nào để nén toàn bộ thư mục và tải xuống bằng php?

35

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Vâng, trước hết, đây là cấu trúc thư mục của tôi:

images/

image1.png
image11.png
image111.png
image223.png
generate_zip.php

Và đây là của tôi tạo_zip.php:

open($zipname, ZipArchive::CREATE);
    foreach ($files as $file) {
      $zip->addFile($file);
    }
    $zip->close();

    header('Content-Type: application/zip');
    header("Content-Disposition: attachment; filename='adcs.zip'");
    header('Content-Length: ' . filesize($zipname));
    header("Location: adcs.zip");

    ?>

Làm thế nào để thu thập tất cả các tệp từ "hình ảnh/" thư mục, ngoại trừ "Generate_zip.php" và làm cho nó có thể tải xuống .zip? Trong trường hợp này, thư mục "hình ảnh/" luôn có một hình ảnh khác. Điều đó có thể không?

Hướng dẫn how do i zip a whole directory and download using php? - làm cách nào để nén toàn bộ thư mục và tải xuống bằng php?

T.Todua

50.3K19 Huy hiệu vàng218 Huy hiệu bạc214 Huy hiệu đồng19 gold badges218 silver badges214 bronze badges

hỏi ngày 17 tháng 7 năm 2013 lúc 19:26Jul 17, 2013 at 19:26

Ygor Montenegroygor MontenegroYgor Montenegro

6841 Huy hiệu vàng12 Huy hiệu bạc26 Huy hiệu đồng1 gold badge12 silver badges26 bronze badges

0

======= Giải pháp làm việc! ========

Bao gồm tất cả các nhân viên phụ:

new GoodZipArchive('path/to/input/folder',    'path/to/output_zip_file.zip') ;

Lúc đầu, bao gồm đoạn mã này.

Đã trả lời ngày 18 tháng 10 năm 2013 lúc 14:17Oct 18, 2013 at 14:17

Hướng dẫn how do i zip a whole directory and download using php? - làm cách nào để nén toàn bộ thư mục và tải xuống bằng php?

8

Điều này sẽ đảm bảo một tệp có phần mở rộng .PhP sẽ không được thêm vào:

   foreach ($files as $file) {
        if(!strstr($file,'.php')) $zip->addFile($file);
    }

Chỉnh sửa: Đây là bản viết lại mã đầy đủ:

open($zipname, ZipArchive::CREATE);
    if ($handle = opendir('.')) {
      while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != ".." && !strstr($entry,'.php')) {
            $zip->addFile($entry);
        }
      }
      closedir($handle);
    }

    $zip->close();

    header('Content-Type: application/zip');
    header("Content-Disposition: attachment; filename='adcs.zip'");
    header('Content-Length: ' . filesize($zipname));
    header("Location: adcs.zip");

    ?>

Đã trả lời ngày 17 tháng 7 năm 2013 lúc 19:28Jul 17, 2013 at 19:28

Skrillskrillsskrilled

5.2522 Huy hiệu vàng23 Huy hiệu bạc47 Huy hiệu đồng2 gold badges23 silver badges47 bronze badges

9

Vì bạn chỉ cần các tệp cụ thể từ một thư mục để tạo ziparchive, bạn có thể sử dụng hàm glob () để thực hiện việc này.

open($download, ZipArchive::CREATE);
    foreach (glob("images/*.png") as $file) { /* Add appropriate path to read content of zip */
        $zip->addFile($file);
    }
    $zip->close();
    header('Content-Type: application/zip');
    header("Content-Disposition: attachment; filename = $download");
    header('Content-Length: ' . filesize($download));
    header("Location: $download");
 ?>

Không sử dụng glob () nếu bạn cố gắng liệt kê các tệp trong một thư mục nơi lưu trữ rất nhiều tệp (hơn 100.000). Bạn nhận được một lỗi "Kích thước bộ nhớ được phép của Byte XYZ đã cạn kiệt ..." Lỗi.

ReadDir () là cách ổn định hơn.

Đã trả lời ngày 17 tháng 7 năm 2013 lúc 19:53Jul 17, 2013 at 19:53

Hướng dẫn how do i zip a whole directory and download using php? - làm cách nào để nén toàn bộ thư mục và tải xuống bằng php?

way2vinway2vinway2vin

2.3211 Huy hiệu vàng20 Huy hiệu bạc15 Huy hiệu đồng1 gold badge20 silver badges15 bronze badges

Tôi đã đi với giải pháp của Way2vin. Tuy nhiên tôi phải thay thế

$zip->addFile("{$file}");

with

$ zip-> addFromString (basename ($ file), file_get_contents ($ file));

mà đã làm thủ thuật. Tìm thấy cái này ở đây: Tạo tệp .zip

Đã trả lời ngày 26 tháng 12 năm 2019 lúc 11:55Dec 26, 2019 at 11:55

Hướng dẫn how do i zip a whole directory and download using php? - làm cách nào để nén toàn bộ thư mục và tải xuống bằng php?

Thay đổi vòng lặp của bạn thành điều này thành ngoại trừ generate_zip.php

 foreach ($files as $file) {
     if($file != "generate_zip.php"){
        $zip->addFile($file);
     }
 }

Đã trả lời ngày 17 tháng 7 năm 2013 lúc 19:45Jul 17, 2013 at 19:45

Hướng dẫn how do i zip a whole directory and download using php? - làm cách nào để nén toàn bộ thư mục và tải xuống bằng php?

shyammakwana.meshyammakwana.meshyammakwana.me

5.3342 Huy hiệu vàng26 Huy hiệu bạc49 Huy hiệu đồng2 gold badges26 silver badges49 bronze badges

open('sample.zip',  ZipArchive::CREATE);
$srcDir = "C:\\xampp\\htdocs\\uploads"; //location of the directory
$files= scandir($srcDir);
print_r($files);  // to check if files are actually coming in the array

unset($files[0],$files[1]);
foreach ($files as $file) {
    $zip->addFile($srcDir.'\\'.$file, $file);
    echo "bhandari";
}
$zip->close();

$file='sample.zip';
if (headers_sent()) {
    echo 'HTTP header already sent';
} else {
    if (!is_file($file)) {
        header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
        echo 'File not found';
    } else if (!is_readable($file)) {
        header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
        echo 'File not readable';
    } else {
        header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
        header("Content-Type: application/zip");
        header("Content-Transfer-Encoding: Binary");
        header("Content-Length: ".filesize($file));
        header("Content-Disposition: attachment; filename=\"".basename($file)."\"");
        while (ob_get_level()) {
            ob_end_clean();
          }
        readfile($file);
        exit;
    }
}



?>`enter code here`

Lưu ý: Đừng quên sử dụng ob_start (); Và kết thúc .

Hướng dẫn how do i zip a whole directory and download using php? - làm cách nào để nén toàn bộ thư mục và tải xuống bằng php?

crenshaw-dev

6.7343 huy hiệu vàng41 Huy hiệu bạc73 Huy hiệu đồng3 gold badges41 silver badges73 bronze badges

Đã trả lời ngày 23 tháng 4 năm 2019 lúc 19:41Apr 23, 2019 at 19:41

Sawansawansawan

32 huy hiệu đồng2 bronze badges

Làm thế nào tôi có thể zip một thư mục trong PHP?

Ở đây chúng tôi sử dụng XAMPP để chạy một máy chủ web cục bộ. Đặt các tệp PHP cùng với thư mục sẽ được nén trong C: \ Xampp \ HTDOCS (XAMPP được cài đặt trong ổ C: trong trường hợp này). Trong trình duyệt, nhập https: //localhost/zip.php dưới dạng URL và tệp sẽ được nén. Sau đó, một tệp zip mới được tạo có tên là 'tệp'.

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

Để thực hiện quá trình tạo tệp zip với các tệp được tải lên, tôi đã sử dụng lớp Ziparchive PHP.Lớp này được tải trong mã PHP và được tải với các nhị phân tệp được tải lên.Trong ví dụ này, người dùng có thể chọn và tải lên nhiều tệp thông qua biểu mẫu HTML.PHP ZipArchive class. This class is loaded in the PHP code and loaded with the uploaded file binaries. In this example, the user can choose and upload multiple files via a HTML form.

Làm cách nào để đặt PHP để tải xuống một thư mục cụ thể?

Tạo phiên Curl.Khai báo một biến và lưu trữ tên thư mục trong đó tệp đã tải xuống sẽ lưu.Sử dụng hàm basename () để trả về tên tệp basename nếu đường dẫn tệp được cung cấp dưới dạng tham số.Lưu tệp vào vị trí đã cho.

Làm cách nào để khóa toàn bộ một thư mục?

Để zip (nén) một tệp hoặc thư mục định vị tệp hoặc thư mục mà bạn muốn zip.Nhấn và giữ (hoặc nhấp chuột phải) tệp hoặc thư mục, chọn (hoặc trỏ đến) gửi đến, sau đó chọn thư mục nén (kéo dài).Một thư mục có khóa kéo mới có cùng tên được tạo trong cùng một vị trí.Press and hold (or right-click) the file or folder, select (or point to) Send to, and then select Compressed (zipped) folder. A new zipped folder with the same name is created in the same location.