Global installation of PHP tools with Composer
The Composer package manager along with the Packagist repository site is quickly becoming the defacto PHP package management system.
One feature I found out about recently is that you can install packages globally rather than locally into your project. I think that this is most useful for development tools, such as PHPUnit which are then available everywhere.
To install a composer package globally, you run the usual require command, but with the addition of the global modifier. So to install PHPUnit, you would run:
$ composer global require phpunit/phpunit $ composer global require phpunit/dbunit $ composer global require phing/phing $ composer global require phpdocumentor/phpdocumentor $ composer global require sebastian/phpcpd $ composer global require phploc/phploc $ composer global require phpmd/phpmd $ composer global require squizlabs/php_codesniffer
This will install PHPUnit and all its dependencies into the ~/.composer/vendor/ directory and, most importantly, the phpunit CLI tools are installed into ~/.composer/vendor/bin/.
Simply add this directory to your PATH in your ~/.bash_profile (or ~/.bashrc) like this:
and phpunit is now available on your command line.
To keep your tools up to date, you simply do this:
composer global update
To remove a package, you edit ~/.composer/composer.json and then run composer global update.
11 thoughts on “Global installation of PHP tools with Composer”
I also have "./vendor/bin" in my path, which is useful if projects depend on different versions of tools.
Hey, thx for the hint!
Unfortunately i can't use the "phpunit" command and i get this error:
-bash: vendor/bin/phpunit: No such file or directory
When i run phpunit with the full directory "~/.composer/vendor/bin/phpunit" it works? Am I missing something here?
Thanks and cheers
This is what worked for me. I added export PATH="~/.composer/vendor/bin:$PATH" to my ~/.bash_profile. Then I ran command source ~/.bash_profile.
Global for the *user* you mean. What about global to the machine? If you have a build machine for instance that always needs phpunit, phpmd, etc..
I guess that's why pear is still around, unfortunately it seems some authors are not keeping pear packages/release in step with composer.
I was stuck after installing a composer package globally, but I was unable to run it. This was just the solution I was after. Thanks!
The only step you forgot to mention was to run 'source ~/.bash_profile' to reload the profile config and be able to call the global package successfully.
I installed the phpunit as mentioned above, but when i run the test, il returns always un error that PHPUnit_Framework_TestCase not found
Anyone has an idea?
This post is still usefull in 2019. Just updated my global phpunit package to the last version. Thank you very much ! :)
Case dont exists the folder '~/.composer/vendor/bin' I do:
if [ -d ~/.composer/vendor/bin ]; then
Sometimes path is .config/composer, instead of .composer/
That was my case on Ubuntu 18.04.
Benjamin, thank you, your note was helpful. Now it works
I usually install a global version of phpunit as well as a local one. The reason for this is that I am often using the local version like `composer tests` since I have a mapping in my composer.json file for `php -n ./vendor/bin/phpunit tests'`, but I also have setup a pre-commit hook and in this one I need to use the global package since I am only commiting code that has no development packages installed.