Shell Arguments for PHP CLI
, (*1)
A convenience class for loading arguments passed through the command line ($argv), (*2)
- Autoloads from
$argv, or pass in handcrafted array
- Uses the Iterator base class, but adds
find() to make looking for, and testing, arguments trivial.
- Support for most common argument formats
Installation
Shell Arguments for PHP CLI is installed via Composer. To install, use composer require pointybeard/shell-args or add "pointybeard/shell-args": "~1.0" to your composer.json file., (*3)
Usage
Include pointybeard\ShellArgs\Lib in your scripts then create an instance of ArgumentIterator. It will automatically look for arguments, or you can pass it your own argument string (see below)., (*4)
Syntax Supported
This library supports the most common argument formats. Specifically -x,--long, /x. It also supports use of = or : as a delimiter. The following are examples of supported argument syntax:, (*5)
-x
--aa
--database=blah
-d:blah
--d blah
--database-name=blah
/d blah
-u http://www.theproject.com
-y something
-p:\Users\pointybeard\Sites\shellargs\
-p:"\Users\pointybeard\Sites"
-h:local:host
/host=local-host
Examples
<?php
use pointybeard\ShellArgs\Lib;
// Load up the arguments from $argv. By default
// it will ignore the first item, which is the
// script name
$args = new ArgumentIterator();
// Instead of using $argv, send in an array
// of arguments. e.g. emulates "... -i --database blah"
$args = new ArgumentIterator(false, [
'-i', '--database', 'blah'
]);
// Arguments can an entire string too [Added 1.0.1]
$args = new ArgumentIterator(false, [
'-i --database blah'
]);
// Iterate over all the arguments
foreach($args as $a){
printf("%s => %s" . PHP_EOL, $a->name(), $a->value());
}
// Find a specific argument by name
$args->find('i');
// Find also accepts an array of values, returning the first one that is valid
$args->find(['h', 'help', 'usage']);
Running the Test Suite
You can check that all code is passing by running the following command from the shell-args folder:, (*6)
./vendor/bin/phpunit --bootstrap vendor/autoload.php tests/ArgumentsTest
If you want to run code coverage (e.g. --coverage-html tests/reports/ ...) you'll need an older version of xdebug (for PHP 5.6). To install this, use the following commands:, (*7)
pecl channel-update pecl.php.net
pecl install xdebug-2.5.5
You'll need enable xdebug.so. Try adding the following to /etc/php/5.6/mods-available, (*8)
; configuration for php xdebug module
; priority=20
zend_extension=/usr/lib/php/20131226/xdebug.so
Then enable it with phpenmod xdebug. The above works on Ubuntu, however, paths might be different for other distros., (*9)
Support
If you believe you have found a bug, please report it using the GitHub issue tracker,
or better yet, fork the library and submit a pull request., (*10)
Contributing
We encourage you to contribute to this project. Please check out the Contributing documentation for guidelines about how to get involved., (*11)
License
"Shell Arguments for PHP CLI" is released under the MIT License., (*12)