2012-12-14 40 views
6

Tôi hiện đang thử nghiệm với cơ chế tiện ích mở rộng cho khuôn khổ của mình. Mỗi mô-đun bao gồm ít nhất một tệp PHP (xác định một lớp đơn) và biểu định kiểu XSL nhưng có khả năng một số tệp khác có thể được tham gia nên tôi ngay lập tức nghĩ đến việc sử dụng Phars.Tối thiểu PHP Phar stub

Mọi thứ đang phát cùng nhau nhưng tôi nhận thấy nếu tôi không sử dụng createDefaultStub() và thay vào đó đã tạo Phar như trong đoạn mã sau thì kết quả là một phần tư kích thước - và nhỏ hơn phiên bản đã nén.

$phar = new Phar('Example.phar', 0, 'Example.phar'); 
$phar->buildFromDirectory(__DIR__ . '/src'); 
$phar->setStub('<?php __HALT_COMPILER();'); 
$phar->setSignatureAlgorithm(Phar::SHA256); 
$phar->compress(Phar::GZ); 

kích thước tập tin Ví dụ:

8799 14 Dec 09:37 ExampleCog.phar (using createDefaultStub()) 
2143 14 Dec 10:08 ExampleCog.phar (using __HALT_COMPILER()) 
3373 14 Dec 10:08 ExampleCog.phar.gz (consistent with either method) 

Các Phar chỉ đơn giản là sẽ được sử dụng để giữ các tập tin mô-đun cụ thể đi kèm với nhau và sẽ được đưa vào một khuôn khổ - chạy độc lập sẽ không thực hiện bất kỳ ý nghĩa trong này bối cảnh. Tôi đoán câu hỏi của tôi là, những gì tôi bỏ lỡ trên - nếu bất cứ điều gì - với việc sử dụng mã sơ khai tối thiểu? Và tại sao phiên bản nén luôn có cùng kích thước?

Trả lời

7

Tôi đoán câu hỏi của mình là, tôi đang bỏ lỡ điều gì - nếu có gì - bằng cách sử dụng mã sơ khai tối thiểu?

Trong file format documentation, stub mặc định được mô tả như sau:

stub mặc định cho Phar dựa trên tệp nén Phar chứa xấp xỉ 7k mã để trích xuất nội dung của Phar và thực hiện chúng.

Nó sau đó trỏ tới Phar::createDefaultStub, mà nói:

Phương pháp này cung cấp một phương pháp đơn giản và dễ dàng để tạo ra một sơ khai mà sẽ chạy một tập tin khởi động từ kho lưu trữ Phar. Ngoài ra, các tệp khác nhau có thể được chỉ định để chạy tệp nén phar từ dòng lệnh so với thông qua máy chủ web. Trình nạp cũng gọi Phar :: interceptFileFuncs() để cho phép dễ dàng gói ứng dụng PHP truy cập vào hệ thống tệp. Nếu không có phần mở rộng phar, trình nạp bộ nạp sẽ trích xuất tệp nén phar vào một thư mục tạm thời và sau đó hoạt động trên các tệp. Chức năng tắt máy sẽ xóa các tập tin tạm thời khi thoát.

Nhấn mạnh được thêm vào, vì đó là lý do gốc mặc định quá lớn. Nếu bạn có thể giả định rằng bạn sẽ luôn hoạt động dưới PHP 5.3 trở lên, có thể bạn không cần phải có sơ đồ mặc định và có thể gắn với số tối thiểu __HALT_COMPILER

Và tại sao phiên bản nén luôn có cùng kích thước?

Lặn một lần nữa vào tài liệu định dạng tệp, có một comparison between archive formats, giải thích rằng Phar thực hiện cả nén tệp trên một tệp và toàn bộ lưu trữ. Có thể bạn đang thấy các kích thước nén tương tự vì gzip không thể nén dữ liệu thêm nữa. Đây là suy đoán.

+2

+1: Rất hữu ích và được viết tốt. –