(perl)chmod命令のmode値は数字でないとダメ?

[上に] [前に] [次に]
五つ目の朝 2000/05/26(金) 13:27:16
chmod(0755,"ファイル名");

とやる代わりに、例えば「0755」といった値をフォームから入力するようにして

chmod($FORM{'permission'},"ファイル名");

とすると、命令自体は成功するものの、パーミッション値が「0363」になってしまいます。
(ちなみに、「0705」を指定したら「0301」になった)

$permisson = '0755';
chmod($permission,"ファイル名");
とやっても結果は同じでした。
chmodでは、数字の直接指定しか出来ないのでしょうか?


(関係ないけど、ここのTEXTAREAはWRAP=SOFTにして欲しい…)

Duck 2000/05/26(金) 14:48:10
それって、
$permisson = '0755';
のようにシングルコートで括ると文字列になってしまいますよね。
実際は0755は8進数の数値ですから、
$permisson = 0755;
とすればうまく行くはず。

やりたいことも、文字列を8進数に置き換えれば良いので、
sprintf("%lo", $FORM{'permission'});
をやってみればどうですか?

Duck 2000/05/26(金) 15:01:36
間違い。
一旦10進数に変換するので、

誤)sprintf("%lo", $FORM{'permission'});
正)sprintf("%lo", oct($FORM{'permission'}));

かな?

五つ目の朝 2000/05/26(金) 15:19:30
[[解決]]
$permission = sprintf("%04d", oct($FORM{'permission'}));
chmod($permission,"ファイル名");

でうまくいきました。
ありがとうございました。

謎の人 2000/05/26(金) 16:15:04
>$permission = sprintf("%04d", oct($FORM{'permission'}));
これ10進の4桁の文字列が$permissionへ代入されますよね。
なんで、うまくいくのだろ〜

だって、
>のようにシングルコートで括ると文字列になってしまいますよね。
云っているのに...。不思議だ〜

五つ目の朝 2000/05/26(金) 16:40:33
「d」だから、文字列ではなく、数字なのではないでしょうか?

2000/05/26(金) 16:45:23
>「d」だから、文字列ではなく、数字なのではないでしょうか?
数値を文字列として書き込むという意味なので、数値ではないです。

S-pore [HomePage] 2000/05/26(金) 16:52:37
chmod(oct($FORM{'permission'}), "ファイル名");
じゃダメですか。

五つ目の朝 2000/05/26(金) 17:04:32
chmod(oct($FORM{'permission'}), "ファイル名");
でもうまくいきました。

sprintf("%lo", oct($FORM{'permission'}));
ではダメです。

バギンズ 2000/05/26(金) 17:07:28
>とやる代わりに、例えば「0755」といった値をフォームから入力するようにして
>chmod($FORM{'permission'},"ファイル名");
>とすると、命令自体は成功するものの、パーミッション値が「0363」になってしまいます。
>(ちなみに、「0705」を指定したら「0301」になった)

10進の755は8進の1363(下3桁は363)
10進の705は8進の1301(下3桁は301)

単純に10進化しておけばよかっただけみたいですね。

[上に] [前に] [次に]