Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- function mkperms($perms, $return_as_string = false, $filename = '') {
- $perms = explode(',', $perms);
- $generated = array('u'=>array(),'g'=>array(),'o'=>array());
- if(!empty($filename)) {
- $fperms = substr(decoct(fileperms($filename)), 3); // Credits to jchris dot fillionr at kitware dot com
- // Fill array $generated
- $fperms = str_split($fperms);
- $fperms['u'] = $fperms[0]; unset($fperms[0]);
- $fperms['g'] = $fperms[1]; unset($fperms[1]);
- $fperms['o'] = $fperms[2]; unset($fperms[2]);
- foreach($fperms as $key=>$fperm) {
- if($fperm >= 4) {
- $generated[$key]['r'] = true;
- $fperm -= 4;
- }
- if($fperm >= 2) {
- $generated[$key]['w'] = true;
- $fperm -= 2;
- }
- if($fperm >= 1) {
- $generated[$key]['x'] = true;
- $fperm--;
- }
- }
- }
- foreach($perms as $perm) {
- if(!preg_match('#^([ugo]*)([\+=-])([rwx]+|[\-])$#i', $perm, $matches)) {
- trigger_error('Wrong input format for mkperms'); return 0644;
- // Wrong format => generate default
- }
- $targets = str_split($matches[1]);
- $addrem = $matches[2];
- $perms_ = str_split($matches[3]);
- $fromTheLoop = 0; // To make sure we clear it only once for direct affectation
- foreach($targets as $target) {
- foreach($perms_ as $perms__) {
- if($addrem == '=') {
- if(!$fromTheLoop) {
- unset($generated[$target]['r']);
- unset($generated[$target]['w']);
- unset($generated[$target]['x']);
- }
- $fromTheLoop++;
- $addrem = '+';
- }
- if($perms__ == '-') {
- unset($generated[$target]['r']);
- unset($generated[$target]['w']);
- unset($generated[$target]['x']);
- } else {
- if($addrem == '+') {
- $generated[$target][$perms__] = true;
- } elseif($addrem == '-') {
- unset($generated[$target][$perms__]);
- } elseif($addrem == '=') {
- }
- }
- }
- }
- }
- $generated_chars = array(0, 0, 0);
- $corresponding = array('u'=>0, 'g'=>1, 'o'=>2);
- $correspondingperms = array('r'=>4, 'w'=>2, 'x'=>1);
- foreach($generated as $key=>$generated_) {
- foreach($generated_ as $generated__=>$useless) {
- $generated_chars[$corresponding[$key]] += $correspondingperms[$generated__];
- }
- }
- if($return_as_string) return implode($generated_chars);
- else return base_convert(implode($generated_chars), 8, 10);
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement