(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進化しておけばよかっただけみたいですね。
[上に]
[前に]
[次に]