プロが教える店舗&オフィスのセキュリティ対策術

こんばんは。

サーバでは問題なく動くCGI(Perl)が
ローカルPC環境で動きません。
ローカルのHTMLファイルから呼び出すと
CGIファイルがテキストとして表示されます。

しかし、パス関係の間違いはありません。
動かないCGIファイルを「print "Hello!";」などの
単純な文章に書き換え、同じHTMLから呼ぶと動きます。

また、「Perl文法チェックサイト」で
チェックしても、文法間違いはありません。
ほかにどういった原因が考えられますでしょうか?

----------------------------------------
なお、ローカルのHTMLでは
「form」にラジオボタンを配置、
「submit」で「POST」送信したうえで
その結果によってHTMLを生成出力するようにしています。

ここらへん、まったくよく分かっていないのですが
もしかして、こういう送信はローカルでは
実行できないとかあるのでしょうか?
送信部分を削って、HTML出力だけのCGIにすると動きます。

繰り返しますがサーバ上では動作しています。
よろしくお願いいたします。

----------------------------------------
◆環境◆ WindowsXP IE6.01 httpd 1.42m 
ActivePerl(バージョンの見方が分かりません)

A 回答 (2件)

><form action="

http://127.0.0.1/~***/***/cgi-bin/test03.cgi">としたら動く

よくある勘違いだと思うけど、formを記述しているファイルもローカルサーバー経由
http://127.0.0.1/~***/***/xx.htmlなど)で呼び出してないと、
単なる、ファイル表示では、file:///d:/xxx..../xx.html というアドレスになり、
相対アドレス指定では、file:///d:/xxx..../test03.cgiを呼び出すことになるのでテキスト表示になってしまいます。

この回答への補足

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

あらら。ということは、質問文に書いた
私の以下の文章は、「あなたねぇ、ウソをついて
人をからかってはいけませんよ」と
いうことになりますか?

> 動かないCGIファイルを「print "Hello!";」などの
> 単純な文章に書き換え、同じHTMLから呼ぶと動きます。

焦ってもう一度やってみたら、今度は動かない。
過日は文章出力で試したため、テキスト表示されたのを
動作したと勘違いしてしまったのかなぁ。

「いや、そんなはずはない」という思いもあるため
いましばらく確認作業をしてみます。

ちなみにWWW検索したらこんな文書がありました。
----------------------------------------
CGIファイルから別のCGIファイルやPLファイルを呼び出して
使用する場合には、この関連付けが機能しない為、注意が必要です。
呼び出す方のCGIファイルには、呼び出されるCGIファイルを
絶対パスにて指定しなければなりません。
http://sakaguch.com/WWWserver.html
----------------------------------------
CGIファイルから呼び出してはいませんが、
理屈的にはこれと同じということでしょうか?

検証を続けて、納得できましたら締め切ります。
ありがとうございました。

補足日時:2005/09/21 08:50
    • good
    • 0
この回答へのお礼

納得できましたので締め切ります。
どうもわたしに勘違いがあったようです。
お騒がせして申しわけがありませんでした。
また、ありがとうございました。

お礼日時:2005/09/22 01:19

もしかしてメールを送信しようとしているとか?


SENDMAILとかで。
その場合、SENDMAILをインストールして、正しいパス指定をしなければいけません。
WIN版のSENDMAILは有料ですけども。

そうでない場合はその送信部分のソースを見ないと答えられません。

この回答への補足

ご回答ありがとうございました。
残念ながらsendmailは使っていません。

ラジオボタンを押してボタンでsubmitし、
valueが0と1の場合で違うHTMLを生成し出力するだけのものです。

「記述すると動かなくなる部分の」perlスクリプトと
それを呼び出すHTML部分は以下のとおりです。
(機能拡張を予定しているため、現在は意味のない記述もしています)。

ただ、何度も繰り返しますが、サーバでは動いています。
なお、Perlのパスはでたらめですが、
でたらめでも動くような環境にしています。

◆HTML◆
<form action="../cgi-bin/test03.cgi" method="post" enctype="text/css">
<p><input type="radio" name="answer" value="0" tabindex="1" accesskey="F" />回答例1</p>
<p><input type="radio" name="answer" value="1" tabindex="2" accesskey="S" />回答例2</p>
<div><input type="hidden" name="FileName" value="*****" /></div>
<div><input type="submit" value="答える" tabindex="3" accesskey="A" /></div>
</form>

◆Perl◆
#!/usr/local/bin/perl

require './jcode.pl';
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
}
else {
$buf = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buf);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
&jcode'convert(*value,'euc');
$FORM{$name} = $value;
}

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

if($FORM{'answer'} == 1){
print *****;
}
else{
print *****;
}

補足日時:2005/09/20 12:45
    • good
    • 0
この回答へのお礼

すみません、補足です。

ふと気になってHTMLの
<form action="../cgi-bin/test03.cgi">の部分を
<form action="http://127.0.0.1/~***/***/cgi-bin/test03.cgi">
ローカル上の絶対指定にしたら動きました。

ここがおかしいということのようですが
相対指定ではいけないのでしょうか?

なお、サーバ上とミラーリングしていますので
相対パス自体は間違っていません。

お礼日時:2005/09/20 13:25

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