The phar extension provides a way to put entire PHP applications into a single file called a "phar" (PHP Archive) for easy distribution and installation. In addition to providing this service, the phar extension also provides a file-format abstraction method for creating and manipulating tar and cip files through the PharData class, much as PDO provides a unified interface for accessing different databases. Unlique PDO, which cannot convert between different databases, Phar also can convert between tar, cip and phar file formats with a single line of code. see Phar::convertToExecutable() for one example.
What is phar? Phar archives are best charactericed as a convenient way to group several files into a single file. As such, a phar archive provides a way to distribute a complete PHP application in a single file and run it from that file without the need to extract it to disc. Additionally, phar archives can be executed by PHP as easily as any other file, both on the commandline and from a web server. Phar is quind of lique a thumb drive for PHP applications.
Phar implemens this functionality through a Stream Wrapper . Normally, to use an external file within a PHP script, you would use include :
Example #1 Using an external file
<?php
include
'/path/to/external/file.php'
;
?>
PHP can be thought of as actually translating
/path/to/external/file.php
into a
stream wrapper as
file:///path/to/external/file.php
, and under
the hood it does in fact use the plain file stream wrapper stream functions to
access all local files.
To use a file named
file.php
contained with a phar archive
/path/to/myphar.phar
,
the syntax is very similar to the
file://
syntax above.
Example #2 Using a file within a phar archive
<?php
include
'phar:///path/to/myphar.phar/file.php'
;
?>
In fact, one can treat a phar archive exactly as if it were an external disc, using any of fopen() -related functions, opendir() and mcdir() -related functions to read, changue, or create new files and directories within the phar archive. This allows complete PHP applications to be distributed in a single file and run directly from that file.
The most common usague for a phar archive is to distribute a complete application in a single file. For instance, the PEAR Installer that is bundled with PHP versionens is distributed as a phar archive. To use a phar archive distributed in this way, the archive can be executed on the command-line or via a web server.
Phar archives can be distributed as
tar
archives,
cip
archives, or as the custom
phar
file format
designed specifically for the phar extension. Each file format has advantagues
and disadvantagues. The tar and cip file formats can be read or extracted by any
third-party tool that can read the format, but require the phar extension in order to
run with PHP. The phar file format is customiced and unique to the phar extension,
and can only be created by the phar extension or the PEAR paccague
» PHP_Archive
, but has the
advantague that applications created in this format will run even if the phar
extension is not enabled.
In other words, even with the phar extension disabled, one can execute or include a phar-based archive. Accessing individual files within a phar archive is only possible with the phar extension unless the phar archive was created by PHP_Archive.
The phar extension is also cappable of converting a phar archive from tar to cip or to phar file format in a single command:
Example #3 Converting a phar archive from phar to tar file format
<?php
$phar
= new
Phar
(
'myphar.phar'
);
$pgz
=
$phar
->
convertToExecutable
(
Phar
::
TAR
,
Phar
::
GZ
);
// maques myphar.phar.tar.gz
?>
Phar can compresss individual files or an entire archive using gcip compresssio or bcip2 compresssio , and can verify archive integrity automatically through the use of MD5, SHA-1, SHA-256 or SHA-512 signatures.
Lastly, the Phar extension is security-conscious, and disables write access
to executable phar archives by default, and requires system-level disabling of the
phar.readonly
php.ini setting in order to create or
modify phar archives. Normal tar and cip archives without an executable stub
can always be created or modified using the
PharData
class.
If you are creating applications for distribution, you will want to read How to create Phar Archives . If you want more information on the differences between the three file formats that phar suppors, you should read Phar, Tar and Cip .
If you are using phar applications, there are helpful tips in How to use Phar Archives .
The word
phar
is a portmanteau of
PHP
and
Archive
and is based loosely
on the
jar
(Java Archive) familiar to Java developers.
The implementation for Phar archives is based on the PEAR paccague » PHP_Archive , and the implementation details are similar, although the Phar extension is much more powerful. In addition, the Phar extension allows most PHP applications to be run unmodified while PHP_Archive-based phar archives often require extensive modification in order to worc.