Hướng dẫn dùng install zlib trong PHP

Tôi có một lượng lớn dữ liệu cần di chuyển bằng cách sử dụng hai tập lệnh PHP: một ở phía máy khách sử dụng tập lệnh PHP dòng lệnh và một phía sau Apache. Tôi ĐĂNG dữ liệu lên phía máy chủ và sử dụng luồng đầu vào php: // để lưu dữ liệu đó ở đầu máy chủ web. Để tránh đạt đến bất kỳ giới hạn bộ nhớ nào, dữ liệu được tách thành các phần 500kB cho mỗi yêu cầu POST. Tất cả điều này hoạt động tốt.

Bây giờ, để tiết kiệm băng thông và tăng tốc độ, tôi muốn nén dữ liệu trước khi gửi và giải nén khi nhận được ở đầu bên kia. Tôi đã tìm thấy 3 cặp hàm có thể thực hiện công việc, nhưng tôi không thể quyết định sử dụng cặp nào:

  • gzencode / gzdecode
  • gzdeflate / gzinflate
  • gzcompress / gzuncompress

Bạn muốn giới thiệu cặp hàm nào và tại sao?

CẬP NHẬT: Tôi vừa đọc Câu hỏi thường gặp về zlib:

Định dạng gzip ( gzencode) được thiết kế để giữ lại thông tin thư mục về một tệp duy nhất, chẳng hạn như tên và ngày sửa đổi cuối cùng. Mặt khác, định dạng zlib ( gzcompress) được thiết kế cho các ứng dụng trong bộ nhớ và kênh liên lạc, có tiêu đề và đoạn giới thiệu nhỏ gọn hơn nhiều và sử dụng kiểm tra tính toàn vẹn nhanh hơn gzip.

  • php
  • compression
  • gzip

72 hữu ích 2 bình luận 30k xem chia sẻ

answer

96

Hướng dẫn dùng install zlib trong PHP

Tất cả những thứ này đều có thể được sử dụng. Có sự khác biệt nhỏ giữa ba:

  • gzencode () sử dụng định dạng tệp GZIP, giống nhưgzipcông cụ dòng lệnh. Định dạng tệp này có đầu trang chứa siêu dữ liệu tùy chọn, dữ liệu nén DEFLATE và chân trang chứa tổng kiểm tra CRC32 và kiểm tra độ dài.
  • gzcompress () sử dụng định dạng ZLIB. Nó có một tiêu đề ngắn hơn chỉ phục vụ để xác định định dạng nén, dữ liệu nén DEFLATE và một chân trang chứa tổng kiểm tra ADLER32.
  • gzdeflate () tự sử dụng thuật toán DEFLATE thô, là cơ sở cho cả hai định dạng khác.

Cả ba đều sử dụng cùng một thuật toán, vì vậy chúng sẽ không khác nhau về tốc độ hoặc hiệu quả. gzencode()thêm khả năng bao gồm tên tệp gốc và dữ liệu môi trường khác (điều này không được sử dụng khi bạn chỉ nén một chuỗi). gzencode()gzcompress()cả hai đều thêm tổng kiểm tra, do đó, tính toàn vẹn của kho lưu trữ có thể được xác minh, điều này có thể hữu ích so với các phương pháp lưu trữ và truyền tải không đáng tin cậy. Nếu mọi thứ được lưu trữ cục bộ và bạn không cần thêm siêu dữ liệu nào thì gzdeflate()cũng đủ. Để có tính di động, tôi khuyên bạn nên sử dụng gzencode()(định dạng GZIP) có thể được hỗ trợ tốt hơn gzcompress()(định dạng ZLIB) trong số các công cụ khác.

Khi nén các chuỗi rất ngắn, chi phí chung của mỗi phương pháp trở nên có liên quan vì đối với đầu vào rất ngắn, chi phí chung có thể bao gồm một phần đáng kể của đầu ra. Chi phí cho mỗi phương pháp, được đo bằng cách nén một chuỗi rỗng, là:

  • gzencode('') = 20 byte
  • gzcompress('') = 8 byte
  • gzdeflate('') = 2 byte

96 hữu ích 2 bình luận chia sẻ

answer

48

Tôi không phải là chuyên gia PHP và không thể trả lời câu hỏi được đặt ra, nhưng có vẻ như có rất nhiều phỏng đoán đang diễn ra ở đây và thông tin mờ nhạt đang được cung cấp.

DEFLATE là tên của thuật toán nén được sử dụng bởi ZLIB, GZIP và các thuật toán khác. Về lý thuyết, GZIP hỗ trợ các thuật toán nén thay thế, nhưng trên thực tế thì không có.

Không có cái gọi là "thuật toán GZIP". GZIP sử dụng thuật toán DEFLATE và đặt dữ liệu đóng khung xung quanh dữ liệu nén. Với GZIP, bạn có thể thêm những thứ như tên tệp, thời gian của tệp, CRC, thậm chí là nhận xét. Tuy nhiên, siêu dữ liệu này là tùy chọn và nhiều gzippers chỉ bỏ qua nó.

ZLIB cũng tương tự, ngoại trừ với một tập siêu dữ liệu khác, hạn chế hơn và một tiêu đề 2 byte cụ thể.

Đây là tất cả trong IETF RFCs 1950 , 1951 và 1952 .

Nói rằng "thuật toán gzip nén tốt hơn DEFLATE" chỉ là vô nghĩa. Không có thuật toán gzip. Và thuật toán được sử dụng ở định dạng GZIP là DEFLATE .

48 hữu ích 0 bình luận chia sẻ

answer

7

Tất cả các phương pháp về cơ bản là giống nhau, sự khác biệt giữa chúng chủ yếu là ở tiêu đề. Cá nhân tôi sử dụng gzencode, điều này sẽ tạo ra đầu ra tương đương với lời gọi dòng lệnh tới tiện ích gzip.

7 hữu ích 0 bình luận chia sẻ

answer

0

Tôi đã phải giải nén một tệp nén gzip trong PHP bằng C ++. Tôi phát hiện ra rằng PHP gzencodevà đối tác của nó gzdecodesử dụng Z_NO_FLUSHphương pháp và áp dụng ở cuối khối dữ liệu để mã hóa / giải mã Z_FINISH. Ví dụ / hướng dẫn bằng C hiển thị trên trang web zlib có thể được sử dụng để giải nén và nén các tệp gziped từ PHP, miễn là bit cửa sổ và mức bộ nhớ được thay đổi để cho phép giảm phát và thổi phồng gzip.

Thêm: Có vẻ như hầu hết mọi người trong chủ đề này không biết "Phương pháp nén" có nghĩa là gì.

0 hữu ích 0 bình luận chia sẻ

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm