php-chmod is a PHP library for easily changing file/directory permissions recursively.
✅ Literal octal notation (0o) is supported
| Version | PHP | Documentation |
|---|---|---|
| ^2.1 | ^7.4 | current |
PHP>= 7.4- php-extension
ext-mbstring
Run:
composer require mathiasreker/php-chmodDry 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$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();See the open issues for a complete list of proposed features (and known issues).
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!
If you are using docker, you can use the following command to get started:
docker-compose up -dNext, access the container:
docker exec -it php-chmod bashPHP Coding Standards Fixer:
composer run-script cs-fixPHP Coding Standards Checker:
composer run-script cs-checkPHP Stan:
composer run-script phpstanUnit tests:
composer run-script testIt is distributed under the MIT License. See LICENSE for more information.