Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Phpsu: Synchronisation Utility: File and Database

Latest Version Software License Coverage Status Infection MSI Total Downloads

This package is compliant with PSR-1, PSR-2, PSR-4 and PSR-12. If you notice compliance oversights, please send a patch via pull request.


Via Composer:

composer require --dev phpsu/phpsu

Via Composer, with conflicting versions

If you have problems with conflicting versions eg. symfony:<5 you can use the composer-bin-plugin.

composer require --dev bamarni/composer-bin-plugin
composer bin phpsu require --dev phpsu/phpsu
#  we recommend to install it with the auto installation scripts:
composer config scripts.bin "echo 'bin not installed'"
composer config '@composer bin all install --ansi'
composer config '@composer bin all update --ansi'
echo '/vendor-bin/**/vendor' >> .gitignore

Via Docker:

if you want to use phpsu via Docker we have a minimal phpsu docker image: phpsu/phpsu.

you can execute any phpsu command via something like this:

docker run --rm -it -u $(id -u):$(id -g) -v $(pwd):/app -v ~/.ssh:/home/phpsu/.ssh phpsu/phpsu:latest phpsu ssh production

read more about docker usage


The following versions of PHP are supported by this version.

  • PHP 7.4, 8.0, 8.1, 8.2
  • Compatible and continuously tested with symfony 5, 6
  • for older versions go to version 2.3.0
  • or version 1.1.0

Required for synchronisation are:

  • ssh on execution System
  • rsync on executing System
  • mysqldump on source System
  • mysql on destination Systems

Unfortunately we do not support Windows yet.


The full Documentation can be found in the /docs Directory.

Configuration Example

Simple configuration example phpsu-config.php:


$globalConfig = new \PHPSu\Config\GlobalConfig();
$globalConfig->addFilesystem('Image Uploads', 'var/storage')
    ->addExcludes(['*.jpg', '*.gif']);
$globalConfig->addSshConnection('hostA', 'ssh://user@localhost:2208');
$globalConfig->addAppInstance('production', 'hostA', '/var/www/')
    ->addDatabase('app', 'production01db', 'root', 'password', '', 3307)
    ->addDatabase('app', 'testingLocal', 'root', 'root');
return $globalConfig;

CLI Examples

phpsu sync production --dry-run
phpsu sync p --no-db
phpsu sync p --no-fs
phpsu sync production testing --all


install for Contribution

git clone
cd phpsu
composer install


composer test

You can also check, whether any changes you made are affecting your tests immediately on save:

composer test:watch

If you see a low Mutation Score Indicator (MSI) value, you can show the mutations that are escaping:

composer infection -- -s

If you have an unwanted BC break in your Pull Request you can run the same test locally with docker:

docker run --rm -v `pwd`:/app nyholm/roave-bc-check --format=markdown >


If you discover any security related issues, please email instead of using the issue tracker.



The MIT License (MIT). Please see License File for more information.