Individuelle Verzeichnisse per ZIP / PHP / BASH komprimieren

PHP Script, um unabhängig vom Backup-Werkzeug beliebge Verzeichnisse unter Ausschluss frei definierbarer Pfade zu komprimieren
require_once($_SERVER['DOCUMENT_ROOT'] . '/weblication/grid.php');

if( 
wUserCur::getType() !== 'admin' ) {
    exit( 
'noPermission' );
}

// Zu sicherndes Verzeichnis
$project 'base-wAssets';

// Auszuschliessende Pfade
$excludedDirs = [
    
'wThumbnails/',
    
'documents/versions/',
    
'weblication/index/',
];


$targetDir $_SERVER['DOCUMENT_ROOT'] . '/';
$targetFile $targetDir 'project-' $project '.zip';

$zipDir $_SERVER['DOCUMENT_ROOT'] . '/' $project '/';

if( !
is_dir$zipDir ) ) {
    exit( 
'zipDir does not exist: ' $zipDir );
}

$excludedString '';

if( !empty( 
$excludedDirs ) ) {
    
$excludedString ' -x';
    foreach( 
$excludedDirs as $dir ) {
        
$excludedString .= ' **' wPathName::removeSlashBefore$dir ) . '*';
    }
}

$cmd 'zip -r ' $targetFile ' ' $zipDir $excludedString;

if( 
is_file$targetFile ) ) {
    
wRepository::deleteDocumentwPathName::removeDocumentRoot$targetFile ) );
}

echo 
exec$cmd );
$link str_replace$_SERVER['DOCUMENT_ROOT'], ''$targetFile );
$size wDocumentData::getSize$link'MB' );
$downloadLink '<br/><a href="' $link '" target="_blank">Download ' $project ' (' $size ')</a > ';

echo 
$downloadLink;