Hướng dẫn dùng the phar trong PHP

Phar là một phần mở rộng php cung cấp các phương tiện để phân phối mã dưới dạng một kho lưu trữ duy nhất, không phải trích xuất vào một thư mục trước khi sử dụng.

Khái niệm này tương tự như JVM Jars: mỗi tệp lưu trữ trở thành một thư mục ảo nơi các tệp có thể được truy cập. Tuy nhiên, thư mục ảo không giới hạn tải lớp, nhưng bạn có thể mở và đọc các tệp nội bộ như thể nó đang giải mã vào một thư mục.

Phar có sẵn cho PHP 5.3 và mới hơn. Trong bài viết này, chúng ta thấy một ví dụ đồ chơi về việc sử dụng Phar và thế giới thực nơi chúng ta đặt Học thuyết 2 ORM vào một tệp duy nhất.

Xin chào ví dụ thế giới

Trong ví dụ về đồ chơi của chúng tôi, chúng tôi muốn đóng gói tệp này dưới dạng Phar ( hello.php ):

Một ứng dụng thực tế sẽ bao gồm nhiều tệp và thư mục, nhưng mục đích của ví dụ đầu tiên này là để lấy răng của chúng ta trên máy móc.

Việc đóng gói phar xảy ra với mã PHP, mà chúng ta có thể đặt trong tập lệnh xây dựng ( gói.php ):

#!/usr/bin/env php
setStub('buildFromDirectory(); $archive->buildFromIterator();

hello.phar là (tương ứng) đường dẫn và tên của kho lưu trữ được tạo.

Sơ khai mà chúng ta đặt là mã PHP là những gì sẽ được thực thi khi Phar được truy cập bởi mã bên ngoài; phải luôn bắt đầu bằng Phar :: mapPhar () và luôn kết thúc bằng __HALT_COMPILER (). Tuy nhiên, chúng tôi có thể làm những gì chúng tôi muốn ở giữa sơ khai, từ bao gồm các tệp để thiết lập tự động tải hoặc thực thi mã.

Bây giờ, hãy thực thi tập lệnh xây dựng của chúng tôi và sử dụng Phar mới:

[10:52:02][[email protected]:~/phar_example]$ php build.php
[10:52:03][[email protected]:~/phar_example]$ php hello.phar
Hello, world of Phar!

Bây giờ ứng dụng của chúng tôi có thể được phân phối dưới dạng một tệp, ví dụ qua HTTP, mà không phải lo lắng về giải nén hoặc cấp phép tệp.

Cách sử dụng thực tế: Học thuyết 2

Ví dụ thực tế hơn này sử dụng Phar trên mã thực, bao gồm Học thuyết ORM 2. Nó hiện được đóng gói dưới dạng tarball, cần được giải nén trước khi sử dụng; tuy nhiên, hầu hết các máy móc đang thiết lập tự động tải cho các thư mục khác nhau bên trong gói, Doctrine / và Symfony /. Thư mục thứ hai cũng không thể giải thích được đặt theo Học thuyết / một, vi phạm quy ước PSR-0 (vì nó chứa các lớp Symfony \ ...).

Hãy lấy gói tarball và mở rộng nó thành một thư mục:

wget http://www.doctrine-project.org/downloads/DoctrineORM-2.1.1-full.tar.gz
tar xvzf DoctrineORM-2.1.1-full.tar.gz 

Bây giờ chúng ta có thể viết một tập lệnh xây dựng, phar-pack.php:

buildFromDirectory('doctrine-orm', '/Doctrine\/(Common|DBAL|ORM)/');
$archive->buildFromDirectory('doctrine-orm/Doctrine', '/Symfony/');
$archive->setStub(file_get_contents('phar-bootstrap.php'));

Kịch bản lệnh này sẽ bao gồm mã từ sơ khai để thực thi khi đưa vào Phar, phar-bootstrap.php:

register();
$classLoader = new \Doctrine\Common\ClassLoader('Symfony', $basePath);
$classLoader->register();

__HALT_COMPILER();

Một ví dụ về việc sử dụng Doctrine 2 làm Phar đơn giản hơn nhiều so với thiết lập tự động tải:

Tôi đã đặt các tập lệnh trên Github để thuận tiện cho bạn. Tôi đã làm theo ví dụ về mã đóng gói của Eric Clemmons cho việc di chuyển học thuyết .

Muốn thêm?

Phar không giới hạn trong việc lưu trữ các tập tin. Nó cung cấp nhiều tính năng hơn, chẳng hạn như nén dựa trên định dạng zip hoặc băm kho lưu trữ bằng MD5 hoặc SHA1 với xác minh tự động.

Vì mã đóng gói Phar hoạt động từ kho lưu trữ, nó không thể dễ dàng tạo các tệp tạm thời, thực tế khiến việc sử dụng phương pháp này cho các ứng dụng phức tạp hơn. Nó cũng đòi hỏi một cách khác nhau để truy cập các tệp để đọc và thực thi, bằng cách chèn trước chúng với phar: //archive.phar / tiền tố.

Tuy nhiên, đây có vẻ là một cách thực tế để phân phối các thư viện hoặc các tiện ích dòng lệnh, có thể được tải xuống và bao gồm mà không có vấn đề gì liên quan đến include_path hoặc tự động tải. Trên thực tế, trình cài đặt của PEAR2 đang được phân phối dưới dạng Phar.

3 hữu ích 0 bình luận 10k xem chia sẻ