CGI/Perlで作成したプログラムのホスティング先をWindowsサーバに移行した際のファイルオープンエラーについて

このQ&Aのポイント
  • CGI/Perlで作成したプログラムをWindowsサーバに移行した際に、ファイルオープンエラーが発生しています。
  • ファイルの更新権限に関する問題の可能性があります。
  • WindowsサーバではUNIX系とは異なり、フォルダーのパーミッション設定が存在しないため、解決方法がわかりません。アドバイスをお待ちしています。
回答を見る
  • ベストアンサー

CGI/Perlで作成したプログラムがありまして、今回、ホスティング先

CGI/Perlで作成したプログラムがありまして、今回、ホスティング先をLINUXサーバからWindowsサーバに移行に伴い、テストを実施しているのですが、ファイルオープンがうまくいきません。 open(IN,">temp1.txt") || &error("Can't open $file"); と記述するファイルオープンエラーになります。 open(IN,"temp1.txt") || &error("Can't open $file") と記述するとOKになります。 何か、ファイルの更新権限で引っかかっているように見えるのですが、UNIX系と違って、Windowsのフォルダーにはパーミッションの設定はないものと思っており、どうしてよいか判りません。 詳しい方でアドバイスいただけると助かります。

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

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

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

>open(IN,">temp1.txt") || &error("Can't open $file");  上書き専用モードで開くと、だめだが入力用で開くと開けるということですね。 INというファイルハンドルをつけているということは、 open(IN,">temp1.txt"); とちょっと変・・ではあるけど、IN だろうがOUTだろうがファイルハンドルにすぎないのでかまいませんが、 他のオプションでは? open IN,"textA.txt" or die "open IN 失敗 :$!"; open OUT,"textB.txt" or die "open OUT 失敗 :$!"; while($input = <IN>){ print OUT $input; } close IN; close OUT; をためしてみ。  

WATAYANOBORU
質問者

お礼

情報ありがとうございます。ホスティング提供者のツールで、UNIXのパーミッション相当を設定するものが見つかりまして、そのツールでR権限を該当フォルダーに付与したところ、動くようになりました。 ありがとうございました。

その他の回答 (1)

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

ウインドウズビスタ以降では、フォルダのプロパティに[セキュリティ]タブがあります。 そのフォルダごとに利用者および利用グループの権限が細かく設定できるようになっているので、Administratorまたはuserまたはeveryoneまたは管理者グループまたは利用グループに権限設定し再起動して動作を確かめていくと動くかもしれません。 また質問内容中の">temp1.txt"の部分はリダイレクト操作に見えますが、フォルダの指定のつもりなのかもしれないと考えました。つまり、フォルダの指定だったら、"./temp1.txt"が目的のファイル位置指定になります。

WATAYANOBORU
質問者

お礼

情報ありがとうございます。ホスティング提供者のツールで、UNIXのパーミッション相当を設定するものが見つかりまして、そのツールでR権限を該当フォルダーに付与したところ、動くようになりました。 ありがとうございました。

関連するQ&A

  • plalaのcgiサーバへのPerlプログラムのUPについて

    windows上のローカルサーバで、自作のperlプログラムを動かし、きちんと動作したのでplalaのcgiアカウントをとり、UPした後、パーミッションもplalaの注意書きに書かれていたとおり、ディレクトリ以外のバイナリや、テキストを「704」に変更しました。 Perlへのパスも間違っておらず、プログラムミスということもないと思っています。 しかし、UPしたcgiファイルにアクセスしようとすると、「Internal Server Error」と表示され、パーミッションを「755」などにかえても、パーミッションがおかしいとでます。 いったいパーミッションを何にすればよいのでしょうか?

  • perlで文書を読み込み検索置換したい

    MAC OS Xを使用しています。 検索置換のプログラムをperで作成し、Applescript上で呼び出したいのです。 実際はファイルメーカーのスクリプトの中でApplescriptを記述してその中で呼び出したいのです。 do shell script "perl ~.pl"という感じで使えるのではないかと 下記のようなサンプルスクリプトを見つけたのですが 内容の更新の仕方がよく分かりません。 perlについては全くの初心者でいろいろ調べたのですがよく理解できませんでした。 検索置換したいのですが、どういうふうに書けばいいのでしょうか。 (2)の部分を教えて下さい。宜しくお願いします。 use strict; use warnings; use File::Copy 'move'; # (1) ファイルの内容を読み込む my $file = 'F:\共有\PERL\test.txt'; open my $fh, '<', $file or die qq/Can't open file "$file": $!/; my $content = do {local $/; <$fh>}; close $fh; # (2) 内容の更新 ▼をリターンに置き換えたいのです。 $line =~s/▼/\n/; # (3) 一時ファイルへの書き出し my $temp_file = "$file.$$." . int(rand 10000); open my $temp_fh, '>', $temp_file or die qq/Can't open file "$file": $!/; print $temp_fh $content; close $temp_fh or die qq/Can't open file "$file": $!/; # (4) 一時ファイル名を元のファイル名に変更 move $temp_file, $file or die qq/Can't move "$temp_file" to "$file": $!/;

  • cgi(perl使用)でファイルを作る方法を教えてください

    こんにちは、 perlをやっています。 プロバイダ上にperlスクリプトを拡張子cgiでUPしています。 いまやりたいことがあるんです、それは ファイルをサーバ上の領域に作るというものです (ちなみにサーバの種類はUNIX系です) ファイルはゼロバイトの何も無いテキストファイルを作りたいんですが どのような関数を使えばファイルができるのでしょうか。 また、ファイルを作った後パーミッションの変更(chmodコマンドのような 動き)をする関数等があれば教えてください。

    • ベストアンサー
    • Perl
  • 「CGIプログラムエラー」って何ですか?

    Win.MEを使ってます。 今まで見れていたサイトがある日突然見れなくなり、以下の画面になるのですが、どうしたらまた見れるようになるでしょうか? すみませんが、素人にもわかるような説明でお願いします。 ***************************************************** 500-Internal Server Error CGIプログラムエラーのため表示することが出来ません。 多くの場合、以下のような理由が考えられます。 ・ パスの指定間違い perl のパスは /usr/bin/perl です。 ・ パーミッション(権限)が正しく設定されていません FTPソフトなどで、パーミッションを適切に設定してみてください。 ・ スクリプトの改行コードに問題があります ファイルの転送時はアスキーモードで転送して下さい。 ・ スクリプトの記述に誤りがある可能性があります 文法チェック等を行ってください。 上記が正しい場合、以下のような理由が考えられます。 ・ サーバーへの負荷が高いため実行できないCGI 負荷が高いスクリプトは、自動的に処理が中断されてエラーとなる場合があります。 ・ 混雑時等、サーバー全体の負荷が高くなっている状態 時間をおいてから再度アクセスしてください。

  • Perlでテキストファイル読み込み

    基本的な質問ですみません。 サーバ上のテキストファイルを読み込んで ローカルのテキストファイルに書き込むというだけなのですが 何度やってもできません。 以下プログラムですが #!usr/bin/perl open(IN,"http://*****/***/***.txt"); $file = <IN>; close(IN); open(OUT,"> a.txt"); print(OUT "$file"); close(OUT); サーバのアドレスは、URLうってみて見れたのでhttp://***(以下略)であってると思います。 サーバのテキストにはchmodで777と権限を与えました。 プログラムに問題あるのでしょうか。 この場合考えられる原因を教えてください。

    • ベストアンサー
    • Perl
  • 「CGIプログラムエラー」って何ですか?

    Win.MEを使ってます。 今まで見れていたサイトがある日突然見れなくなり、以下の画面になるのですが、どうしたらまた見れるようになるでしょうか? もう3ヶ月位この状態です。 すみませんが、素人にもわかるような説明でお願いします。 ***************************************************** 500-Internal Server Error CGIプログラムエラーのため表示することが出来ません。 多くの場合、以下のような理由が考えられます。 ・ パスの指定間違い perl のパスは /usr/bin/perl です。 ・ パーミッション(権限)が正しく設定されていません FTPソフトなどで、パーミッションを適切に設定してみてください。 ・ スクリプトの改行コードに問題があります ファイルの転送時はアスキーモードで転送して下さい。 ・ スクリプトの記述に誤りがある可能性があります 文法チェック等を行ってください。 上記が正しい場合、以下のような理由が考えられます。 ・ サーバーへの負荷が高いため実行できないCGI 負荷が高いスクリプトは、自動的に処理が中断されてエラーとなる場合があります。 ・ 混雑時等、サーバー全体の負荷が高くなっている状態 時間をおいてから再度アクセスしてください。

  • perl-cgi 文章のマッチングについて

    辞書テキストで作ってそれを、任意の文章にマッチングさせ、変換したいのですが、どのようにすると、(プロバイダの)サーバに負担の少ないCGIになりますか? やりたいことは、 文章>>eigo(lemonとスシ) を入力すると、 文章>>エイゴ(レモンとスシ) と返されるCGIです。 今考えているのは、下記ですが、perl-cgiを初めて間もないため、色々なHPを参考にして、なんとか、変換まではできたのですが、、サーバに過大な負担をかけているかが心配です。そこで、効率的なものに書き換えていただけますととても助かります。 宜しくお願い致します。 ----etoj.cgi---- #!/usr/bin/perl print "Content-type: text/html;charset=utf-8\n\n"; $str = '文章>>eigo(lemonとスシ)'; open in,"dic.txt"; @array = <in>; close in; $n = 0; foreach(@array){ $_ =~ s/\n//g; $_ =~ s/\r//g; @temp = split(/\t/,$_); $eng[$n] = $temp[0]; $jpn[$n] = $temp[1]; undef @temp; $n++; } print $str; $i=0; foreach(@eng){ $str =~ s/$_/$jpn[$i]/g; $i++; } print "<HR>"; print $str; exit; ---------------- --dic.txt-- lemon¥tレモン eigo¥tエイゴ susi¥tスシ 以下、500KB程度続きます。 -----------

    • ベストアンサー
    • Perl
  • Perl CGIで、アップロードができない

    Perl my $fhandle = $query ->upload('A'); HTML <INPUT TYPE="HIDDEN" VALUE="C:\temp\1.txt"/> ボタンクリックで、JavaScriptでHTMLのhiddenに値をセットしています。 その値をPerlでuploadすると、値がセットされません。 <INPUT TYPE="FILE" で、手動でセットすると上手くいきます。 なんんとかHIDDENでできないでしょうか? FILEでしか駄目な場合、JavaScriptで、FILEにセットする方法をご教授下さい。 今、現状はIFRAMEでFILEで選択したファイルパスをボタンクリックで、メインのFORMのHIDDENに渡して、CGIを呼んでいます。

    • ベストアンサー
    • Perl
  • エラーになってしまいます。

    先日、ファイルの一行だけを読込める?と質問した者です。早速教えて頂いた方法でやってみました。 open(IN,"A.txt"); while ($xx = <IN>) {   if ($. == 5) {     print $xx;   } } close(IN); とやりました。 サーバーエラーになるのでまず open(IN, "A.txt"); while ($xx = <IN>) { print $xx; } close(IN); とファイルの読み込みでやってみたのですがそれでもサーバーエラーになってしまいました。 エラーの原因がどこにあるのか、わからなく困っています。考えられるような原因は何でしょうか? ちなみにcgiのパーミッションは755です。 あとtxtファイルをどこに置けばいいのか、よくわからないいのですがそれが原因なのでしょうか?

    • ベストアンサー
    • CGI
  • perl(CGI)から作成したディレクトリがFTPで消せないのはなぜ?

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

    • ベストアンサー
    • Perl

専門家に質問してみよう