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

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>該当したら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
    • good
    • 0

AというHTMLのURLを下記のようにロケーションヘッダに記述するだけで表示されると思います。



printf("Location: http://www.xxxx.com/A.html\n\n");

ホスト名は、標準関数「getenv("REMOTE_HOST")」で取得できると思います。
ログファイルへの記録は、ファイルを追加書込みモードでfopenしてfwriteもしくわfputsで、書込みできます。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC言語のソースコードの書き方

C言語のソースコードの書き方に関する質問です。
0を5個と1を4個の、合わせて9個の数字を並べて出来上がる数列のパターン(126通り)を全て羅列させるプログラムを作りたいと考えていますが、そのためにどういった方針を立ててソースコードを書けばよいかが分かりません。
どういった構造かだけでも構いませんので、教えて頂けると幸いです。
よろしくお願いします。

Aベストアンサー

という方針で書くとこんな感じね。
#include <stdio.h>

void
print_pattern(char pattern[], int size)
{
for (int i = 0; i < size; i++) {
printf("%c", pattern[i]);
}
printf("\n");
}

void
iter(char pattern[], int end, int n, int m)
{
if (n == 0 && m == 0) {
print_pattern(pattern, end);
return;
}

if (n == 0) {
pattern[end] = 'b';
iter(pattern, end + 1, n, m - 1);
return;
}
if (m == 0) {
pattern[end] = 'a';
iter(pattern, end + 1, n - 1, m);
return;
}

pattern[end] = 'b';
iter(pattern, end + 1, n, m - 1);
pattern[end] = 'a';
iter(pattern, end + 1, n - 1, m);
}

int
main(void)
{
int m = 5, n = 4;
char pattern[m + n];
iter(pattern, 0, m, n);
return 0;
}

という方針で書くとこんな感じね。
#include <stdio.h>

void
print_pattern(char pattern[], int size)
{
for (int i = 0; i < size; i++) {
printf("%c", pattern[i]);
}
printf("\n");
}

void
iter(char pattern[], int end, int n, int m)
{
if (n == 0 && m == 0) {
print_pattern(pattern, end);
return;
}

if (n == 0) {
pattern[end] = 'b';
iter(pattern, end + 1,...続きを読む

Q現在、html,cgi(perl),javascriptを主に使用して

現在、html,cgi(perl),javascriptを主に使用して、ホームページを作成しています。
作成中いくつか自分だけでは作成につまってしまった部分を質問させていただきます。

まず1つが、通常のhtmlやcgiでIE上に表示させているホームページのそのページを、
ページ上のボタンをクリックすることでwordやexcelに保存するということは可能なのでしょうか?

次に2つ目として、フォームから送信し、textファイル内に日付を付けて保存してあるデータから、
特定の日付のデータを抽出して別ページに表示することは可能でしょうか?

どちらか1つだけでもよろしいので、回答お願いします。

Aベストアンサー

前者はサーバサイドでwordなりexcelなりを生成して送り返してるやりかただね。
(pdf作成サイトとかと仕掛けは一緒)
これはwordやexcelの書類形式が(バイナリ的に)どうなってるか知らないとできない。(最近のはxml形式みたいだからどうにかなる気がする)
後者は、textがユーザローカルの場合無理。formのfileでサーバ側に一度uploadしてもらいサーバサイドで処理して埋め込むなりクッキーにするなり。(通常は埋め込む)
textというのがサーバ側のならjavascriptかクッキーで橋渡しが楽だと思う。

QC言語のソースコードについて教えてください。

以下のソースコードを学習用C言語開発環境で行ったのですが、
『ファイル「C:/Users/ユーザー名/AppData/Local/EasyIDEC/project/タイトル/main.c」の
「41行目」で記述エラーを発見しました。
「,」を付け忘れています。』

という、コンパイルエラーが表示されました。
何度も見直したのですが、よくわかりません。

#include <stdio.h>

int main(int argc, char *argv[])
{
char answer ;
answer = 'n' ;

while(answer =='n')
{
int input ;
input = 0 ;
int add ;
add = 1 ;
int sum ;
sum = 0 ;

printf("数値を入力して下さい。:") ;
scanf("%d", &input ) ;

int i ;
i = 0 ;

while(i < input)
{
sum =sum + add ;
printf("\n%d",sum) ;
i++ ;
add++ ;
}

printf("\n1から%dまでの総和は、%dです。" , input , sum) ;

while(1)
{

printf("\n終了しますか? y/n:") ;
scanf(" %c , &answer) ;

if( (answer != 'y') && (answer != 'n') )
{
printf( "y or nを入れてください。") ;
}
else
{
break ;
}
}
}
return 0 ;
}

以下のソースコードを学習用C言語開発環境で行ったのですが、
『ファイル「C:/Users/ユーザー名/AppData/Local/EasyIDEC/project/タイトル/main.c」の
「41行目」で記述エラーを発見しました。
「,」を付け忘れています。』

という、コンパイルエラーが表示されました。
何度も見直したのですが、よくわかりません。

#include <stdio.h>

int main(int argc, char *argv[])
{
char answer ;
answer = 'n' ;

while(answer =='n')
{
int input ;
input = 0 ;
int add ;
add = 1 ;
int sum ;
sum = 0 ;

printf("...続きを読む

Aベストアンサー

>>おかげで、エラー表記されずに、プログラムが実行されました。

これはコンパイルがうまく完了したってことでしょうか?できあがったプログラムが実行できたってことではないですよね?そうなら

>>’タイトル’は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」

なんて問題は起きないはすですからね。

できあがったファイルは、XXXX.EXEのように拡張子のEXEがついていますか?もしXXXX.OBJであれば、リンクができていませんから、実行できません。

学習用C言語開発環境の使い方を確認してみてください。

P.S.
昔は、コンパイラを使うのは大変でしたが、今は楽ですね。CではなくPascal系コンパイラーですが、カセットテープに入っていて、コンパイラの読込にテープレコーダで15分かかったりとか、まあ大変だけど面白い時代でした。

Qさくらのサーバーでwww配下のcgiを使用し、サーバールートのファイル

さくらのサーバーでwww配下のcgiを使用し、サーバールートのファイルを表示

ルートディレクトリ(wwwフォルダと同じ階層)にテキストファイルを設置し、
www配下に設置したcgiをブラウジングした際に、テキストファイルの内容を表示する仕組みを作ろうとしています。

別のサーバーでは動いているようですが、
なぜかさくらでは変数の値が表示されません。(<hr>は表示されています)

ちなみにcgiのファイルとフォルダのパーミッションは755に設定しています。

わかる方いらっしゃいますでしょうか?
よろしくお願いします。


cgiのソースは下記になります。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
#! /usr/bin/perl

open (FILE, "</home/txt1.txt");
$lst = <FILE>;
close(FILE);

open (FILE, "</home/txt2.csv");
$dat = <FILE>;
close(FILE);

print <<END;
Content-Type: text/html; charset=Shift_JIS

<html>
<head>
<title>testcgi</title>
</head>
<body>
$lst
<hr>
$dat
</body>
</html>
END
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

さくらのサーバーでwww配下のcgiを使用し、サーバールートのファイルを表示

ルートディレクトリ(wwwフォルダと同じ階層)にテキストファイルを設置し、
www配下に設置したcgiをブラウジングした際に、テキストファイルの内容を表示する仕組みを作ろうとしています。

別のサーバーでは動いているようですが、
なぜかさくらでは変数の値が表示されません。(<hr>は表示されています)

ちなみにcgiのファイルとフォルダのパーミッションは755に設定しています。

わかる方いらっしゃいますでしょうか?
よろしくお願...続きを読む

Aベストアンサー

>恐れ入りますが、openの成功・失敗の記述方法を教えて頂けないでしょうか?
open(FILE,"filename") || die "I can't open this file";
die 演算子は perl の初歩の初歩。

>パスはあっていました。
No.2さんの言う通りだと思うんですが、もう面倒くせぇから相対パスで指定すれば良いんじゃね?

QC言語ソースコードに関する質問です。

以下の数列について,初項から第15項までを求めるプログラムと実行結果を示せ。
0 1 1 2 3 5 8 13 21(ただし,初項=0,第1項=1とする。)

ソースコードを書くと、エラーがでた。
#include <stdio.h>
int fib(int n)
{
if(n==1 || n==2)
return 1;
else
return fib(n-1)+fib(n-2);
}
int main(void)
{
int n;
for(n=0;n<17;n++)
printf("%d,",fib(n));
}

正しソースコードを教えてください!

よろしくお願いします。

Aベストアンサー

#include <stdio.h>

void fib(int i, int j, int n)
{
if (n == 1)
{
printf("%d\n", i);
}
else
{
printf("%d\n", i);
return fib(j, i + j, n - 1);
}
}

int main(void)
{
fib(0, 1, 15);

return 0;
}

Qcgiファイルのhtmlファイルへの組み込みについて

htmlファイルの中にcgiファイルの実行内容を組み込むことはできるでしょうか?できるとすればhtmlファイルにcgiファイルをどのように記載したらよいのか教えて下さい。

<例>
◎http://www.test.cgi(cgiファイル)

print<<"EOT";
cgiで作ったファイル<br>
htmlに組み込む
EOT

◎http://www.test.html(htmlファイル)
<html>
<body>
ここにcgiファイルの実行内容を表示させる
</body>
</html>

Aベストアンサー

一番簡単なのは、<iframe>でCGIをそのまま呼び出す。
他には、SSIが利用可能な環境であるならば、SSIで可能です。
ただし、.htaccessが弄れないサーバの場合、SSIが利用できたとしても、*.shtmlというファイル名でないとダメな場合があります。

http://tohoho.wakusei.ne.jp/wwwssi.htm

Qc言語のソースコードを教えて下さい

キーボードから10個の正整数値を読み込み,合計値を表示するプログラムを作りなさい。
ただし,キーボードから読み込んだ値はint型変数xにしまわれるものとし,変数はこのxと回数を数えるint型変数countと合計値をしまうint型変数sumのみを用いることとする。

このプログラムのソースコードを教えて下さい。
解説もよろしくお願いします。

Aベストアンサー

一例です。
添付のURLを参照して下さい。
因みに、平均値も算出しているが気にせずに、後はご自身で変数、コードを要調整して下さい。

参考URL:http://www.geocities.jp/kenji_y0328/crenshu/renshu/r021.gif

Qcgiファイルを他のhtmlファイルと一緒にしないほうがいい理由があれば教えて下さい

私は会社でホームページ製作を担当していますがシステムに関しては素人なため、
フォームや検索などのCGIを外部の人に頼みました。
当社が使っているプロバイダーではcgiファイルをおくフォルダを指定しているのですが、
その人はcgiファイルをそこに入れずにhtmlファイルと同じフォルダ(index.htmlのあるフォルダ)に入れている作っているという状況です。
作っている方はプログラマーではなく、cgiもできるデザイナーです。

私が、cgiファイルをおくフォルダを変えなくていいのかと質問したところ、
動作はしているし、この方が作業がやりやすいと回答をもらいました。
が、このまま通常のhtmlファイルと同じ階層にcgiファイルをおいていいのか、また、このままで問題がおこらないのかを不安に思っています。
本当にcgiファイルを他のhtmlファイルと一緒にしていても問題ないのでしょうか?
一緒にしないほうがいい理由があれば、お教えいただければと思い質問させていただきました。
回答宜しくお願いします。

Aベストアンサー

特に問題はありません。
ファイル管理の面からフォルダを分けることがあります。
通常はHTMLと同じでも大丈夫です。
ただし、LOGファイルなども同じところに置く場合は、LOGファイルが直接読み込まれてしまう可能性があるので、その辺は注意が必要です。

Qソースコードの間違い (C言語)

変数に、文字列を入れた配列の文字列の最後の要素数を入れたいのですが(つまり'\0')、うまくいきません。いつも2個多い値になってしまいます。

#include <stdio.h>

void main() {
char moji[100]={0};
int c=0;

fgets(moji,sizeof moji,stdin);

while( moji[c] != '\0' ) ++c;

printf("\n%d\n",c); //
}

例えば5文字の1ビット文字を入れると、最後の文字はmoji[4]にあるのでprintfで4と表示されるはずじゃないですか。でも6になるんです。いつも+2の値になるんですよ。どうやらfgetsを使っているからそうなるらしく、scanfを使うと結果は1多い値に、普通に配列に直接文字列を代入すると正常な結果になります。別にcに-2してもいいのですが、それはなんだか癪といいますか・・・。なぜこういうことがおきるのでしょうか?回答よろしくお願いします。

Aベストアンサー

>なぜこういうことがおきるのでしょうか
そのmoji[]の余計な部分にはどんなコードが入っているかは確認していますか?
リターンキーも「キー入力」の一つですよ。

Qアクセスログでホスト名を

$ENV{"REMOTE_HOST"}
で表示させてもIPアドレスがほとんどです
訪問者のドメインネームが出やすくするにはどのような環境変数を使えばいいでしょうか?

Aベストアンサー

お使いのサーバー設定で、ホスト名は返さないようになっていたりしませんか?
その場合は、IPアドレスしかとれません。
プロバイダーサーバーやフリーサーバーでは、ホスト名を取得できないことも多いかと思います。


人気Q&Aランキング