php-pharlite/README.md

2.6 KiB

PharLite: Easy PHAR generator

Make sure PHP can write PHARs in your php.ini before trying anything else.

composer.json options

{
    ...
    "extra": {
        "phar": {
            "include": [ ... ],
            "exclude": [ ... ],
            "index": "web/index.php",
            "output": "pharname.phar",
            "strip": "none",
            "metadata": { ... },
            "preload": [ ... ],
        }
    }
}

include and exclude

Specify additional files or paths to include or exclude.

index: Create a web phar

Specifying this option will automatically opt to create a web phar. The value should point to a valid index file or router.

output: Output filename

Defines the output filename. Defaults to output.phar

strip: Trim file sizes

Valid values are none, all or an array of patterns to match.

"strip": "all"              Strip all files
"strip": "none"             Include everything as is (default)
"strip": [ "src/*.php" ]    All *.php in src/ and subdirectories

Stripping will remove comments and whitepace in files, which makes them smaller but can confuse code that dynamically parses f.ex. docblock comments for routing info etc.

metadata: Phar metadata

Define additional metadata to write to the phar. The following keys are automatically written:

Key Type Description
phar.generator string The string PharLite/x.y (PHP/x.y)
phar.type string One of app, library or web
package.name string The composer package name
package.version string The composer package version

preload: Files to preload

If defined, this should be an array of files to include after composer.json in the stub.

Building

To build a phar from a composer project, just run pharlite. It will build one of the following:

  • Library phar - A single file containing a composer library, complete with autoloaders and all that magic.
  • Application phar - An executable file containing an application and its dependencies.
  • Web phar - A complete website in a single file

If more than one bin is defined in the composer.json, the first one will be the default one, but all defined bins will be available by symlinking the phar to the respective names.

"bin": [ "bin/foo", "bin/bar" ]

output.phar, foo.phar, foo, hello.phar -> calls bin/foo
bar.phar, bar -> calls bin/bar