1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
|
# PHP Autoload Builder
The PHP AutoloadBuilder CLI tool **phpab** is a command line application to automate the process of generating
an autoload require file with the option of creating static require lists as well as phar archives.
## Features
* scan multiple directories recursively in one run, optionally follow symlinks, wildcards or based on composer.json
* Cache scan results
* Template based autoload code
* Custom variables for templates
* Compatibility mode for PHP 5.2 compliant autoloader
* Case sensitive as well as case insensitive classname mapping
* Phar generation, with or without compression and openssl key signing
* Static require list generation
* Opcache warming list generation
* Linting of generated code
## Requirements
* PHP 5.3+ (Runtime, for development / tests: 7.2+)
* Fileinfo (ext/fileinfo)
* Tokenizer (ext/tokenizer)
* For PHAR generation support:
+ ext/phar (write enabled: phar.readonly = Off)
+ ext/gzip (optional)
+ ext/bzip2 (optional)
+ ext/openssl (optional, for phar signing only)
## Installation
### Executable PHAR
The recommended way to install **phpab** is by using [phive](https://phar.io):
```
phive install phpab
```
#### Manual install
If you do not have phive installed or want to install manually, you can download the PHAR archive
from the [Releases](https://github.com/theseer/Autoload/releases) tab.
_Please note:_
On Linux/Unix based system the phar needs to be marked executable for direct execution:
```
[theseer@rikka ~]$ chmod +x phpab*.phar
```
## Other Downloads
* [Latest development snapshot](https://github.com/theseer/Autoload/archive/master.zip)</a> (ZIP Archive)
* [Releases (Source)](https://github.com/theseer/Autoload/tags)
## Usage
```
Usage: phpab [switches] <directory1|file1|/path/to/composer.json> [...<directoryN|fileN>]
-i, --include File pattern to include (default: *.php)
-e, --exclude File pattern to exclude
--blacklist Blacklist classname or namespace (wildcards supported)
--whitelist Whitelist classname or namespace (wildcards supported)
-b, --basedir Basedir for filepaths
-t, --template Path to code template to use
-o, --output Output file for generated code (default: STDOUT)
-p, --phar Create a phar archive (requires -o )
--all Include all files in given directory when creating a phar
--alias Specify explicit internal phar alias filename (default: output filename)
--hash Force given hash algorithm (SHA-1, SHA-256 or SHA-512) (requires -p, conflicts with --key)
--bzip2 Compress phar archive using bzip2 (requires -p) (bzip2 required)
--gzip Compress phar archive using gzip (requires -p) (gzip required)
--key OpenSSL key file to use for signing phar archive (requires -p) (openssl required)
-c, --compat Generate PHP 5.2 compatible code
-s, --static Generate a static require file
-w, --warm Generate a static opcache warming file
--reset Add opcache reset call when generating opcache warming file
-1, --prepend Register as first autoloader (prepend to stack, default: append)
-d, --no-exception Do not throw exception on registration problem (default: throw exception)
-n, --nolower Do not lowercase classnames for case insensitivity
-q, --quiet Quiet mode, do not output any processing errors or information
--cache <file> Enable caching and set filename to use for cache storage
--follow Enables following symbolic links (not compatible with phar mode)
--format Dateformat string for timestamp
--linebreak Linebreak style (CR, CRLF or LF, default: LF)
--indent String used for indenting or number of spaces (default: 16 (compat 12) spaces)
--tolerant Ignore Class Redeclarations in the same file
--once Use require_once instead of require when creating a static require file
--trusting Do not check mimetype of files prior to parsing (default)
--paranoid Do check mimetype of files prior to parsing
--var name=foo Assign value 'foo' to variable 'name' to be used in (custom) templates
--lint Run lint on generated code and exit
--lint-php PHP binary to use for linting (default: /usr/bin/php or c:\php\php.exe)
-h, --help Prints this usage information
-v, --version Prints the version and exits
```
### Usage Examples
[theseer@rikka ~]$ phpab -o src/autoload.php -b src composer.json
[theseer@rikka ~]$ phpab -o opcache_warming.php -w --reset src
[theseer@rikka ~]$ phpab -o src/autoload.inc.php src
[theseer@rikka ~]$ phpab -c -o src/autoload.inc.php src
[theseer@rikka ~]$ phpab -o src/core/autoload.inc.php -b src src
[theseer@rikka ~]$ phpab -p -o framework.phar -b src composer.json
[theseer@rikka ~]$ phpab -p -o framework.phar framework/src
[theseer@rikka ~]$ phpab -p -o framework.phar --bzip2 --key sign.key framework/src
[theseer@rikka ~]$ phpab -b . --tolerant -o zf1_autoload.php -e '*/Test/*' Zend
### Automation
When using *phpab* it is necessary to recreate the autoload file every time a new class is created.
This usually also happens after pulling from a repo or when switchting branches.
Using a git `post-checkout` hook placed in `.git/hooks/post-update` this can be automated for most cases.
#### Basic Sample:
```bash
#!/bin/bash
phpab -c -o src/autoload.inc.php src
```
#### Sample using an `ant build.xml` file.
```bash
#!/bin/bash
if [ -f build.xml ]; then
ant -p | grep phpab > /dev/null
if [ $? -eq 0 ]; then
ant phpab > /dev/null &
fi
fi
```
## Template Variables
The generated code is based uppon templates provided by default in the templates subfolder. The template engine
allows for simply replacing of name based placeholders. For now, only a few default variables are defined
but API hooks / CLI parameters exist to set custom variables.
Known variables are:
* ```___CREATED___``` Set to a timestamp of creation, format can be adjusted
* ```___CLASSLIST___``` The found list classes in form of a generated map
* ```___BASEDIR___``` If a Basedir is set, the value will get removed from the file path and get replaced by __DIR__
Used in PHAR Mode only:
* ```___PHAR___``` The filename of the generated phar or it's alias when --alias is given (see src/templates/phar.php.tpl)
Custom variables as defined by passing --var name=value via cli are accessed by pre- and appending ___ to it:
* ```___name___``` Going to be replaced by the value provided via cli param
## Changelog
The [changelog](https://github.com/theseer/Autoload/blob/master/CHANGELOG.md) moved to its own document
|