• ベストアンサー

他のページを見ましたが「Premature end of script headers」について

C++でCGIを記述しています。 「Premature end of script headers」がでてとれません。 サーバーにログインして、その環境でコンパイルを実施しています。 他のWebページも参照しましたが、「転送のモードが云々」とか、perlのパスが云々とか記述されていますが、関係ないと思っています。 ソースは ------ここから #include <stdio.h> main() { printf("Content-type: text/html\n\n"); printf("test"); } -----ここまで です。 text/htmlの後の改行を増やしたりtestの後に改行をつけたりtype:の後のスペースを取ったりいろいろしましたが、状況は変わりません。 何をどうすればよいのでしょうか。 なお、OSはFreeBSD 4です。

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

  • ベストアンサー
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

Debian Linuxの環境で追試しましたが、問題なく表示されています。 gcc test.c -o test.cgi とコンパイルしたものをWeb pageに置きアクセスしました。 コードの問題があるのではなく、CGIが実行できない環境になっていて、test.cgiが実行されずにバイナリとして表示されようとして「Premature end of script headers」といわれているのではないでしょうか? perlで書いた、 #! /usr/bin/perl #↑これは環境に合わせてください print "Content-type:text/html\n\n"; print "test"; は、実行できますか?やはり「Premature end of script headers」を吐くのではないでしょうか?

jotahachi
質問者

お礼

ありがとうございました。 No.1さんへの補足の処置で動きました。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

手元の環境で質問文のCプログラムを試してみましたがとくに問題ありませんでした。 お使いの環境の問題と思われますので、ScriptLogをとってみるとか、CGIプログラムのstdoutやstderrを別途ファイルに保存するラッパーをかましてみるとか試してみては。 それと、/var/log/messagesに何か出てないかとか、core dumpが残ってないかとかCGI以外のところについて調査してみては。

jotahachi
質問者

補足

お騒がせしました。 ディレクトリのパーミッションが間違っていた様です。 755に設定したら動くようになりました。

関連するQ&A

  • CGI

    javaで書いたプログラムをCGIで使いたいのですが。 Cの場合、CGIで使うために、 #include <stdio.h> main(){ printf("Content-type: text/plain\n\n"); printf("Hello C world!\n"); } というように、「Content-type: text/plain」と加えてッ改行を2回しています。 この、「~.c」のファイルを、コンパイル&実行するとき、[~.cgi」というファイル名に出力するように、 javaのプログラム class HelloWorld{ static public void main(String args[]){ System.out.println("Hello World!"); } } には何を加えて、コンパイルの際、どうすれば、「~.cgi」になるのか教えてください。 コンパイらーはj2sdkです。

    • ベストアンサー
    • Java
  • 1つのhtmlページにたくさんのCGIを表示したい

    1つのhtmlページにたくさんのCGIを表示したいのですができますか? "Content-type: text1/html\n\n" /* ** CGI版のhello.c(HTML仕様) */ #include <stdio.h> main(){ printf("Content-type:1/html\n\n"); /* ここから HTML でお馴染みのタグ */ <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> /* あいうえお */ "Hello C World!<BR>\n" "</BODY>" "</HTML>" } みたいなCGIを入れたいのですが。

    • 締切済み
    • CGI
  • C言語プログラミングについて

    #include <stdio.h> int main(void) { printf("hello,world\n"); } □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ #include <stdio.h> int main(void) { printf("hello"); printf(",world"); printf("\n"); } 上の2つのプログラムをコンパイルするとどのような違いが生じるんですか??printfってどんな働きをするんですか?

  • borlandについて

    こんばんは Borland C++ Compiler 5.5 を使っているのですが… _______________ |#include <stdio.h>      |←のようなプログラムをコンパイル |               | したら |int main(void) |1:インクルードファイル'stdio.h'を |{              | オープン出来ない | printf("Hello.\n");   |5:プロントタイプ宣言のない関数 | return 0;        | 'printf'の呼び出し(関数mein) |}              |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ と出てきますどうしたらよいでしょうか。

  • C言語について

    #include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?

  • CGIでPOSTで送受信するプログラムの作り方

    こんにちは、C言語でCGIを作成していて疑問に思ったのですが、 POSTメソッドで送られてきたデータを解析する際には、POSTで送信するプログラムと、 POSTを受信するプログラムとに必ず分けてある様に感じられました。 これらを1つにまとめて送受信する事は出来ないのでしょうか? 例えば、以下の様なプログラムを組んだとします。 /* form.c */ #include <stdio.h> int main(void) { printf("Content-type: text/html\n\n"); printf("<html>\n"); printf("<head>\n"); printf("<title>form test page</title>\n"); printf("</head>\n"); printf("<body>\n"); printf("<form method=\"post\" action=\"form2.cgi\">\n"); printf("<input type=\"text\" name=\"fieldname\" size=\"40\"><br>\n"); printf("<input type=\"text\" name=\"fieldname2\" size=\"40\"><br>\n"); printf("<input type=\"text\" name=\"fieldname3\" size=\"50\"><br>\n"); printf("<input type=\"submit\" value=\"書き込み\">\n"); printf("</form>\n"); printf("</body>\n"); printf("</html>\n"); } /*以下、受信プログラム*/ /* form2.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int len; char *clen; char *data; clen = getenv("CONTENT_LENGTH"); if(clen == NULL){ printf("no contents.\n"); exit(1); } len = atol(clen); data = malloc(len+1); scanf("%s",data); data[len] = '\0'; printf("Content-type: text/html\n\n"); printf("<html><head></head><body>\n"); printf("%s<br>\n", data); printf("</body></html>\n"); } 上記2つのプログラムを1つに統合して、 送受信を1つのプログラムで行うという事は出来ないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • Cプログラミング 初歩

    #include <stdio.h> int main (void){ double num; printf("実数を入力して下さい:"); scanf("%lf",&num); printf("あなたは%fと入力しましたね\n",num); return(0); } のプログラミングがコンパイル出来ません↓ printf("あなたは%fと入力しましたね\n",num); をprintf("%f\n",num);のようにすると上手くいくのですが、 どうしたらコンパイルできるか分かる人はいますか?

  • メールの先頭の改行

    mail()でメールを送信したメールを受けるとメールの本文の先頭に改行が入っているんですが、この改行を無くす方法はないでしょうか? その先頭の改行というのは必ず入るわけではなく、 http://ns103.net/ob/php-doc-j/function.mail.html の最初のソースのように単純なものなら改行は入りません。 Content-typeを指定したりすると改行が入ってしまいます。 改行が入る場合のソースを以下に書きます。 $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=\"iso-2022-jp\"\r\n"; $headers .= "From: Birthday Reminder <aaa@bbb.com>\r\n"; $headers .= "Cc: aaa@bbb.com\r\n"; $headers .= "Bcc: aaa@bbb.com\r\n"; $msg = "abc\ndef"; mail($mailad, 'subj', $msg, $headers); これをOEで受信すると、abcの前に改行が入っています。

    • ベストアンサー
    • PHP
  • C言語プログラミングの文字列を出力するプログラムについて

    ちょっとお聞きしたいのですが、 #include<stdio.h> void main(void) { printf("Hello World\n"); } と書いてコンパイルしたら インクルードファイル ’stdio.h’をオープンできない って出て Hello Worldってでない、、、 ちゃんとBorlandもダウンロードしたしcd設定もしたんだけど、 何が悪いのかわかりません。

  • 実行結果をコマンドライン引数として渡す方法について

    test1.cはコマンドラインから引数をとり処理するプログラム test2.cは「Hello!」と出力するプログラム。 これらのプログラムをコンパイルして、次のような引数の渡し方をしてHello!と表示したいのですがうまくいきません。 実際の結果 ----------------------------------------- $ ./test1.exe ./test2.exe ($はプロンプト) $ ./test2.exe $ ----------------------------------------- 期待する結果 ----------------------------------------- $ ./test1.exe ./test2.exe $ Hello! $ ----------------------------------------- ここでプログラムの仕様を示しておきます。 プログラム1(test1.c)の中身 -------------------------------------- #include <stdio.h> main(int argc, char *argv[]){ printf("%s\n", argv[1]); } -------------------------------------- プログラム2(test2.c)の中身 -------------------------------------- #include <stdio.h> main(){printf("Hello!\n");} -------------------------------------- よろしくお願いします!