Example #1
0
File: FS.php Project: jbzoo/utils
 /**
  * @param string $filename
  * @param bool   $isFlag
  * @param int    $perm
  * @return bool
  */
 protected static function _setPerms($filename, $isFlag, $perm)
 {
     $stat = @stat($filename);
     if ($stat === false) {
         return false;
     }
     // We're on Windows
     if (Sys::isWin()) {
         //@codeCoverageIgnoreStart
         return true;
         //@codeCoverageIgnoreEnd
     }
     list($myuid, $mygid) = array(posix_geteuid(), posix_getgid());
     $isMyUid = $stat['uid'] == $myuid;
     $isMyGid = $stat['gid'] == $mygid;
     //@codeCoverageIgnoreStart
     if ($isFlag) {
         // Set only the user writable bit (file is owned by us)
         if ($isMyUid) {
             return chmod($filename, fileperms($filename) | intval('0' . $perm . '00', 8));
         }
         // Set only the group writable bit (file group is the same as us)
         if ($isMyGid) {
             return chmod($filename, fileperms($filename) | intval('0' . $perm . $perm . '0', 8));
         }
         // Set the world writable bit (file isn't owned or grouped by us)
         return chmod($filename, fileperms($filename) | intval('0' . $perm . $perm . $perm, 8));
     } else {
         // Set only the user writable bit (file is owned by us)
         if ($isMyUid) {
             $add = intval('0' . $perm . $perm . $perm, 8);
             return self::_chmod($filename, $perm, $add);
         }
         // Set only the group writable bit (file group is the same as us)
         if ($isMyGid) {
             $add = intval('00' . $perm . $perm, 8);
             return self::_chmod($filename, $perm, $add);
         }
         // Set the world writable bit (file isn't owned or grouped by us)
         $add = intval('000' . $perm, 8);
         return self::_chmod($filename, $perm, $add);
     }
     //@codeCoverageIgnoreEnd
 }