/*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/~を隠す方法
-
EXCELファイルに誰がアクセスし...
-
MP Form Mail CGI で 500サーバ...
-
WEBデザイナーの方にお聞きした...
-
《エクセルVBA》「他の人が該当...
-
AS/400 QUERYの集計結果について
-
VBAでサーバーにアクセスするに...
-
ラジオボタンのグループ化
-
CGIって何ですか?簡潔に教えて...
-
CGIでソースがそのままでてしま...
-
特定のCGIだけ、作動するかわり...
-
VBScriptで、ファイルから任意...
-
ログアウト処理でWebブラウザを...
-
tableのthに斜めの線をCSSで入...
-
perlからphpを実行して結果を得...
-
SNSプログラムを探しています。
-
HTTP 501未実装 エラーについて
-
掲示板のアイコン設定の仕方教...
-
パーミッションが変更できません。
-
ユーザの所属するグループを取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLに~/cgi-bin/~を隠す方法
-
cgiが動作しないのは?
-
apache で /cgi-bin/にアクセス...
-
CGIが動作しません。
-
PyCharmでのCGIを使ったWebサー...
-
相対パスか絶対パス??
-
http://www.test.cgi/index な...
-
下記の文章を翻訳願います
-
cgi-bin内に.htaccess
-
SSIで,CGIを実行するときに引...
-
cgiでのアクセスカウンターの表...
-
カウンターが表示されません;;
-
cgiのsystem関数を用い、ファイ...
-
FC2にwebPatio設置の方法
-
cgiなんですが....
-
pythonのCGIでページを遷移したい
-
cgi-binにアクセスするとforbid...
-
ロリポップサーバでのWeb拍手cg...
-
ショッピングカートのセキュリティ
-
ホームページビルダーで作成し...
おすすめ情報