Thêm từ chuỗi zip php

ZIP Slip - Mã mẫu tạo tệp bằng PHP

Mã mẫu



$zip = new ZipArchive();
$filename = "./zip-slip-test.zip";

if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
    exit("cannot open <$filename>\n");
}

$zip->addFromString("../../../../../../../../tmp/zip-slip-test.txt" . time(), "ZIP Slip Testing.\n");
// $zip->addFile("." . "/to.php", "/testfromfile.php");
echo "numfiles: " . $zip->numFiles . "\n";
echo "status:" . $zip->status . "\n";
$zip->close();
?>

https. //www. php. net/manual/en/class. kho lưu trữ zip. php

ZipArchive::extractTo() đã có bảo vệ ZIP Slip rồi

Người giới thiệu

Lỗ hổng trượt Zip

NIST - CVE-2019-0191 Chi tiết

$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
    $zip->addFromString('test.txt', 'file content goes here');
    $zip->close();
    echo 'ok';
} else {
    echo 'failed';
}
?>

Ghi chú. Để có tính di động tối đa, bạn nên luôn sử dụng dấu gạch chéo về phía trước (/) làm dấu tách thư mục trong tên tệp ZIP

Thông số

filename

Đường dẫn đến tệp cần thêm

entryname

Nếu được cung cấp, đây là tên cục bộ bên trong kho lưu trữ ZIP sẽ ghi đè lên filename

$entryname0

Đối với sao chép một phần, vị trí bắt đầu

$entryname1

Đối với sao chép một phần, chiều dài được sao chép, nếu 0 hoặc -1 thì toàn bộ tệp (bắt đầu từ $entryname0) được sử dụng

$entryname3

Bitmask bao gồm $entryname4, $entryname5, $entryname6, $entryname7. Hoạt động của các hằng số này được mô tả trên trang hằng số ZIP

Giá trị trả về

Trả về $entryname8 khi thành công hoặc $entryname9 khi thất bại

Nhật ký thay đổi

Phiên bảnMô tả8. 0. 0 / 1. 18. 0____8_______3 đã được thêm vào

ví dụ

Ví dụ này mở một bài kiểm tra lưu trữ tệp ZIP. zip và thêm tệp /path/to/index. txt. như tên mới. txt

Ví dụ #1 Mở và thêm NULL1= mới ZipArchive;
nếu ($zip->open('test. zip') === TRUE) {
$zip->addFile('/đường dẫn/đến/chỉ mục. txt', 'tên mới. txt');
$zip->đóng();
lặp lại 'ok';
} khác {
tiếng vang 'không thành công';
}
?>

ghi chú

Ghi chú

Khi một tệp được đặt để thêm vào kho lưu trữ, PHP sẽ khóa tệp. Khóa chỉ được giải phóng khi đối tượng ZipArchive đã được đóng, thông qua ZipArchive. close() hoặc đối tượng ZipArchive bị hủy. Điều này có thể khiến bạn không thể xóa tệp đang được thêm cho đến sau khi mở khóa

Lưu trữ Zip. addFromString ( chuỗi $localname, chuỗi $contents [, int $flags = ZipArchive. FL_OVERWRITE ] ). bool

Ghi chú. Để có tính di động tối đa, bạn nên luôn sử dụng dấu gạch chéo lên (/) làm dấu phân cách thư mục trong tên tệp ZIP

Thông số

localname

Tên của mục cần tạo

contents

Nội dung sử dụng để tạo mục nhập. Nó được sử dụng trong chế độ an toàn nhị phân

flags

Bitmask bao gồm ZipArchive::FL_OVERWRITE, ZipArchive::FL_ENC_GUESS, ZipArchive::FL_ENC_UTF_8, ZipArchive::FL_ENC_CP437. Hoạt động của các hằng số này được mô tả trên trang hằng số ZIP

$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
    $zip->addFromString('test.txt', 'file content goes here');
    $zip->close();
    echo 'ok';
} else {
    echo 'failed';
}
?>

Lưu trữ Zip. Hàm addFromString() là một hàm sẵn có trong PHP được sử dụng để thêm một tệp vào kho lưu trữ zip cùng với nội dung của nó

cú pháp

bool ZipArchive::addFromString(
    string $name, 
    string $content, 
    int $flags = ZipArchive::FL_OVERWRITE
)

Thông số. Hàm này chấp nhận ba tham số như đã đề cập ở trên và được mô tả bên dưới

  • tên $. Tham số này giữ tên của tập tin
  • nội dung $. Tham số này chứa nội dung được sử dụng để tạo mục nhập. Nội dung được sử dụng ở chế độ an toàn nhị phân
  • $flags. Tham số này giữ bitmask bao gồm ZipArchive. FL_OVERWRITE, ZipArchive. FL_ENC_GUESS, Lưu trữ Zip. FL_ENC_UTF_8 và ZipArchive. FL_ENC_CP437

Giá trị trả về. Hàm này trả về “true” nếu thành công và “false” nếu thất bại

ví dụ 1. Trong ví dụ này, chúng tôi sẽ tạo một tệp và thêm chuỗi vào tệp bằng PHP ZipArchive. hàm addFromString()

PHP




 

    // Create a new ZipArchive class

    $zip =new ZipArchive;

 

    2

    4 =$zip789

 

     2

     4  54  7

 

 9____33_______0

 9    2

 9_______36_______    5

    6_______33_______7    8

    6______34_______0

 9_______31_______9

 

 9_______34_______5

 9_______36_______// Create a new ZipArchive class8

 9_______33_______0     1    2

        4

        6

        8

 9_______33_______0 $zip1    2

    $zip4

$zip5

đầu ra

Thêm từ chuỗi zip php

 

ví dụ 2. Trong ví dụ này, chúng tôi sẽ tạo nhiều tệp và thêm chuỗi vào các tệp đó bằng cách sử dụng PHP ZipArchive. hàm addFromString()

Làm cách nào để thêm tệp vào zip trong php?

Tạo tệp zip mới và thêm tệp vào bên trong thư mục . $zip ->addFromString( 'demo_folder/new. txt' , 'văn bản sẽ được thêm vào văn bản mới. tệp txt' ); // Tất cả các tệp đã được thêm vào, vì vậy hãy đóng tệp zip.

Làm cách nào để chuyển đổi tệp zip trong php?

Dưới đây là các bước để chuyển đổi kho lưu trữ thành (các) tệp PHP bằng ezyZip. .
Nhấp vào "Chọn tệp zip để chuyển đổi" để mở trình chọn tệp. Nó sẽ liệt kê tất cả các tệp PHP trong kho lưu trữ ZIP
Nhấp vào nút "Lưu" màu xanh lá cây để lưu tệp php riêng lẻ vào ổ đĩa cục bộ của bạn

Làm cách nào để tải lên thư mục zip trong php?

Trong trình duyệt, nhập https. //máy chủ cục bộ/zip. php làm url và tệp sẽ được nén.

Làm cách nào để chuyển đổi thư mục thành tệp zip trong php?

file->isDir()) { // Lấy đường dẫn thực và tương đối cho file hiện tại $filePath = $file->getRealPath();