IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Introducció

Deployment of web applications can be difficult and cumbersome if you don’t have the right tools. If you’ve ever deployed a Java application before, I’m sure you’ve heard of JAR files (which stands for “Java ARchive”). Everything executable/accessible that makes 
up the application can be bundled in a single JAR file, which is a blessing when it comes time to deploy.

PHAR (aka Php ARchive) és una solució anàloga al fitxer JAR de Java però aplicat a PHP. El suport per a PHAR està disponible des de la versió PHP 5.3

Phar

Es tracta d'un format binari amb una aplicació PHP empaquetada com podeu veure amb la comanda file:

 $ curl -sS https://getcomposer.org/installer | php
 $ file composer.phar 
  composer.phar: a /usr/bin/env php script executable (binary data)


symfony_crypto.001-550x297.png
symfony_crypto.003-550x305.png

Recursos

Avantatges i inconvenients

Distributing a application as Phar is not all sunshine, some things need to be considered:

Plus

  • The full application - preferably with all dependencies - is contained in one file
  • No unpacking needed. You drop it into your web server's document directory and it runs
  • Upgrades are easy, at least for the casual user. Download the new version, use it.
  • The application's code cannot easily be changed by attackers.
  • Since all depepdencies are included, setup is painless and you can run several versions in parallel.

Minus

  • Incremental updates are not possible. You always have to download the full new version.
  • Upgrading is a manual process unless automated otherwise. If the web app is distributed via a PEAR package, upgrading is much easier for admins.
  • Looking inside the application and changing files to add own changes is hard.
  • Access to the README file or upgrade instructions is hard opposed to "normally" distributed PHP applications where you see the README and open it in an editor.
  • Most web servers do not recognize .phar files, thus initial administrative work is needed until the situation gets fixed.

http://cweiske.de/tagebuch/php-phar-files.htm

Comanda phar

$ phar help

/usr/bin/phar <command> [options]

Commands: add compress delete extract help help-list info list meta-del
          meta-get meta-set pack sign stub-get stub-set tree version

add        Add entries to a PHAR package.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.
           ...          Any number of input files and directories. If -i is in
                        use then ONLY files and matching the given regular
                        expression are being packed. If -x is given then files
                        matching that regular expression are NOT being packed.

           Optional arguments:

           -a  <alias>  Provide an alias name for the phar file.
           -c  <algo>   Compression algorithm.
                          0      No compression
                          none   No compression
                          auto   Automatically select compression algorithm
                          gz     GZip compression
                          gzip   GZip compression
                          bz2    BZip2 compression
                          bzip2  BZip2 compression
           -i  <regex>  Specifies a regular expression for input files.
           -l  <level>  Number of preceding subdirectories to strip from file
                        entries
           -x  <regex>  Regular expression for input files to exclude.


compress   Compress or uncompress all files or a selected entry.

           Required arguments:

           -c  <algo>   Compression algorithm.
                          0      No compression
                          none   No compression
                          auto   Automatically select compression algorithm
                          gz     GZip compression
                          gzip   GZip compression
                          bz2    BZip2 compression
                          bzip2  BZip2 compression
           -f  <file>   Specifies the phar file to work on.

           Optional arguments:

           -e  <entry>  Name of entry to work on (must include PHAR internal
                        directory name if any).


delete     Delete entry from a PHAR archive

           Required arguments:

           -e  <entry>  Name of entry to work on (must include PHAR internal
                        directory name if any).
           -f  <file>   Specifies the phar file to work on.



extract    Extract a PHAR package to a directory.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.

           Optional arguments:

           -i  <regex>  Specifies a regular expression for input files.
           -x  <regex>  Regular expression for input files to exclude.
           ...          Directory to extract to (defaults to '.').


help       This help or help for a selected command.


           Optional arguments:

           ... Optional command to retrieve help for.


help-list  Lists available commands.


info       Get information about a PHAR package.
           By using -k it is possible to return a single value.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.

           Optional arguments:

           -k  <index>  Subscription index to work on.


list       List contents of a PHAR archive.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.

           Optional arguments:

           -i  <regex>  Specifies a regular expression for input files.
           -x  <regex>  Regular expression for input files to exclude.


meta-del   Delete meta information of a PHAR entry or a PHAR package.
           If -k is given then the metadata is expected to be an array and the
           given index is being deleted.
           If something was deleted the return value is 0 otherwise it is 1.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.

           Optional arguments:

           -e  <entry>  Name of entry to work on (must include PHAR internal
                        directory name if any).
           -k  <index>  Subscription index to work on.


meta-get   Get meta information of a PHAR entry or a PHAR package in serialized from. If
           no output file is specified for meta data then stdout is being used.
           You can also specify a particular index using -k. In that case the
           metadata is expected to be an array and the value of the given index
           is returned using echo rather than using serialize. If that index does
           not exist or no meta data is present then the return value is 1.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.

           Optional arguments:

           -e  <entry>  Name of entry to work on (must include PHAR internal
                        directory name if any).
           -k  <index>  Subscription index to work on.


meta-set   Set meta data of a PHAR entry or a PHAR package using serialized input. If no
           input file is specified for meta data then stdin is being used.You can
           also specify a particular index using -k. In that case the metadata is
           expected to be an array and the value of the given index is being set.
           If the metadata is not present or empty a new array will be created.
           If the metadata is present and a flat value then the return value is
           1. Also using -k the input is been taken directly rather then being
           serialized.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.
           -m  <meta>   Meta data to store with entry (serialized php data).

           Optional arguments:

           -e  <entry>  Name of entry to work on (must include PHAR internal
                        directory name if any).
           -k  <index>  Subscription index to work on.


pack       Pack files into a PHAR archive.
           When using -s <stub>, then the stub file is being excluded from the
           list of input files/dirs.To create an archive that contains PEAR class
           PHP_Archive then point -p argument to PHP/Archive.php.
           

           Required arguments:

           -f  <file>   Specifies the phar file to work on.
           ...          Any number of input files and directories. If -i is in
                        use then ONLY files and matching the given regular
                        expression are being packed. If -x is given then files
                        matching that regular expression are NOT being packed.

           Optional arguments:

           -a  <alias>  Provide an alias name for the phar file.
           -b  <bang>   Hash-bang line to start the archive (e.g.
                        #!/usr/bin/php). The hash          mark itself '#!' and
                        the newline character are optional.
           -c  <algo>   Compression algorithm.
                          0      No compression
                          none   No compression
                          auto   Automatically select compression algorithm
                          gz     GZip compression
                          gzip   GZip compression
                          bz2    BZip2 compression
                          bzip2  BZip2 compression
           -h  <method> Selects the hash algorithm.
                          md5      MD5
                          sha1     SHA1
                          sha256   SHA256
                          sha512   SHA512
                          openssl  OpenSSL
           -i  <regex>  Specifies a regular expression for input files.
           -l  <level>  Number of preceding subdirectories to strip from file
                        entries
           -p  <loader> Location of PHP_Archive class file (pear list-files
                        PHP_Archive).You can use '0' or '1' to locate it
                        automatically using the mentioned pear command. When
                        using '0' the command does not error out when the class
                        file cannot be located. This switch also adds some code
                        around the stub so that class PHP_Archive gets
                        registered as phar:// stream wrapper if necessary. And
                        finally this switch will add the file phar.inc from
                        this package and load it to ensure class Phar is
                        present.
           -s  <stub>   Select the stub file.
           -x  <regex>  Regular expression for input files to exclude.
           -y  <key>    Private key for OpenSSL signing.


sign       Set signature hash algorithm.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.
           -h  <method> Selects the hash algorithm.
                          md5      MD5
                          sha1     SHA1
                          sha256   SHA256
                          sha512   SHA512
                          openssl  OpenSSL

           Optional arguments:

           -y  <key>    Private key for OpenSSL signing.


stub-get   Get the stub of a PHAR file. If no output file is specified as stub then stdout
           is being used.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.

           Optional arguments:

           -s  <stub>   Select the stub file.


stub-set   Set the stub of a PHAR file. If no input file is specified as stub then stdin
           is being used.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.

           Optional arguments:

           -b  <bang>   Hash-bang line to start the archive (e.g.
                        #!/usr/bin/php). The hash          mark itself '#!' and
                        the newline character are optional.
           -p  <loader> Location of PHP_Archive class file (pear list-files
                        PHP_Archive).You can use '0' or '1' to locate it
                        automatically using the mentioned pear command. When
                        using '0' the command does not error out when the class
                        file cannot be located. This switch also adds some code
                        around the stub so that class PHP_Archive gets
                        registered as phar:// stream wrapper if necessary. And
                        finally this switch will add the file phar.inc from
                        this package and load it to ensure class Phar is
                        present.
           -s  <stub>   Select the stub file.


tree       Get a directory tree for a PHAR archive.

           Required arguments:

           -f  <file>   Specifies the phar file to work on.

           Optional arguments:

           -i  <regex>  Specifies a regular expression for input files.
           -x  <regex>  Regular expression for input files to exclude.


version    Get information about the PHAR environment and the tool version.

Box

Instal·lació:

$ composer global require kherge/box --prefer-source

Ara ja podeu executar la comanda box:

$ box

Resources:

Creació d'aplicacions CLI amb Symfony Console i PHAR

Recursos

Vegeu també

Enllaços externs