dポイントプレゼントキャンペーン実施中!

よろしくお願いします。

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 使用)

以上、よろしくお願いいたします。

A 回答 (4件)

エラーメッセージが特殊変数$!に格納される場合がありますので、



unless ( chdir $tmpdir ){
## cdに失敗。
print 'chdir ', $tmpdir, 'に失敗。理由:', $!;
}

――みたいに出力させてみたら、原因究明に役立つかも。
既にそのようにプログラミングされてるかもしれませんが。

この回答への補足

ご回答ありがとうございます。

結果は、
「理由:No such file or directory」
でした。
「-d」でフォルダの存在を確認しているにも関わらず
このような結果とになってしまいました。

原因がわからないのであきらめたいと思います。
ご回答いただきました皆様、
本当にありがとうございました。

以上です。

補足日時:2005/11/24 11:03
    • good
    • 0

フルパス指定にしてchdirしてみたらどうでしょう

この回答への補足

フルパスでchdir、フルパスでchroot、
共に失敗のようです。

補足日時:2005/11/24 09:05
    • good
    • 0

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 による文法エラーはありませんでした。

以上、よろしくお願いいたします。

補足日時:2005/11/22 09:31
    • good
    • 0

その 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で失敗・・・

何が原因かわかりますでしょうか?

以上、よろしくお願いいたします。

補足日時:2005/11/21 17:58
    • good
    • 0

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