chngmod linux code example

Example 1: bash how do permissions work

# How permissions/changing permissions works in linux. Permissions are
#	generally listed in a format like rwxrw-r--, where r, w, x, and - 
#	stand for read, write, execute, and no permission respectively. There 
#	are basically three groups of rwx permissions: user, group, others
#	and depending on your relationship to the files, you might be any one
#	of these. 

#	To change file permissions, (e.g. chmod ### file), you need to 
#	indicate three decimal digits (0-7) which specify the three sets
#	of permissionswhen converted to binary. Briefly, a decimal number
#	between 0 and 7 can be represented by a three digit binary string.
#	The binary string sets the permissions by treating 1 as "true" or 
#	permission granted and 0 as "false", or permission denied. See the
#	table below for all the conversions and their meanings:

Decimal		Binary		Permission		Permission meaning
7			111			rwx				read, write, and execute
6			110			rw-				read and write
5			101			r-x				read and execute
4			100			r--				read only
3			011			-wx				write and execute
2			010			-w-				write only
1			001			--x				execute only
0			000			---				none

Example 2: linux chmod permissions

The three rightmost digits define permissions for the:
file user, the group, and others. 

#	Permission				rwx	Binary
7	read, write and execute	rwx	111
6	read and write			rw-	110
5	read and execute		r-x	101
4	read only				r--	100
3	write and execute		-wx	011
2	write only				-w-	010
1	execute only			--x	001
0	none					---	000

Example 3: running chmod command using code

private function chmod_r($dir, $permission)
{
  $dp = opendir($dir);

  while($file = readdir($dp))
  {
    if (($file == ".") || ($file == "..")) continue;

    $path = $dir . DIRECTORY_SEPARATOR . $file;
    $is_dir = is_dir($path);

    $this->set_perms($path, $is_dir, $permission);
    if($is_dir) {
    	$this->chmod_r($path, $permission);
    }
  }
  closedir($dp);
}

private function set_perms($file, $is_dir, $permission)
{
  $perm = substr(sprintf("%o", fileperms($file)), -4);
  $dirPermissions = $permission;
  $filePermissions = $permission;

  if($is_dir && $perm != $dirPermissions){
  	chmod($file, octdec($dirPermissions));
  }
  else if(!$is_dir && $perm != $filePermissions){
  chmod($file, octdec($filePermissions));
  }

  flush();
}

$permission = '0777';

$dir = storage_path('framework');

$this->chmod_r($dir, $permission);