CGIのプログラムの途中でHTMLを返すことはできないのでしょうか?
[上に]
[前に]
[次に]
すずちゅー
[E-Mail]
1998/04/30(木) 19:33:39
CGI(UNIX,C言語)で、HTMLで「処理を受け付けました」
と表示するだけで、</HTML>の後にその処理をしてい
ると、「Internal Server Error」(タイムアウト?)というエ
ラーになってしまいます。
どうやらプログラムが終了するまで、クライアントにHTMLを返さないようなのですが、プログラムの途中で
HTMLを返すことはできないのでしょうか?
B-Cus
1998/04/30(木) 21:53:58
int main(){
printf("Content-type: text/html\n\n");
printf("<html><body>test ok.</body></html>\n");
fclose(stdout);
sleep(100);
}
とすると100秒待たされませんでした。あるいはforkして親プロセスは
すぐに終了し、子プロセスに後始末をお願いするとか。
飯塚
1998/04/30(木) 22:15:58
int main(){
printf("Content-type: text/html\n\n");
printf("<html><body>test ok.</body></html>\n");
fflush(stdout);
sleep(100);
fclose(stdout);
}
というのはどう?
B-Cus
1998/04/30(木) 22:50:13
> というのはどう?
これだとうちの環境(apache+{Linux,Solaris})では100秒待たされました。
飯塚
[E-Mail]
[HomePage]
1998/05/02(土) 02:04:30
>> というのはどう?
>これだとうちの環境(apache+{Linux,Solaris})では100秒待たされました。
ああっ。たしかに待たされてしまいます(apache以外+Solaris)。
この方法で僕は「リアルタイムにスクロールしながら処理をするCGI」
(http://www.broadway.or.jp/~siizuka/cgi-bin/wbpop.cgi)を
作ったことがあるのですが、書き出す量がある程度無くてはうまくスクロール
しないのかもしれませんね。
やはりB-Cusさんの方法が一番いいみたいです。
とほほ
1998/05/03(日) 00:27:25
画面への表示は fflush() でも行われることがありますが、文書の
終了は close() で判断されるようですね。で、終了前に、一定時間
以上書き込みが無いと、タイムアウトとなるようです。
すずちゅー
[E-Mail]
1998/05/06(水) 10:52:03
[[解決]]
B-Cusさん、飯塚さん、とほほさん、
貴重なご意見ありがとうございました。
私の問題は、
「fclose(stdout); 」
を入れることで解決いたしました。
これからも、よろしくお願いします。
[上に]
[前に]
[次に]