HTMLページからそのCGIを叩くと『年月』の名前のディレクトリを作って、
その中に日毎のアクセスログファイルを作成するCGIを作っています。

ディレクトリを作成するパールは以下です。
mkdir($dir, 0777);

しかし実行すると$dirのパーミッションは755になってしまいます、
その中に作成されるファイルは正常に作成されるのですが、
そのディレクトリ/ファイル共にFTPから削除/パーミッションの変更が
出来なくなってしまいます。

telnetから入って削除しようとしても普通のユーザー権限では無理で
削除する為にはルートにならなければなりません。

なぜでしょう?FTPから操作できる権限のディレクトリを作る方法が
あるのでしょうか?

バカな質問だと思いますが分かる方がいらっしゃいましたら教えて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

これはCGIのせいではないと思います。


恐らくサーバーのOSの設定で新規ディレクトリを作成するときのパーミッションに制限がかけられているのでしょう。(初期状態でも何らかの制限はかかっていると思います)
そこで解決方法なのですが、新規作成時が駄目なら作成後にパーミッションを変更すれば良いのではないでしょうか。
例えば、

mkdir($dir, 0777);

chmod(0777,$dir);

といった感じでしょうか。
お試し下さい。

#万全を期すならchmodでリターン値を取りエラーチェックした方が良いでしょう。
    • good
    • 0
この回答へのお礼

返答遅くなって申し訳ないです。なんかせっかくいただいていた
ご返事の内容がメールで届いてなかったようで、見つけるまでに
時間がたってしまいました。

アクセスログのCGIは無理矢理月毎に1枚のファイルにするように
仕様変更され納品しました。ただこの問題はその後もずっと気に
かかっていていました。

以下のperlで試してみました。

-----------------------------------------
#!/usr/local/bin/perl

$dir = 'data';

mkdir($dir, 0777);

chmod(0777,$dir);

$txt = 'test';
$file = "$dir/test.dat";

open(OUT, ">$file");
print OUT "$txt";
close(OUT);

print "Content-type: text/html\n\n";
print "test OK!";

exit;
-----------------------------------------

すると見事成功しました。これで今後このような仕様の仕事がきても
怖がらなくてすみそうです。
本当にありがとうございました。

お礼日時:2001/10/04 17:01

No.1の内容は試されましたか?


もしうまくいかない様でしたら補足をお願いします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );がよく

$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );

というスクリプトがあったのですが、

$wfurikae = 1 の後に;もいれずifがきています。

違和感があります。

どのような意味になるのでしょうか。

宜しくお願い致します。

Aベストアンサー

そのまんまだと思いますよ。
if 以下の条件が真の時 $wfurikae = 1となります。
Perlはいろいろな書き方ができますので、こういう書き方もありです。
英語の文法の並びにする書き方です。

QPrel正規表現で'$1$'.$saltのあたりが理解できない。

小生Perlを勉強中です。
Perl Codeに以下のようなパスワード暗号処理のサブルーチンが
ありましたが、読めません。教えて下さい。

sub encrypt{
local($inpw)=$_[0];
local(@SALT,$salt,$encrypt);

@SALT=('a'..'z','A'..'Z','0'..'9','.','\');
srand;
$salt=$SALT[int(rand(@SALT)).$SALT[int(rand(@SALT))];
$encrypt=crypt($inpw,$salt)||crypt($inpw,'$1$'.$salt);
return $encrypt;
}

とあります。
特に、下から3行目の($inpw,'$1$'.$salt)が
理解できません。
解説していただければ幸いです。

Aベストアンサー

過去に同様の質問がありました。ctpsysさんの疑問にすべて答えられるかどうかわかりませんが、すくなくとも
>下から3行目の($inpw,'$1$'.$salt)が理解できません
というご質問に対しては参考になるかと思います。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=74593,http://oshiete1.goo.ne.jp/kotaeru.php3?q=74593,

Q[perl] $xxx == 1 or $xxx == 5 or $xxx == 11 などと書くが面倒です

タイトルの通りです

if文などで長々と書くのが面倒なのですが何かいい方法はないのでしょうか?
以前はif($xxx =~ /^1$|^5$|^11$/)などと書いていたのですが、正規表現を使うと処理が遅いんですね

なるべく処理が軽くて簡潔な書き方がありましたら紹介してください

Aベストアンサー

配列なら
my @array = (1, 5, 11);
if (grep {$_ == $xxx } @array) { ... }
とかかな. ハッシュなら
my %valid = ( 1 => 1, 5 => 1, 11 => 1 );
if ($valid{$xxx}) { ... }
のような感じ (「ハッシュを使った重複チェック」のバリエーション).
あ,
if ($xxx == (1 or 5 or 11)) { ... }
のような形は, (そのままじゃないけど) Perl6 でサポートされる予定になっています. いつのことかは知りませんが.

Q$hts =~ s/##([^#]+)##/$FORM{$1}/g の意味を教えてください!

お世話になります。
perl素人なのですが必要に迫られてWEBで調べながら
ソースを解析していますが、次のコードで完全に止まってしまいました。

$hts =~ s/##([^#]+)##/$FORM{$1}/g

この場合、
#hts から ##([^#]+)## を探して $FORM{$1} に全て置き換えようとしていると思うのですが、以下2点が理解できず困っています。

1.##([^#]+)## の意味
$htsに##で囲まれた文字列が複数あるのでそれら全てを探すということでしょうか?

2.$FORM{$1} の意味
$1は1.で検索した結果だと思いますが、$FORM{ }は一体なんでしょうか?

素人がいきなり解析するのは無謀なのは承知の上ですが、
どうしても業務で必要なので、お知恵をお貸し下さい。
よろしくお願いいたします。

Aベストアンサー

1.
perlを基準に「正規表現」で調べてごらん

2.
同じくperlでHTMLのformデータを受け取る方法を調べてごらん

Q特定のdirで発行したcookieを上のdirで参照できますか?

特定のdirで発行したcookieを上のdirで参照できますか?

クッキー発行では、PATHやドメイン等は設定しておらず、クッキー名とUserIDとPASSしか発行していないのですが、
PATHを設定した場合、クッキー値は、クッキーを生成したWebページ、同じディレクトリ内のWebページ、
同じディレクトリ内のサブディレクトリ内のWebページで参照が可能らしく、
省略時はCookie を設定したページのパス名になる。との事らしいのですが、

/A/a1/bbs.cgiへ認証した際に発行されたクッキー(クッキー名/ID/PASS)を
/A/bbs.cgiで参照ってできますでしょうか。

上の階層である
/A/bbs.cgi(同じCGIスクリプト)でクッキー情報を参照した場合、クッキー名だけが参照できている状況で困惑しています。

どなたか正しい情報をご掲示頂けませんでしょうか。宜しくお願い致します。

Aベストアンサー

以下の参考リンクをじっくり読んでみましょう。

http://www.futomi.com/lecture/cookie/
http://www.futomi.com/lecture/cookie/specification.html

参考URL:http://www.futomi.com/lecture/cookie/


おすすめ情報