mathiasreker / php-chmod
php-chmod is a PHP library for easily changing file/directory permissions recursively.
Fund package maintenance!
MathiasReker
Requires
- php: >=7.4
- ext-mbstring: *
- symfony/finder: ^4.4 || ^5.4 || ^6.4
Requires (Dev)
- ergebnis/composer-normalize: ^2.28
- friendsofphp/php-cs-fixer: ^3.45
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.6
README
php-chmod
is a PHP library for easily changing file/directory permissions recursively.
✅ Literal octal notation (0o) is supported
Versions & Dependencies
Requirements
PHP
>= 7.4- php-extension
ext-mbstring
Installation
Run:
composer require mathiasreker/php-chmod
Examples
Dry run:
<?php use MathiasReker\PhpChmod\Scanner; require __DIR__ . '/vendor/autoload.php'; $result = (new Scanner()) ->setDefaultFileMode(0644) ->setDefaultDirectoryMode(0755) ->setExcludedFileModes([0400, 0444, 0640]) ->setExcludedDirectoryModes([0750]) ->scan([__DIR__]) ->dryRun(); var_dump($result); // string[]
Fix:
<?php use MathiasReker\PhpChmod\Scanner; require __DIR__ . '/vendor/autoload.php'; (new Scanner()) ->setDefaultFileMode(0644) ->setDefaultDirectoryMode(0755) ->setExcludedFileModes([0400, 0444, 0640]) ->setExcludedDirectoryModes([0750]) ->scan([__DIR__]) ->fix(); // void
Documentation
$result = new Scanner();
setDefaultFileMode
sets the default file permission:
$result->setDefaultFileMode(0644);
setDefaultDirectoryMode
sets the default directory permission:
$result->setDefaultDirectoryMode(0755);
setExcludedFileModes
sets the allowed permissions for files. Files with these permissions will be skipped:
$result->setExcludedFileModes([0400, 0444, 0640]);
setExcludedDirectoryModes
sets the allowed permissions for directories. Directories with these permissions will be
skipped:
$result->setExcludedDirectoryModes([0750]);
setExcludedNames
exclude files by a custom pattern. Glob and RegEx are supported:
$result->setExcludedNames(['*.rb', '*.py']);
setNames
includes files by a custom pattern and exclude any other files. Glob and RegEx are supported:
$result->setNames(['*.php']);
setExcludedPaths
excludes a list of file/directory paths:
$result->setExcludedPaths(['first/dir', 'other/dir']);
doExcludeFiles
excludes all files:
$result->doExcludeFiles();
doExcludeDirectories
excludes all directories:
$result->doExcludeDirectories();
scan
finds all the concerned files/directories:
$result->scan([__DIR__]);
setPaths
sets paths of files/directories manually. This is an alternative to the scanner if you want to use a custom
scanner:
$result->setPaths($paths);
dryRun
returns an array of the concerned files/directories:
$result->dryRun();
fix
changes the concerned files/directories permissions to the default permission:
$result->fix();
Roadmap
See the open issues for a complete list of proposed features (and known issues).
Contributing
If you have a suggestion to improve this, please fork the repo and create a pull request. You can also open an issue with the tag "enhancement". Finally, don't forget to give the project a star! Thanks again!
Docker
If you are using docker, you can use the following command to get started:
docker-compose up -d
Next, access the container:
docker exec -it php-chmod bash
Tools
PHP Coding Standards Fixer:
composer run-script cs-fix
PHP Coding Standards Checker:
composer run-script cs-check
PHP Stan:
composer run-script phpstan
Unit tests:
composer run-script test
License
It is distributed under the MIT License. See LICENSE
for more information.