|
octdec
Octal to decimal
(PHP 4, PHP 5)
Example 1154. octdec() example<?php The above example will output: 63 Related Examples ( Source code ) » octdec Examples ( Source code ) » decoct Examples ( Source code ) » octdec Code Examples / Notes » octdecmeheler
This function and decoct work great when working with file permissions. For example: <?php $mode = octdec('4750'); $user['suid'] = ($mode & 04000); $user['read'] = ($mode & 00400); $user['write'] = ($mode & 00200); $user['execute'] = ($mode & 00100); $group['sgid'] = ($mode & 02000); $group['read'] = ($mode & 00040); $group['write'] = ($mode & 00020); $group['execute'] = ($mode & 00010); $other['text'] = ($mode & 01000); $other['read'] = ($mode & 00004); $other['write'] = ($mode & 00002); $other['execute'] = ($mode & 00001); $attrs = array('-','-','-','-','-','-','-','-','-','-'); if ($system['dir']) $attrs[0] = 'd'; if ($user['read']) $attrs[1] = 'r'; if ($user['write']) $attrs[2] = 'w'; if ($user['execute']) $attrs[3] = 'x'; if ($user['suid']) $attrs[3] = 'S'; if ($group['read']) $attrs[4] = 'r'; if ($group['write']) $attrs[5] = 'w'; if ($group['execute']) $attrs[6] = 'x'; if ($group['sgid']) $attrs[6] = 'S'; if ($other['read']) $attrs[7] = 'r'; if ($other['write']) $attrs[8] = 'w'; if ($other['execute']) $attrs[9] = 'x'; if ($other['text']) $attrs[9] = 'T'; echo '<pre>'; echo 'Mode Decimal: ' . $mode . "\n"; echo 'Mode Octal: ' . decoct($mode) . "\n"; echo 'Mode String: ' . implode('',$attrs)."\n"; echo '</pre>'; ?> Outputs: Mode Decimal: 2536 Mode Octal: 4750 Mode String: -rwSr-x--- -Mike 11-sep-2002 09:51
The 'S' flag for Unix file access rights is badly computed in the above sample. If the corresponding 'x' bit (exec) is not set, and the 's' bit (setgid/setuid/sticky) is set, then the flag should not be displayed as and uppercase 'S', but as a lower case 's'. Also the sticky bit (mainly used for folders with public right access rights such as /tmp to protect against deletion by non owner) is badly named ("text"?). harry
Calling the sticky bit "text" is not erroneous: On UNIX back in 1974, it instructed the operating system to retain the text segment of the program in swap space after the process exited. This speeded subsequent executions by allowing the kernel to make a single operation of moving the program from swap to real memory.
|