
/*hello.exeのソース*/
#include <stdio.h>
int main (int argc,char* argv[])
{
int i;
printf("Content-type: text/html\n\n");
printf("Hello");
for(i=1;i<argc;i++) printf(" %s",argv[i]);
return 0;
}
上記のC言語で書いた実行ファイルをCGIにしています。いろいろ勉強して経験値を積んでいるところです。このCGIについて,次のように引数を付けて読んでみると,
<!--#exec cgi="/cgi-bin/hello.exe?ryo+kei+yoko"-->
<!--#exec cgi="/cgi-bin/hello.exe ryo kei yoko"-->
[an error occurred while processing this directive]というエラーになります。そもそも,SSIでCGIを実行するとき引数は付けられないのでしょうか?実は,練習用にカウンタを自作したのですが,その書式を引数で渡そうと考えて行き詰まりました。別の方法でもいいので,ブラウザ訪問者のアクション(クリックなど)なしで,引数を渡せないものでしょうか。
No.2ベストアンサー
- 回答日時:
サーバーの種類が書かれていないので、Apacheで説明します。
cgiではなくvirtualを指定してみてください。
<!--#exec virtual="/cgi-bin/hello.exe?ryo+kei+yoko"-->
環境変数"QUERY_STRING"に入りますので、
#include <stdlib.h>
getenv('QUERY_STRING')
で受け取ることが出来ると思います。
> int main (int argc,char* argv[])
この書き方をするなら、
exec cmdで記述するとmain()の引数として受け取れます。
<!--#exec cmd="/cgi-bin/hello.exe ryo kei yoko"-->
という記述になります。
(コマンドプロンプトから起動するときの引数と同じ記法です)
Apache Foundationではcmdでの起動は推奨(virtualのほうが十分なテストを行われているため)されていませんし、
一部のホスティングサービスではcmdを禁止しています。
サーバーの種類や設定にも関係しますので、
それらも書いた方がより的確な答えが得られると思います。
レス,ありがとうございます。自宅サーバ,WindowsXpProでアパッチ2.2を動かしています。CGI,SSLを使用するためのconfファイルの設定は終えています。
試したのですが,
<!--#exec cmd="/cgi-bin/hello.exe ryo kei yoko"-->
<!--#exec virtual="/cgi-bin/hello.exe ryo kei yoko"-->
はどちらも,
[an error occurred while processing this directive]
でした。ネット上で見つけた情報ですが,
http://www.tohoho-web.com/lng/200003/00030004.htm
にも,前者はだめなようなことが書かれています。アパッチのバージョンにもよるのでしょうか?後者はわかりません。
ただ,いただいたご回答は大きなヒントになりました。shtmlファイルで,
<!--#set var="name1" value="ryo" -->
<!--#exec cgi="/cgi-bin/hello.exe"-->
のように明示的に環境変数として引数を渡して,Cで書いたCGIでは,getenv("name1"); として,引数へのポインタをゲットするようにしました。SSIが2行以上になってしまいますが,これはこれでみとおしがよいので,よしとしたいと思います。
先ほど,次のようにカウンターファイルの指定ができるようになりました。上手く動いています。
<!--#set var="counterfile" value="toppage.dat" -->
<!--#exec cgi="/cgi-bin/counter.exe"-->
勉強になりました。ありがとうございました。
No.3
- 回答日時:
virtualとcmdでは記法が違います。
<!--#exec virtual="/cgi-bin/hello.exe?ryo+kei+yoko" -->
<!--#exec cmd="/cgi-bin/hello.exe ryo kei yoko" -->
あと、すみません、-->の前のスペースが抜けていました。
Apache2.xでは-->の前にスペースを入れずに
<!--#exec cmd="/cgi-bin/hello.exe ryo kei yoko"-->
となっているとエラーになります。
アドバイス,ありがとうございます。早速試しました。
<!--#exec virtual="/cgi-bin/hello.exe?ryo+kei+yoko" -->
<!--#exec cmd="/cgi-bin/hello.exe ryo kei yoko" -->
コピーペーストして,半角スペースが入っていることを確認して試しましたが,
[an error occurred while processing this directive]
となりました。Windows上で動作しているApache2.2では引数はサポートされていないように見えますね。
なお,
<!--#set var="counterfile" value="touring.dat"-->
<!--#exec cgi="/cgi-bin/counter.exe"-->
については,-->の前に半角スペースを入れなくてもエラーとならないです。Apacheの2.2ですが,Windows版だからなのかも。
No.1
- 回答日時:
CGIの場合、引数(パラメータ)は
QUERY_STRINGという環境変数で
渡されます。
CGI、QUERY_STRING、URLエンコード
などをキーにして調べてみると
良いのではないでしょうか。
レス,ありがとうございます。
早速調べてみました。URLにCGIと引数を指定して,
環境変数からCGIが受け取るということでしょうか。
htmlの中で,引数を記述して,CGIが受け取りたい
のですが・・・。formを使うとユーザーがクリック
などのアクションをしないと受け取れないので,
なんとか自動でやりたいのですが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- CGI htmlからcgiを自動的に起動させたい 1 2023/02/21 19:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
URLに~/cgi-bin/~を隠す方法
-
フリー配布CGIのファイル名変更
-
EXCELファイルに誰がアクセスし...
-
KENT WEB(昨日の続きです)
-
ローカルでのCGIについて
-
CGIでソースがそのままでてしま...
-
coreダンプの見方。
-
FFFTP CGIのデータを...
-
C言語でCGI
-
cgi を定期的に自動実行
-
携帯サイトとPCサイトの振り分け
-
フォームに入力後、送信ボタン...
-
「EJBとServletの違い」「J2SE...
-
CGIがサーバーに与える負荷
-
ライブラリと処理速度について
-
《エクセルVBA》「他の人が該当...
-
C言語のCGIはプロパイダに聞か...
-
PerlとCで相互に通信をさせたい
-
cgiで呼び出したプログラムを数...
-
実行可能な外部コマンドは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLに~/cgi-bin/~を隠す方法
-
apeboard+の設置について (UUHP)
-
apache で /cgi-bin/にアクセス...
-
下記の文章を翻訳願います
-
Apacheでのコンテントネゴシー...
-
cgiが動作しないのは?
-
メニューボタンをSSIで呼び出す...
-
お問い合わせフォームの設置に...
-
CGIのファイルの種類について
-
exec cgi ="aaa.cgi" を有効に...
-
CGIが読み書きするファイルで
-
PyCharmでのCGIを使ったWebサー...
-
フォームからCGIを起動できない
-
SSI で .cgi は引けますが・・
-
cgi-binにアクセスするとforbid...
-
cgiなんですが....
-
cgiのパスについて
-
VertrigoServでPerlが利用できない
-
SSIで,CGIを実行するときに引...
-
#!/usr/local/bin/perlの変更。
おすすめ情報