• ベストアンサー

C言語でCGI

はじめて、C言語でCGIをプログラムを作成します.サーバーはApacheです。 フォームから、ユーザー名とパスワードを入力してもらって、送信ボタンをクリックしたら,まず、サーバー内にある.テキストファイルの「アクセス拒否ユーザーリスト」のユーザー名と比較し,該当したらAというHTMLファイルを表示させ,該当しなかったら,BというHTMLファイルを表示させたいのですが,どのようにしたらよろしいでしょうか?また、ユーザー名とパスワードの他にホスト名の情報も欲しいのですが,どのように受け取ったらいいのでしょうか? ユーザー名、パスワード、ホスト名を格納する構造体を使用するほうがいいでしょうか?その際A,BのHTMLファイルにアクセスした時間とユーザー名,ホスト名をログファイルに記録したいのですが,やり方がまったく判りません. 勉強不足で申し訳ありませんが,どなたかご教授ください.

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

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

  • ベストアンサー
  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.1

>該当したらAというHTMLファイルを表示させ,該当しなかったら,BというHTMLファイルを表示させたい cgiの中で A または B を読み込みながら出力すればよいだけでは? <META HTTP-EQUIV="Refresh" CONTENT="0;URL=a or b"> という方法もあります。 SSIを使う方法もあります。 >ホ スト名の情報も欲しいのですが, 環境変数に格納されていますので、それを読み出してください。 >アクセスした時間とユーザー名,ホスト名をログファイルに記録したい 情報がそろっているのなら ファイルを追加モードでオープンして書き込めば良いだけですよ。ファイルの入出力に関して、CGIといって特殊なことはありません。普通に作れます。

参考URL:
http://tohoho.wakusei.ne.jp/wwwcgi.htm

その他の回答 (1)

  • zonbie
  • ベストアンサー率27% (3/11)
回答No.2

AというHTMLのURLを下記のようにロケーションヘッダに記述するだけで表示されると思います。 printf("Location: http://www.xxxx.com/A.html\n\n"); ホスト名は、標準関数「getenv("REMOTE_HOST")」で取得できると思います。 ログファイルへの記録は、ファイルを追加書込みモードでfopenしてfwriteもしくわfputsで、書込みできます。

関連するQ&A

  • CGIから別サーバーのCGIの呼び出し

    以下の二つのサーバーでCGIを動作させようと考えています。  サーバーA:ユーザーからアクセスできる。  サーバーB:サーバーAからアクセスでき、ユーザーからはアクセスできない。 この環境で (1)サーバーAでリクエストを受け、簡単な処理をする。 (2)サーバーA上のCGIからサーバーB上のCGIを呼び出す。 (3)サーバーB上で処理(etc. メールの送信)を行い、処理結果をサーバーAのCGIに返す。 (4)サーバーA上で簡単な処理を行い、結果をユーザーに表示する というような処理を考えています。 perlでは、このような処理を実装することは可能でしょうか? サーバーAからサーバーBにあるスクリプトファイルを読み込んで、サーバーAで実行するということはできそうなのですが、サーバーB上のCGIはサーバーBで実行するというようなことができるのかがわかりません。 初心者的な質問で申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • 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認証に拘りません。何か良い方法はありませんでしょうか。

  • C言語でCGI

    初めてC言語でCGIをやるわけではないのですが、わからないことがあるので質問させていただきます。 http://www2k.biglobe.ne.jp/~motoi/cdecgi.html このサイトを参考に話を進めさせていただきます。 まず、htmlで <HTML> <HEAD> <TITLE>テストページ</TITLE> </HEAD> <BODY BGCOLOR=#a0d0ff> <FORM METHOD="get" ACTION="test2.cgi"> <INPUT TYPE="text" NAME="fieldname" SIZE="50"><BR> <INPUT TYPE="text" NAME="fieldname2" SIZE="50"><BR> <INPUT TYPE="text" NAME="fieldname3" SIZE="50"><BR> <INPUT TYPE="submit" VALUE="書き込み"> </FORM> </BODY> </HTML> と書き、C言語で #include <stdio.h> #include <stdlib.h> #define getenv1(a) ((pdata=getenv(a)) ? pdata : "(NULL)") main() { int len; printf("Content-type: text/html\n\n"); printf("<HTML><HEAD></HEAD><BODY>\n"); printf("%s<BR>\n",getenv("QUERY_STRING")); printf("</BODY></HTML>\n"); } と書きます。 それからコンパイルを実行し、パーミッションも変更して実行を WEBサーバを作らずに実行するとファイルのダウンロードが始まります。(ファイル名はtest2.cgi) WEBサーバが無ければ文字をCGIに表示することは無理なのでしょうか? 教えてください。お願いします。

    • ベストアンサー
    • CGI
  • WindowsXpProでC言語でCGI

    自宅のXp Proをサーバーにして,Apache2.2やメールサーバを動作させています。昨日,Apacheでssiやcgiを実行可能にして,次のような簡単なプログラムをコンパイルして,hello.exeを作って,試してみました。 #include <stdio.h> #include <conio.h> int main() { printf("Hello"); /*getch();*/ } htmlファイルは, <!--#exec cgi="counter.exe" --> <!--#include file="count.dat" --> <!--#exec cgi="hello.exe" --> としています。実は,counter.exeは自作カウンターなのですが,標準出力が表示されず,しかたなく,#includeでカウンタファイルの値を表示させています。hello.exeも同様にファイルに書き出して,includeすれば大丈夫なのでしょうが,いろいろな資料やhpを見る限り,上記ソースのように標準出力でできるはずだと思うのです・・・。 Windowsをサーバにした場合は,標準出力は表示されないのでしょうか? どなたか,アドバイスいただけないでしょうか。

    • ベストアンサー
    • CGI
  • Fedora7でCGIが動きません

    CGIとPHPを使おうと思い、 Apacheで設定したんですけど CGIとPHP両方共に403 Forbiddenと表示されて You don't have permission to access /test.php on this server. ---------------------------------------------------------------- Apache/2.2.8 (Fedora) Server at 192.168.11.240 Port 80 この様に表示されてしまいます。 エキサイトで翻訳してみると あなたはこのサーバにアクセス/test.phpに許可を持っていません。 って書いて有るようですが如何すればアクセスした人全てに 許可をする事が出来るんですか?Apacheのhttpd.confの何処を修正 すれば宜しいのでしょうか?CGIの方はchmod 755 フォルダ名.cgi って打ち込んでパーミッションを変更しましたが駄目でした。

  • CGIを実行した時に作ったファイルの所有者に関して

    Proftpdとapacheを用いてWebサーバを運用していますがCGIやPHPによって作られたファイルの所有者がapacheになってしまいFTPからファイルが削除できません。 hoge.hoge.comはhogeでCGIを実行し aa.hoge.comはaaでCGIを実行することはできないのでしょうか? バーチャルホストでCGIを実行するときは何か別に記述が必要なのでしょうか? ちなみにFTPDは User   nobody Group   nobody apacheは User apache Group apache このように設定してあります。

  • CGIの設定で困っています

    FREEのスケジュール表を2つのサーバーに アップいたしました。 一つのサーバーは問題なく作動するのですが、 もう一つのサーバーはエラーが出てしまいます。 CGIファイルにブラウザでアクセスした際の 表示内容は、下記の通りです。 Forbidden You don't have permission to access /test/cgi-bin/history.cgi on this server. -------------------------------------------------- Apache/1.3.12 Server at www.ドメイン名.jp Port 80 です。 CGI、SSIともに使用はできるのですが、 どのように設定すればよろしいでしょうか。 どうか教えてください。よろしくお願いいたします。

    • 締切済み
    • CGI
  • CGIへのアクセスが集中した場合にアクセスを一時的に制限したり、エラーメッセージを表示したり、予備のCGIに飛ばす方法。

    CGIへのアクセスが集中した場合に、メッセージを表示し、アクセスを制限するサイトなどを目にしますが、どのようにして実現しているのでしょうか。例えば、flockなどの排他処理によって、一定時間内は1ユーザーからのアクセスしか受け付けないといった処理は可能かと思いますが、3ユーザーまでのアクセスのみ受け付けるといった方法はあるのでしょうか。 また、サーバダウンなどにより、CGIが動作しない場合に、エラーメッセージを表示したり、予備のCGIに飛ばす方法はありますでしょうか。 例えば、Aサーバのmain.cgiを動作させたい場合に、まずBサーバのpre.cgiにとばし、Bサーバのpre.cgiからAサーバのmain.cgiへのアクセスを試み、Aサーバがダウンしている為にアクセスに失敗した場合に、Bサーバ内のerroor.htmやsub.cgiに飛ばすことなどはできるのでしょうか。 できれば、CGI(perl)で実現したいのですが、有効な方法がございましたら、恐れ入りますが、教えていただけないでしょうか。もしも可能でしたら、簡単なサンプルのスクリプト等を添えていただけると大変助かります。何卒よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • apache・cgiの設定?

    phpの勉強をしようと思い、apacheとphpをインストールしまいした。 ついでに、cgiの設定も試みてみました。 それで、掲示板を設置してアクセスしてみたのですが、開いた掲示板に表示されるgifアイコンが表示されません。(gifアイコンは、掲示板下の/imagae/に格納されています。) apache等の設定が悪いのでしょうか?また、cgiを設置したcgi-binフォルダー以下を表示すると、 Forbidden You don't have permission to access /cgi-bin/ on this server. と表示されます。 どなたか、ご指導お願い致します。

    • 締切済み
    • CGI
  • サーバ共有フォルダ接続時のパスワードの保存を消去したい

    どなたかご存知でしたらお教え願います。 社内のファイルサーバ(WindowsNT4.0Serverで、ワークグループ管理です)の共有フォルダに、A(アクセス許可のユーザー名= a )とB(アクセス許可のユーザー名= b )があります。 WindowsXPpro SP1クライアントPC(ユーザー名= K )から、ファイルサーバ自体にアクセスしたところ、ユーザー名とパスワードを聞かれました。 ここで、aのユーザー名とパスワードを入力し、「パスワードを記憶する」のチェックボタンにチェックを入れて保存して接続しました。サーバ内の共有フォルダが表示され、その中のAフォルダをクリックするとフォルダ内のファイルが表示されました。 これ以降は、特に問題なく共有フォルダAを使用することができますが、Bの共有フォルダにアクセス使用とすると、ユーザ名とパスワードを入力する画面は表示されず、アクセス権がないと拒否されてしまいます。 おそらく、最初にファイルサーバにアクセスした時点で、aのユーザー名とパスワードがクライアントPCに保存してしまったからだと思います。ここで、お尋ねしたいのは、クライアントPCに保存されたファイルサーバ用のユーザー名とパスワードを消去したいのですが、その方法をご存知ありませんか。レジストリ内に保存されているかもと思いますが、見当がつきません。念のためIEのプロバティからオートコンプリート→パスワードのクリアを行いましたが、変わりませんでした。 ちなみに、サーバ側のアクセス権ユーザーの追加変更等は管理上したくないのです。