Skip to content

php-chmod is a PHP library for easily changing file/directory permissions recursively.

License

Notifications You must be signed in to change notification settings

MathiasReker/php-chmod

Folders and files

NameName
Last commit message
Last commit date
Jan 1, 2024
Jan 1, 2024
Mar 18, 2023
Sep 9, 2022
Aug 3, 2022
Sep 3, 2022
Sep 9, 2022
Aug 3, 2022
Sep 8, 2022
Aug 5, 2022
Nov 11, 2024
Mar 18, 2023

Repository files navigation

PHP chmod

Packagist Version Packagist Downloads CI status Contributors Forks Stargazers Issues MIT License

php-chmod is a PHP library for easily changing file/directory permissions recursively.

✅ Literal octal notation (0o) is supported

Versions & Dependencies

Version PHP Documentation
^2.1 ^7.4 current

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.