perl(CGI)から作成したディレクトリがFTPで消せないのはなぜ?

このQ&Aのポイント
  • HTMLページからCGIを叩くとディレクトリが作成され、アクセスログファイルも正常に作成されますが、FTPからの削除やパーミッション変更ができません。
  • telnetで入っても通常のユーザー権限では削除できず、ルート権限が必要です。
  • なぜperl(CGI)から作成されたディレクトリはFTPから操作できないのか、FTPで操作可能な権限のディレクトリを作成する方法があるのか知りたいです。
回答を見る
  • ベストアンサー

perl(CGI)から作成したディレクトリがFTPで消せないのはなぜ?

HTMLページからそのCGIを叩くと『年月』の名前のディレクトリを作って、 その中に日毎のアクセスログファイルを作成するCGIを作っています。 ディレクトリを作成するパールは以下です。 mkdir($dir, 0777); しかし実行すると$dirのパーミッションは755になってしまいます、 その中に作成されるファイルは正常に作成されるのですが、 そのディレクトリ/ファイル共にFTPから削除/パーミッションの変更が 出来なくなってしまいます。 telnetから入って削除しようとしても普通のユーザー権限では無理で 削除する為にはルートにならなければなりません。 なぜでしょう?FTPから操作できる権限のディレクトリを作る方法が あるのでしょうか? バカな質問だと思いますが分かる方がいらっしゃいましたら教えて下さい。

  • Perl
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

これはCGIのせいではないと思います。 恐らくサーバーのOSの設定で新規ディレクトリを作成するときのパーミッションに制限がかけられているのでしょう。(初期状態でも何らかの制限はかかっていると思います) そこで解決方法なのですが、新規作成時が駄目なら作成後にパーミッションを変更すれば良いのではないでしょうか。 例えば、 mkdir($dir, 0777); chmod(0777,$dir); といった感じでしょうか。 お試し下さい。 #万全を期すならchmodでリターン値を取りエラーチェックした方が良いでしょう。

frogwork
質問者

お礼

返答遅くなって申し訳ないです。なんかせっかくいただいていた ご返事の内容がメールで届いてなかったようで、見つけるまでに 時間がたってしまいました。 アクセスログの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; ----------------------------------------- すると見事成功しました。これで今後このような仕様の仕事がきても 怖がらなくてすみそうです。 本当にありがとうございました。

その他の回答 (1)

  • natural
  • ベストアンサー率37% (419/1115)
回答No.2

No.1の内容は試されましたか? もしうまくいかない様でしたら補足をお願いします。

関連するQ&A

  • Perlでディレクトリごと削除したい

    telnet.cgiを使って、カレントディレクトリで、 rm -rf * を行っても、なぜか(permissin 755にも関わらず)permission denyといわれうまく削除できませんでした。 そこで、perlを使って削除を試みたいのですがどのようにすれば、削除できますか? 参考になりそうなソースを見つけたのですが、ディレクトリの中にディレクトリがある構造のためうまく削除できませんでした。 どなたか、改良していただけないでしょうか? お手数ですが、宜しくお願い致します。 #!/usr/local/bin/perl $dir = "./d/"; opendir DIR, $dir; @files = grep { !m/^(\.|\.\.)$/g } readdir DIR; close DIR; $flag = @files; if ( $flag ) { foreach $file ( @files ) { unlink "$dir$file"; } } rmdir $dir;

    • ベストアンサー
    • CGI
  • perl-cgi「日時によるファイル操作」について

    perl-cgi「日時によるファイル操作」について perl-cgiで、あるディレクトリ中のファイル更新日が最も若い2ファイルを表示して、それ以外を削除したいのですがどのようにすればよいでしょうか? #調べたいディレクトリを読み込む。 $Dir = "./cache"; opendir DIR,"$Dir"; my @alldir = readdir DIR; close DIR; #ファイル(パス)名と作成日時を求める。 #最新2つのファイルパス(名)を表示する。 print "NewFile".ファイルパス1; print "<HR>"; print "OldFile".ファイルパス2; #最新2つ以外は全て削除 unlink($_); exit(0);

    • ベストアンサー
    • Perl
  • FTP関数で・・・。

    $cd = ftp_cdup($conn_id);  if($cd == false)  $check=ftp_nlist($conn_id, FTP_DIR_IMG_TEST.$all_data['templatedir']);  if($check == false)  $mkdir=ftp_mkdir($conn_id, FTP_DIR_IMG_TEST.$all_data['templatedir']); このように親ディレクトリに移動したあとに、 フォルダを作ろうとしています。 がパーミッションエラーとなります。 Permission denied. ディレクトリを作成する場合は絶対パスですよね? 実際にコマンドでデータを見ると、 drwxr-xr-x 2 namae gn 512 11 12 18:43 img となっています。 FTPユーザーはgnで入ってますが、 この場合はgnでディレクトリを作成することができないのでしょうか?

    • ベストアンサー
    • PHP
  • 別ユーザ所有のディレクトリ内にファイル作成できない

    こんばんは。 タイトルのとおりですが、まずPHPでディレクトリを作成し、 その中にindex.htmlを作成しようとしているのですが上手くいきません。 PHPで作成したディレクトリの所有者はapacheになっているためかと思い、 実際にFTPを通して自分で作成したディレクトリの中にindex.htmlを作成したところ上手くいきました。 ディレクトリのパーミッションはいずれもスクリプトにより0777を指定しています。 このように、PHPのみでディレクトリを作成し、その中にファイルを作成する といったことが出来ずにいます。解決策等ございましたらお教えください。 参考までに、ソースを掲載しておきます。 これを設置するディレクトリのパーミッションは0777にしてみましたが、出力は「fopen error」になります。 <?php $path = "./dir/"; if(mkdir($path, 0, true)){ chmod($path, 0777); if($fp = fopen($path."index.html", "w")){ fputs($fp, $put); fclose($fp); print "Created!"; }else{ print "fopen error"; } }else{ print "mkdir error"; } ?>

    • ベストアンサー
    • PHP
  • 消せないディレクトリ

    ホームページを運営していますが、最近サーバをハックされて、消えないディレクトリを作られてしまいました。 ssh コマンドで$ rm -rf dir/を叩いても削除できません。chmod で権限を変えようとすると文字化けしたエラーが出て変えることができません。ディレクトリの中のファイルも同様で削除も権限もファイル名も変えられません。もちろんFTPでも削除できません。何方かご存知でしたらご教授お願い致します。

  • Net::FTP rmdirの記述方法について

    perlでNet::FTPを使用してサーバーのディレクトリーおよびそのファイルを削除しようとおもっておりますが、うまくしていません。 ディレクトリー作成は $ftp->mkdir('/pc/01/'); でうまく作成できますが、削除動作していないです $ftp->rmdir('/pc/01/'); この記述ではダメなのでしょうか? 毎回説明べたで申し訳ございません。

  • CGIを設置しても・・・

    CGIを設置しようと思っているのですが、 ↓のようなメッセージが出ます。 -------------------------------------------------- あなたの設置したCGIは何らかのエラーのため動作しません。 1.パーミッションはあっていますか? トクトクでは各ユーザーの権限でCGIが動作します。 CGIのパーミッションは700です。 CGIを設置するディレクトリーのパーミッションは701で動作します。 パーミッションについての詳しい説明をお読みください。 それ以外の場合はFTPソフトなどでCGIファイルのパーミッションを正しく設定してください。 2.CGIで使用されるファイルのパスはあっていますか? あなたのディレクトリー(フォルダ)のフルパスは /home/member/あなたのアカウント/です。 3.sendmailを使用しようとしていませんか? sendmailは使用できません。 -------------------------------------------------- このなかで、1番が怪しいと思うのですが・・・ 1番の仕方について教えてもらえませんか。 ちなみに、設置しようとしているCGIは、 http://ama.lunar.to/eb/owners.php3 です。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • C言語でのディレクトリ作成についての質問です。

    C言語でのディレクトリ作成についての質問です。 Linuxコマンドのmkdir -pコマンドのようなことをC言語で実現したいのですが、 mkdir(dir1/dir2)のようにすると、エラーになってしまいます。 mkdir(dir1)のように階層でないディレクトリを指定した場合はうまくいくのですが・・・ mkdir関数では階層ディレクトリを1度で作成できないのでしょうか。 ディレクトリをたどってmkdirを1回ずつ使用しなければいけないのか、 階層ディレクトリを指定できる関数がほかにあるのか、 ご教授お願いいたします。

  • ローカルホストでディレクトリ作成

    いつもお世話になっております。 現在、自宅でphpを使って開発をしています。 mkdirを使用してディレクトリを作成しようとしてるのですが、 サーバー上ではパーミッションの設定をその他に対して書き込み権限を与えればうまくいくのですが、 ローカルホスト上では「Permission denied 」エラーが出てうまく作成できません。 IIS6.0でどうやってパーミッションを操作するのかが分からず困っています。 どのようにすればローカル環境でディレクトリ作成できるかお教えください。 開発環境は以下の通りです。 言語:php5 WEBサーバ:IIS6.0 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • androidでのディレクトリ作成

    androidアプリケーションを作成しています。 先月からjavaを始めた初心者なのですが、 下記のコードでディレクトリ作成ができませんでした。 java.ioはandroidでサポートされているようなので、 何が原因で動作ディレクトリ作成がされないのか わかりません。 わかる方よろしくお願いします。 private String DirPath = "/data/data/MEMO"; //作成したいディレクトリのパス File dir = new File(DirPath);  dir.mkdir();