Skip to content


Repository files navigation

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.