2009-03-07 37 views
51

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

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 kia. Tôi tìm thấy 3 cặp chức năng mà có thể thực hiện công việc, nhưng tôi không thể quyết định cái nào để sử dụng:

Những cặp các chức năng bạn sẽ giới thiệu và tại sao?

UPDATE: Tôi chỉ đọc FAQ zlib:

Định dạng gzip (gzencode) được thiết kế để giữ lại các thông tin thư mục về một tập tin 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 kênh trong bộ nhớ và truyền thông, và có tiêu đề và đoạn giới thiệu gọn nhẹ hơn nhiều và sử dụng kiểm tra tính toàn vẹn nhanh hơn gzip.

+1

'gzdecode()' dường như không có sẵn trong php, vì vậy hãy tránh nó. –

+1

'gzdecode()' được định nghĩa chỉ cho PHP 5.4.0 hoặc mới hơn: http://php.net/manual/en/function.gzdecode.php –

Trả lời

62

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

  • gzencode() sử dụng định dạng tập tin GZIP, giống như các công cụ dòng lệnh gzip. Định dạng tệp này có tiêu đề chứa siêu dữ liệu tùy chọn, dữ liệu nén DEFLATE và chân trang chứa kiểm tra độ dài CRC32 và kiểm tra độ dài.
  • gzcompress() sử dụng định dạng ZLIB. Nó có tiêu đề ngắn hơn chỉ để xác định định dạng nén, dữ liệu nén DEFLATE và chân trang chứa tổng kiểm tra ADLER32.
  • gzdeflate() 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 bên dưới mui xe. 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 chỉ nén chuỗi). gzencode()gzcompress() cả hai đều thêm tổng kiểm tra, vì vậy tính toàn vẹn của tệp lưu trữ có thể được xác minh, điều này có thể hữu ích đối với các phương thức 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 bất kỳ siêu dữ liệu bổ sung nào thì gzdeflate() sẽ đủ. Đối với 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 so với định dạng gzcompress() (định dạng ZLIB) trong số các công cụ khác.

+3

Hầu như chính xác. Tôi đã nghiên cứu một chút, và có vẻ như gzencode không có bất kỳ dữ liệu đầu trang nào - nó chỉ có dữ liệu tiêu đề khác nhau. –

+2

@Milan Tôi đoán bạn có nghĩa là "gzcompress không phải là không có bất kỳ dữ liệu tiêu đề - nó chỉ có dữ liệu tiêu đề khác nhau". – thomasrutter

4

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

39

Tôi không phải là chuyên gia về 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 dự đoán đang diễn ra ở đây và thông tin mờ được thu hút.

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 trong thực tế, không có thuật toán nào.

Không có điều nào như "thuật toán GZIP". GZIP sử dụng thuật toán DEFLATE và đặt khung dữ liệu xung quanh dữ liệu được 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à một nhận xét. Siêu dữ liệu này là tùy chọn, và nhiều gzippers chỉ bỏ qua nó.

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

Đây là tất cả trong RET IETF 1950, 19511952.

Để 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.

+0

Cảm ơn bạn đã làm rõ điều này. Cho đến khi đọc điều này không có gì khác có ý nghĩa ... – rvighne

Các vấn đề liên quan