- ベストアンサー
フォルダの移動をおこないたいのですが・・・
よろしくお願いします。 CGIの中間プログラムとして、 「カレントフォルダを移動して特定のフォルダを削除する」 というようなPGMを作っているのですが、フォルダ移動の処理がうまくいきません。 ----------------------------- use Cwd; $tmpdir="tmp"; if(-d $tmpdir)){ if(chdir("$tmpdir"){ print"成功\n"; } else{ print"失敗\n"; } } ----------------------------- 上記記述の結果は失敗となります(実際のPGMより簡略化しております)。 「tmp」フォルダは存在するが 移動に失敗しているということです。 私の記述方法が間違っているのでしょうか? サーバー・・・HP-UX 開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
エラーメッセージが特殊変数$!に格納される場合がありますので、 unless ( chdir $tmpdir ){ ## cdに失敗。 print 'chdir ', $tmpdir, 'に失敗。理由:', $!; } ――みたいに出力させてみたら、原因究明に役立つかも。 既にそのようにプログラミングされてるかもしれませんが。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
フルパス指定にしてchdirしてみたらどうでしょう
補足
フルパスでchdir、フルパスでchroot、 共に失敗のようです。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
if(-d $tmpdir)){ if(chdir("$tmpdir"){ は、 if(-d $tmpdir){ if(chdir("$tmpdir")){ の間違いだと思われますが、そういうことではないですよね?
補足
すみません、ただのタイプミスです。 正しくはご指摘通り。 ----------------------------- use Cwd; $tmpdir="tmp"; if(-d $tmpdir){ if(chdir("$tmpdir")){ print"成功\n"; } else{ print"失敗\n"; } } ----------------------------- perl による文法エラーはありませんでした。 以上、よろしくお願いいたします。
- ___noboru___
- ベストアンサー率28% (33/117)
その tmp ディレクトリのオーナーとパーミッションはどうなってますか? CGI がウェブサーバによって起動された時のプロセスのユーザーでは chdir できないということはないですか? (たとえば root で 700 とかだと root 以外はそのディレクトリに入れない)。
補足
早速のご回答ありがとうございました。 tmpフォルダは中間で作成され、処理終了後に削除されるため、以下の記述を追記し ------------------------------ if(-d $tmpdir){ print"成功\n"; } if(-r $tmpdir){ print"読み\n"; } if(-w $tmpdir){ print"書き\n"; } if(-x $tmpdir){ print"実行\n"; } if(-o $tmpdir){ print"所有\n"; } if(-e $tmpdir){ print"移動可\n"; } ------------------------------ その結果 ------------------------------ 成功 読み 書き 実行 所有 移動可 ------------------------------ となっておりました。 フォルダであり、読み書き実行権があり、実行ユーザーとtmpフォルダのユーザーが同じで、移動可なのにchdirで失敗・・・ 何が原因かわかりますでしょうか? 以上、よろしくお願いいたします。
補足
ご回答ありがとうございます。 結果は、 「理由:No such file or directory」 でした。 「-d」でフォルダの存在を確認しているにも関わらず このような結果とになってしまいました。 原因がわからないのであきらめたいと思います。 ご回答いただきました皆様、 本当にありがとうございました。 以上です。