On 15 April 2004 17:26, David T-G wrote:
> Mike, et al --
>
> ...and then Ford, Mike [LSS] said...
> %
> % On 15 April 2004 16:26, David T-G wrote:
> %
> % > but chmod() needs a permissions setting rather than a umask. % >
> % > The challenge is in representing this as octal. With some ...
> % > to feed to chmod() -- and apparently I can't just % >
> % > $r = 0.$r ;
> %
> % That would be
> %
> % $r = '0'.$r;
>
> Hmmm... OK.
>
>
> %
> % I'm not sure, however, that this is a totally foolproof way
> of doing it, as
> % it would fail with any permission set (however unlikely)
> where the owner
>
> Would it? Suppose I were setting it to 007; that would be 0007 with
> the leading zero and should still be fine.
No. The way you're building it, $r would be an integer before you add the leading
zero -- 007 would thus be represented as just 7, and adding the leading zero the way
I've shown above would give '07'. Not good.
>
>
> % odgit was a zero -- perhaps you should be sprintf()-ing it?
>
> Heck, I'll take any advice I can get :-) I think, though, that the
> problem is that I'm trying to use a string -- if I can get it built
> correctly in the first place -- as an octal digit.
Possibly, but I think you're making the whole thing more complicated than it need be.
After a quick look at the manual, I'd suggest this:
$u = umask(); // Integer value of umask -- no need to convert
// to octal representation as that's just a human
// convenience of no value to your computer ;)
$m = 0777; // $m is now an integer corresponding to octal
// 0777 again, the visual representation of this
// in octal (or binary, or hex...) is just a
// human convenience.
$r = $m ^ $u; // remove bits set in $u from $m (subtract should
// work too, but since this is technically a
// bitwise operation, I prefer the bitwise
// operator!
// $r is now the correct value, and just needs representing in octal:
$r = sprintf('%04o', $r);
// Done -- use it as you wish.
Of course, I've been quite verbose there -- the short version is:
$r = sprintf('%04o', 0777 ^ umask());
... ;))
Cheers!
Mike
---------------------------------------------------------------------
Mike Ford, Electronic Information Services Adviser,
Learning Support Services, Learning & Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Beckett Park, LEEDS, LS6 3QS, United Kingdom
Email: [EMAIL PROTECTED]
Tel: +44 113 283 2600 extn 4730 Fax: +44 113 283 3211
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php