• ベストアンサー

特定CGI「だけ」が、ローカル環境で実行できない原因について。(POSTでのフォーム送信はローカル実行不可?)

こんばんは。 サーバでは問題なく動くCGI(Perl)が ローカルPC環境で動きません。 ローカルのHTMLファイルから呼び出すと CGIファイルがテキストとして表示されます。 しかし、パス関係の間違いはありません。 動かないCGIファイルを「print "Hello!";」などの 単純な文章に書き換え、同じHTMLから呼ぶと動きます。 また、「Perl文法チェックサイト」で チェックしても、文法間違いはありません。 ほかにどういった原因が考えられますでしょうか? ---------------------------------------- なお、ローカルのHTMLでは 「form」にラジオボタンを配置、 「submit」で「POST」送信したうえで その結果によってHTMLを生成出力するようにしています。 ここらへん、まったくよく分かっていないのですが もしかして、こういう送信はローカルでは 実行できないとかあるのでしょうか? 送信部分を削って、HTML出力だけのCGIにすると動きます。 繰り返しますがサーバ上では動作しています。 よろしくお願いいたします。 ---------------------------------------- ◆環境◆ WindowsXP IE6.01 httpd 1.42m  ActivePerl(バージョンの見方が分かりません)

  • CGI
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.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を呼び出すことになるのでテキスト表示になってしまいます。

JumpingQueen
質問者

お礼

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

JumpingQueen
質問者

補足

ご回答ありがとうございました。 あらら。ということは、質問文に書いた 私の以下の文章は、「あなたねぇ、ウソをついて 人をからかってはいけませんよ」と いうことになりますか? > 動かないCGIファイルを「print "Hello!";」などの > 単純な文章に書き換え、同じHTMLから呼ぶと動きます。 焦ってもう一度やってみたら、今度は動かない。 過日は文章出力で試したため、テキスト表示されたのを 動作したと勘違いしてしまったのかなぁ。 「いや、そんなはずはない」という思いもあるため いましばらく確認作業をしてみます。 ちなみにWWW検索したらこんな文書がありました。 ---------------------------------------- CGIファイルから別のCGIファイルやPLファイルを呼び出して 使用する場合には、この関連付けが機能しない為、注意が必要です。 呼び出す方のCGIファイルには、呼び出されるCGIファイルを 絶対パスにて指定しなければなりません。 http://sakaguch.com/WWWserver.html ---------------------------------------- CGIファイルから呼び出してはいませんが、 理屈的にはこれと同じということでしょうか? 検証を続けて、納得できましたら締め切ります。 ありがとうございました。

その他の回答 (1)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

もしかしてメールを送信しようとしているとか? SENDMAILとかで。 その場合、SENDMAILをインストールして、正しいパス指定をしなければいけません。 WIN版のSENDMAILは有料ですけども。 そうでない場合はその送信部分のソースを見ないと答えられません。

JumpingQueen
質問者

お礼

すみません、補足です。 ふと気になってHTMLの <form action="../cgi-bin/test03.cgi">の部分を <form action="http://127.0.0.1/~***/***/cgi-bin/test03.cgi">と ローカル上の絶対指定にしたら動きました。 ここがおかしいということのようですが 相対指定ではいけないのでしょうか? なお、サーバ上とミラーリングしていますので 相対パス自体は間違っていません。

JumpingQueen
質問者

補足

ご回答ありがとうございました。 残念ながら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 *****; }

関連するQ&A

  • ローカル環境でのCGIエラー

    ActivePerlとAn HTTPdでWindowsXP HomeEditionのPC上でCGIを動かそうと思っています。 どちらも最新版をダウンロードしてインストールしました。 ActivePerlに関してはegフォルダ下のexample.plで動作確認が取れています。 An HTTPdに関してはhttp://127.0.0.1以下のURLを指定してページが表示されています。 ですが、htmlからcgiを呼び出そうとすると「ページを表示できません」「サーバーが見つからないか、DNS エラーです。」のエラーが出てしまいます。 試しにcgiファイルをフルパスで指定したのですが同じでした。 ちなみに、簡単なCGIプログラムtest.cgiを作成、サーバにアップして動作を確認しましたがローカルではエラーになります。 また、ローカルでコマンドプロンプトにて c:\usr\local\bin\perl c:\プログラムのパス\cgi-bin\test.cgi と入力すると内容を表示します。 コマンドプロンプトでCGIプログラムのあるcgi-binディレクトリに移動して perl -v と入力するとperlのバージョン情報を表示するので、パスは通っていると思われます。 Au HTTPdのerrors.logには Thu Aug 16 19:21:18 2007 Warning: CGI TerminateProcess 2500 error 5 とりあえず、自分で原因を絞れるであろうところはあたってみたつもりですが、何か見落としていることがあるでしょうか? もしかしたらAu HTTPdに問題があるでしょうか?

    • 締切済み
    • CGI
  • ローカルでのCGIの実行テストの方法を教えてください

    CGIをWindows Meで動作させたいのですが、とほほのWWW入門を見てみると、 ActivePerlとAn HTTPDのソフトを使うとかいてあり、 An HTTPDは雑誌のCD-ROMで入手したのですがActivePerlはありませんでした。 インターネットから入手するしかないのでしょうか?ダイアルアップ接続のため、 時間が掛かりそうだし、なかなかダウンロードする気になりません。 もし他にローカル環境でCGIの動作テストをする方法があれば教えてください。 またAn HTTPDのソフトだけではローカルでのCGIテストはできませんか? それと、とほほのWWW入門に「ActivePerlのオプションであるPerlScriptを インストールした人は、セキュリティに関して十分に注意し、レジストリの修正を 忘れないようにしてください。」と書いてありますが、これはどういう意味ですか? PerlScriptをインストールするのとしないのとではどう違うのですか? 教えてください。よろしくお願いします。

    • ベストアンサー
    • Perl
  • ローカル環境でのCGIの処理速度が遅いです。

    Xamppをインストールして Apacheとmysql、perlを使用した仮想サーバーをローカル環境に構築しました。 しかし、普通のページ(HTML等)はサクサク表示するのですが、CGIファイルの処理速度がかなり遅いです。 具体的にはMovabletypeを使用しているのですが書き込み、再構築・ブログの管理画面表示など全てに時間がかかる状態です。 現在はレンタルサーバーを借りてそこにもMTをインストールしているのですが、はっきりいってそのレンタルサーバーより2~3倍は遅いです。 私はてっきりローカル環境であればレンタルサーバーと同等、もしくはそれ以上の速度でCGIが実行されると考えていたのですがこういうものなのでしょうか? また、処理速度を早くする方法などはないでしょうか? おわかりの方がおられましたらご教授の程、よろしくお願いします。 ▼PC環境 Windows2000 Pentium4 1.8GHZ メモリ 512MB ▼サーバー環境 Apache HTTPD 2.2.6 MySQL 5.0.45 Perl 5.8.8-2.2.4 ▼使用ソフト Movable Type version 4.01

    • ベストアンサー
    • CGI
  • 自作CGI(メールフォーム)のテスト環境

    現在、メールフォームのCGIを自作しています。 PC:WindowsXP 言語:Perl(v5.6.1) ローカルテスト環境のためにインストールしたソフト: AN HTTPD, ActivePerl, Radish, Sendまね~る 教本:CGI/Perl作り方入門(KENT著) 簡単なメールフォームを作成し、動作確認も上手く行っているのですが、 数回~数十回に一度、処理がフリーズする現象が発生します。 (AN HTTPDが"プロセス終了待ち"、Radishがメール送信タスクのままいつまで経っても終わらない) どうやら、前のメールの送信タスクが完了しないうちに新しくメール送信すると、この現象が起こるようです。 教本に載っていたサンプルでも同じ現象が起こるため、CGIではなく ローカルテスト環境がちょっと不安定?なのだろうと、個人的に考えていますが、 初の自作ということもあり、このまま実動サーバにて稼動させるのには若干不安があります。 そこで、Sendまね~る&Radish以外でメールフォームのローカルテストが可能なソフトを探しています。 フリーソフトや解説サイトがあるものだと嬉しいのですが... ご存知の方教えてください!! よろしくお願いします。

    • ベストアンサー
    • Perl
  • ローカル環境でのCGI

    社内アンケートとして、 CGIをもちいた、アンケートを制作しております。 <FORM ACTION="http://hogehoge.local/cgi-bin/aaa.cgi" METHOD="POST" onSubmit="return form_check(this)" name=""> なまえ:<INPUT TYPE="radio" NAME="name" VALUE="OK"> ~~~~~~ ~~~~~~ <INPUT TYPE="hidden" NAME="number" VALUE=""> <INPUT TYPE="submit" NAME="answer" VALUE="送信する"> <INPUT TYPE="reset" NAME="reset" VALUE="リセット"> </FORM> </form> でhoge.cgiを動かしたいと思っております。 サーバーへアップし、cgi-bin配下でパーミッションを設定した場合はきちんと動きます。 当たり前ですが、ローカル上では動かなかったです。 社内ネットワーク上 \\hogehoge\cgi-bin\aaa.cgi ⇒ http://hogehoge.local/cgi-bin/aaa.cgi 【動かず】 hogehogeというディレクトリのcgi-binディレクトリのaaa.cgiを修正しますと そのままcgiが動くようにしたいのです。 htmlはもちろんのこと動きます。 サーバーアップ http://hogehoge.local/cgi-bin/aaa.cgi 【動作確認OK】 という状態で困っております。

    • 締切済み
    • CGI
  • ローカル環境でメールのテスト送信

    サーバにアップする前にフォームメールの送信テストをしたのですがエラーになってしまいます。 PC環境:windowsXP     AN HTTPD     ActivePerl     Radish sendまね~る でサーバ環境を作りました。 ・sendまね~る設定時のテスト送信はできました。 ・CGIでsendmailパスの\を/に変えてもだめでした。 ・フォームメールで入力→確認ページまでは動作します。 ・エラーログにError Response 404 よくある原因などを教えていただきたいです。 宜しくお願いします。

    • ベストアンサー
    • CGI
  • CGIからCGIを、CGI環境変数付きで実行するには?

    CGI(Perl)からCGI(Perl)を実行してその出力を得るには どうしたら良いでしょうか。 そのCGIがもっている環境変数(IPアドレスとか、POSTデータ)も 渡したいのですが・・・。 Openでパイプを使ってやればいいとまではわかり、 環境変数などを渡さないで純粋にCGIを実行させて その出力を受け取るところまでは出来ました。

    • ベストアンサー
    • Perl
  • CGIフォームが作動しない原因について

    メールフォームのCGIを作成したところ、起動せず、500番のISEエラーになってしまいます。 他のサーバーに置いたところ問題なく起動し、 perlのパスは #! /usr/bin/perl #! /usr/local/bin/perl どちらもためし、 パーミッションも、705や755などで試したのですが、作動いたしませんでした。 また、メールフォームCGIに問題があるのかと、簡易的なCGIを設置し、パスやパーミッションをいじってみたのですが、そちらも作動いたしませんでした。(他サーバーでは機動確認済み) やはり、パーミッションやperlのパスがサーバーによって独自の設定になっているのでしょうか? その場合、サーバー管理会社に連絡をとらずに、確認する方法はあるのでしょうか? CGIやサーバーなどのネットワークに詳しくないもので、 どうかご教授ください!

    • 締切済み
    • CGI
  • ローカル環境でCGIファイルが動作しません。

    Movabletypeをローカル環境で構築しようと思い、 http://likealunatic.jp/2007/06/04_xampp_mt.php 上記サイトを参考にXAMPP、XAMPP Perlアドオンをインストールしました。 おそらくApacheのバージョンは2.2.4、PERLはPerl 5.8.8になると思います。 設定が完了し、ローカルホストへのアクセスが無事成功したのですが CGIファイルへアクセスすると500エラーと表示されます。 ファイルの関連付けとScriptInterpreterSource registryの修正は行っています。 CGIファイルを直接編集し、CGIのパスを正常なものに変更すると動作するのですが・・・これは何が原因なのでしょうか? 使用OSはWINODOWS 2000 です。 よろしくお願い致します。

  • フォームメールの特定項目を、CGIに貼付け実行する

    似た質問の回答を捜しましたが、良く理解できない「おじさん」です。 よろしくお願いいたします。 A.現状:  フォームメールHTML(KENTさん)からWEB de アンケート(無料CGI)にデータを送りたいweb_de.cgiを修正して、「川柳の投句ページ」を作成しています。  投句者の情報が必要なので、Cgiにリンクを貼り、postmail.htmlで、情報入力をしていますが、   ・本人の投句を「メールホーム」に記入し、   ・さらに「CGI」の「textBOX」に同じ句を書き込む現状です。   ・postmail.htmlに記入した「投句」データを送りたいのです。  HTML内から、直接CGIにデータ貼付け&CGI内のボタンを押すことは、可能でしょうか? (但し、CGI内の変更は、私には未熟で?です。・・・出来るのは文字の記述修正位です) よろしく、お願いいたします 1.送信側(postmail.html)  ■送りたい項目   <form action="./postmail.cgi" method="post">  <textarea name="投句1" cols="50" rows="1"></textarea> 2.受取側(web_de.cgi?_mode=view&id=1329846611)  ■受け取る項目の記述    #!/usr/local/bin/perl   (略、該当箇所のみ記載)   { print "<b> 投句する:</b>   <input typep=text name=\"new_v\" value=\"\" maxlength=80 size=40>"; }   if ( !$time_out ) { print "<input type=submit value= 投句 >" ; }  (略) B.実行したいこと 1).postmail.html内の「"投句1"」を 2).web_de.cgi内のtextに貼付け、CGI投句ボタンを押して、 3).元のpostmail.htmlに戻る 4).「"投句2"」、「"投句3"」を実行 5).元のpostmail.htmlに戻る 6).元のpostmail.htmlに戻る   (投句を含めた他の情報を入力、送信する) C.教えて頂きたいこと  ■Bの2)に記述した命令の記述  恐れ入りますが、よろしくお願いいたします。

    • 締切済み
    • CGI

専門家に質問してみよう