Git Product home page Git Product logo

php-chmod's Introduction

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.

php-chmod's People

Contributors

dependabot[bot] avatar josefglatz avatar mathiasreker avatar szepeviktor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

php-chmod's Issues

Restructuring objects

  1. Now most classes are called "FilePerm" which is redundant and non-informative in a package with the very same name.
    kรฉp
    I do not really know how to come up with the final solution but "top-down programming" - how I call it - is a good starting point: starting with what users have to type to use this package.

  2. The Danish OperativeSystem is OperatingSystem in English.

  3. Iterator is really a trait.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.