[PHP-users 7962] Re: Permissionのアルゴリズム

Morikawa [encore-ann] php-users@php.gr.jp
Thu, 06 Jun 2002 19:05:21 +0900


もりかわ@似非PGです。

何人もの方、ご回答ありがとうございます。
レスが交互しますが。。。

小山さん[7946]
> 1, 2, 4 と数値で考えると分かりにくいのかもしれませんが、これは「ビッ
> トフラグ」という非常に良く使われる手法です。

ビットを立てる、という奴ですね。

ビット演算については何度か理解しようとしたのですが、
文系の自分にはかなり?です。
# ネットマスクも苦労した。。。

和田さん[7945]
> もりかわさんが最終的に何を解決しようとされているのかが良く分か
> らないのですが、以下のスクリプトを簡単にするのなら、
...以下省略...

澤田さん[7944]
> fileperms() なんてどうでしょう。
> 
> あとは、man chmod とか。
> 
> # イマイチ質問の意図が不明なので、変な返事かもしれず。

書く人がかくと、簡単になるもんですね。勉強になります。
目的は、各種オプションの設定に用いようと思ってます。
$access['192.168.0.0']->is_allowed とか、
$status->waiting, $status->opened とか。
値と定数値にあわせて設定がOn/Offされるようなものです。

梶井さん[7943]
> http://jp2.php.net/manual/ja/function.decbin.php
> 
> こういうことでいいんでしょうか?

というようなことなんでしょうか?
すみません、実装手段がいまいち分からないので。
最終的には、あるビットが立っているかどうかを知りたいのですが
10進数の比較のが自分には分かりやすいかと思ってます。

が、、、小山さん[7946]
> 例えばパー
> ミッションが数値として $perm に保存されているとして、読み込み可能かど
> うかを調べるには
> 
> 	$readable = $perm & (1 << 2);
> 
> とすれば良いです。読み込み可能を表すビットがオフだと $readable は 0 に
> なるので、簡単に状態を判断できます。

を見ると割と簡単そうですねえ。
そうすると

和田さん[7945]
> こんな感じでどうでしょう?
> 
> function decode_option($val) {
>     $list = array();
>     $i = 1;
>     while($val >= $i) {
>         if ($val & $i) $list[] = $i;
>         $i *= 2;
>     }
>     return $list;
> }

な風になるわけですね。
これをHash的にしてやると簡単にobjectのプロパティが作れそうです。
> function decode_option($val) {
>     $list = array();
>     $i = 1;
>     while($val >= $i) {
         if ($val & $i) $list[$i] = 1;
>         $i *= 2;
>     }
>     return $list;
> }
$obj->option = decode_option($opts);
if ($obj->option[IS_READABLE]) {
    ;
}

まさに目から鱗ですね。


小山さん[7946]
>   一度 C 言語の入門本をご覧になると、よりいっそう理解できるでしょう。

やっぱり。。。(^^;
Cで安全なものを作る自信がないので全然意欲がないのですが、
やってみてもよいかなという気がしてきました。

いや〜、一日でかなり成長した気がします。ありがとうございました。
 
もりかわ
[PHP-FAQ JP (非公式)] http://phpfaq.encore-ann.com
一度メゲてます。がんばれワカ造!