cgiからcgiを呼び出す方法

このQ&Aのポイント
  • perlのcgi製作を始めて7日目の素人で恐縮ですが、cgi Aに対して新たにcgi Bを作成し、cgi Bからcgi Aを呼び出したいですが、うまくいきません。
  • 試した例として、exec関数や<!--#exec cgi-->タグを使用しましたがうまく動作しません。
  • Apacheをローカルにインストールし、cgi Bの認証フォームでコードを入力してDB内のデータと一致した場合にcgi Aを呼び出したいですが、正常に動作しません。
回答を見る
  • ベストアンサー

cgiからcgiを呼び出す方法

perlのcgi製作を始めて7日目の素人で恐縮ですが、教えてください。 タイトルのキーワードで検索し、いろいろ試しておりますがうまく動作しません。 ■試した例 exec("./cgi A.cgi") <!--#exec cgi="./cgi A.cgi"--> もともと単体で動作していたcgi Aに対して新たにcgi Bを作成し、 cgi Bからcgi Aを呼び出したいのですが、うまくいきません。  cgi A:アンケート回答フォームのようなもの  cgi B:認証フォーム(コードを入力してDB内のデータと一致したらcgi Aを呼び出したい) 自分のPCにApacheをインストールし、ローカルで実行しております。 cgi Bはcgi Aを呼び出す部分をコメントアウトすれば動作します。 どなたか良きアドバイスをよろしくお願いします。

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

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

> exec("./cgi A.cgi") > <!--#exec cgi="./cgi A.cgi"--> これ、何を意図したものですか? ./cgi ってなんです? この書式だと、 ./cgi(カレントディレクリのcgiというコマンド)に A.cgi を引数にして実行しようとします。おそらく、cgiなんて実行ファイルや命令は無いでしょうから失敗するでしょう。 方法としては次のものが考えられます。 ・正しく A.cgi を実行する PCでApache使ったことないので、どうなるか確認取ってませんが、 A.cgi が単独で実行できるなら exec("A.cgi") ; あるいは、Perlコマンドを指定して exec("perl A.cgi") ; A.cgiにパラメータを渡すなら、仕様にしたがって。 あと、httpのヘッダが重複しないように注意。 ・ location や refresh を使って、 A.cgiのURLへリダイレクトする。

crescentmonkey
質問者

お礼

コメントありがとうございました。 リダイレクトというキーワードで新たな知識を得ることが出来ました。 また、状況に変化があったので新たな質問を立てさせていただきました。

crescentmonkey
質問者

補足

記述がへたくそですみません。 ご認識通り正しくはexec("A.cgi") ;です。パラメタは無しです。 単純にA.cgiに制御を渡したいのみです。 具体的にはexec("./test.cgi");と記述しておりましたが、 試しにexec("test.cgi");で実行したところ、 IEが待機中のまま返ってこなくなりました。 あと、 >httpのヘッダが重複しないように注意。 >・ location や refresh を使って、 A.cgiのURLへリダイレクトする。 この点を掘り下げて教えていただけると幸いです。 宜しくお願いします。

その他の回答 (1)

回答No.2

system('A.cgi'); または `A.cgi`; このことでしょうか? HTML、CGI、Perl、SSIはそれぞれ別物ですから、 それぞれの区別を付けて置いた方が良いです。

crescentmonkey
質問者

お礼

コメントありがとうございました。 状況に変化があったので新たな質問を立てさせていただきました。

crescentmonkey
質問者

補足

記述がへたくそですみません。 ご推測の通りです。 何かアドバイスを頂けると幸いです。 宜しくお願いします。

関連するQ&A

  • cgiからcgiを呼び出す方法2

    先日「cgiからcgiを呼び出す方法」で質問させていただいたのですが、 その後の状況にて新たな質問をさせていただきます。 【経緯】 もともと単体で動作していたcgi Aに対して新たにcgi Bを作成し、 cgi Bからcgi Aを呼び出したいのですが、うまくいきません。  cgi A:アンケート回答フォームのようなもの  cgi B:認証フォーム(コードを入力してDB内のデータと一致したらcgi Aを呼び出したい) 【その後の状況】 exec("perl A.cgi"); とすることで cgi A の画面を表示することが出来ました。 【新たな質問】 (1) cgi A の画面は表示されましたが title は cgi B のままです。  exec で cgi A が呼び出された時点で title は cgi A にならないのでしょうか? (2)いろいろなサイトに、呼び出し先に  "Content-Type: text/html; charset=Shift_JIS\n\n"  の記述があってはダメとの説明がありましたが、この記述がないと  cgi Aにてデータを入力し、送信ボタンを押すと  500 Internal Server Error(malformed header from script. Bad header~)  が表示されてしまいます。  Content-Type の記述があれば、cgi A の送信ボタンを押すことによって  入力したデータがDBに格納され、また、title も cgi A のタイトルが表示されます。 【cgi A が呼び出された時点の画面イメージ】  cgi B のタイトル  Content-Type: text/html; charset=Shift_JIS  cgi A のタイトル   cgi A の入力項目   cgi A の送信ボタン cgi A の送信ボタン(submit)を押すことによって、完全に cgi Aに制御が渡るということでしょうか? cgi A を呼び出した時点で完全に cgi A に制御を渡したいのですが、 どなたかアドバイスをお願いします。 cgi A の構成を変える必要があるようであれば、その当たりのアドバイスもお願いします。

    • ベストアンサー
    • CGI
  • 二つのcgiが干渉しあうのですが・・・

    cgi初心者です。よろしくお願い致します。 アンケートフォームを二つ作成して、そのフォームを通して、それぞれのcgiが動作するように、cgi-binのフォルダに二つそれぞれファイルにフォームとcgiを設置しました。 最初に作ったAというフォームはキチンとcgiが動作し、sendmailも設定のところに、設定したレイアウトで返信されてくるのですが、それが、何故か次にAを改造したBを動作させると、sendmailは違うアドレスを設定しているのにもかかわらず、Aのアドレスへ送りつけ、なお且つAのフォームのレイアウトで返信されて来ます。 一体どうして、このようなことが起こるのかわかりません。考えられる事、どんな小さなことでも構いません。アドバイスをいただければと思います。 よろしくお願い致します。

    • ベストアンサー
    • CGI
  • サーバーAでcgiで認証し、サーバーBへ飛ばす

    サーバーAでcgiでユーザーIDとパスワードで認証し、サーバーBの一般からアクセスされたくないURLに飛ばす方法を教えてください。 サーバーB側で、どのような受け口を作ればよいのかで悩んでいます。 cgi(Perl)のスキルと、Apacheのスキル少々です。 ヒントだけでもいただけましたら後は勉強します。 (1),サーバーAで、cgi(Perl)を使用してユーザー認証します。 (2),認証OKの場合、cgiからサーバーBへリダイレクトします。 (3),サーバーBでは、上記の認証OKのアクセスだけを許可します。 サーバーBには、htmlやpdfなどを置いています。 これを、.htaccessのREFERER認証を使用して、サーバーAのREFERERを持ったものだけを 通す設定にしてみました。 この場合、最初に呼んだhtmlは表示されますが、そのhtmlからimgタグで呼んだ画像などは 表示されません。 また、そのhtmlから同じディレクトリ内の他のhtmlへ飛ぶこともできません。 特にREFERER認証に拘りません。何か良い方法はありませんでしょうか。

  • CGI:method="post"でもGETになる

    CGIで標準入力によりフォームデータを取得できないため、環境変数%ENV内の値を 調べましたところ、入力フォーム(html)のformタグでmethod="POST"と明示しているにも 拘らず、REQUEST_METHODの値がGETになっており、POST用のCONTENT_LENGTHも GET用のQUERY_STRINGも共に空になっております。 htmlでmethod="GET"と指定した場合には、REQUEST_METHODの値は正しくGETになり QUERY_STRINGからフォームデータを取得できます。 同じCGIをPC上のApache2.4でテストした結果、REQUEST_METHODはhtmlのmethod=~で 指定した通り正しくPOSTまたはGETとなり、それぞれフォームデータを 取得できることを確認いたしております。 この点についてプロバイダに問合せいたしましたが、サポート対象外ということで、 回答を得ることができませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただけないでしょうか、お伺いいたします。 (1)ホスト動作環境 a.CGIサーバ:Apache b. perl 5.10系 (2)PC動作環境 a.OS: Windows 7 b.ブラウザ: Internet Eexplorer 11 c.CGIサーバ: Apache 2.4 d. Activeperl 5.20

    • 締切済み
    • CGI
  • CGIを開けない。。。

    apacheとphpを設定して動作確認したあとに、cgiも操作したいので、Active Perlというものをインストールしてみました。 phpは、http://localhost/で「C:/Program Files/Apache Software Foundation/Apache2.2/htdocs」のフォルダーを参照できるのですが、cgiを開くときには、どこのフォルダーに格納し、URLをどうすれば宜しいのでしょうか?(因みにcgi-binとhtdocsに格納し、http://localhost/***.cgiで試したのですが駄目でした。) Active Perlインストール後に変更した場所 ScriptAlias /cgi-bin/ "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/" <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin"> AddHandler cgi-script .cgi .pl なお、perlの設定には、こちらhttp://www.jisaba.net/xp/actpeal/04.htmのサイトを参考にしました。 環境はWindowsVistaです。 どなたか宜しくお願い致します。

    • ベストアンサー
    • Perl
  • CGIの入手方法を教えて!

    フォームで作ったアンケートページを実際に動作させるのに必要とするCGIの入手方法を教えてください。

  • CGIのパス(Apache winで)

    初歩的な質問ですみません。 環境 windows2000 サーバー Apache/1.3.20 ActivePerl-5.6.1.626 をインストールが完了して、CGIを動作させようとしています。 ApacheでのHTML動作はできています。 CGIプログラムの一行目に #!/usr/local/bin/perl と記載されています。 その文字列を #!c:/bin/perl.exe に変更して現在動作させています。 しかし、ISPのHPスペースのperlへのパスは #!/usr/local/bin/perl なので、転送前に一行目を変更しています。 変更しなくても良いように ApacheでのCGIのパスを #!/usr/local/bin/perl で動作する方法を どなたか教えていただけないでしょうか? ちなみに Perlは[c:\bin]にインストールしてあります。 Apacheは[g:\apache]にインストールしてあります。

  • CGIでフォームデータを取得できません

    CGI(perl)の標準入力についてお伺いいたします。 PC上でテストし動作を確認したCGIをプロバイダのCGIサーバに移植しましたが、 正常に実行終了するものの、標準入力によるフォームデータの取得ができません。 フォームデータを受け取る変数が空になってしまいます。 PCとプロバイダのCGIサーバとでは、CGIスクリプトの記述方法が異なるのでしょうか。 書籍、ネットをだいぶ調べましたが、解決策が見当たりませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただきたいです。 (1)PC動作環境 a.OS: Windows 7 b.ブラウザ : Interne Eexplorer 11 c.CGIサーバ: Apache 2.4 d.perl : Activeperl 5.20 (2)CGIスクリプト(標準入力の部分) 尚、フォームでは、method="POST"を指定しております。 # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; }

    • 締切済み
    • CGI
  • 自前サーバでCGIを~

     まずはLAN内だけで掲示板などのCGIを実行できるようにしてみよう、ということでApacheを使ってCGIの設定をしているんですが、ブラウザからCGIファイルを起動してもInternal Server Errorと出てしまいます。よってそれ以前ということで・・・  コマンドラインから「perl test.cgi」のようにCGIファイルを実行してみるとちゃんと動作するんですが、「type -a perl」で検索したフルパスをそのままCGIファイルに「#!/usr/bin/perl」などのように書いても、ファイルがコマンド化されてくれません。でも、perlの実行ファイルは存在していました。  これは、どうすれば解決できるのでしょうか?

  • Perlを実行する方法

    Perlを実行するために <?php $ret = exec('/usr/bin/php /usr/local/apache/public_html1/testdir/a.cgi'); print $ret; ?> のように書きましたが、a.cgiは実行されないし$retは空白でした。 execでなくてもよいのですが、普通はPHPの実行中に、ある処理をさせるa.cgiを実行させるにはどうしているんでしょうか? a.cgiの処理が終わるまでphpのprint $ret;のステートメントの実行は待ち状態で、a.cgiの処理結果がTRUEなのかFALSEなのかを得られればさらによいです。

    • 締切済み
    • PHP

専門家に質問してみよう