PDA

View Full Version : C言語のCGIが動きません


sho33
2001/11/11, 08:13 PM
C言語のCGIが動きません。

ソースはLINUXにてコンパイルしました。
LINUXにて動作確認を行いました。
完成した実行ファイルはバイナリーモードで転送しました。
パーミッションは700に変更しました。

Internal Server Error. となります。

何が考えられますでしょうか?

ちなみにソースの内容は下記の通りです。
------------------------------------------

#include <stdio.h>

main()
{
printf("Content-type: text/html\n\n");
printf("OK!");
return 0;
}

mockie
2001/12/01, 07:36 PM
初めまして、先日こちらに登録させて頂きました。
CでCGIを書いてみたんですが私も内部サーバーエラーが出ます。
内容はMIMEヘッダと広告のタグを出力する単純なプログラムです。
パーミッションの設定はsho33さんと同じで700です。以前使っていた
サーバでは自作CGIを711で置いて動作させていたので、これで
正しいのかどうか少々不安です。
プログラム自体に間違いはないのでパーミッションが間違ってるのかも
知れません、どなたかご教授願えませんでしょうか?

私の使用環境は Win2k、bcc32 です。

cucu81
2001/12/02, 02:33 AM
いちおうやってみましたが、うまく動いているようですが…

軽く以下のソースをタメしてみました。


#include <stdio.h>
#include <stdlib.h>
// (C) Kokucho81 by CuCu81.jp

char gif3[] = {
0x47,0x49,0x46, // 固定値 Ascii "GIF"
0x38,0x39,0x61, // 固定値 Ascii "89a"
0x0C,0x00, // 画像の幅
0x12,0x00, // 画像の高さ
0xB3, // 1 011 0 011
/*
1 Global Color Table
の有無 1:有り 0:なし
011 Color Resolution
この(値+1)が画像1ドットを表すのに必要なビット数
0 Global Color Table
がソートされているかどうか 1:いる 0:いない
011 Size of Global Color Table
(この値+1)=nとして、2のn乗がGlobal Color Tableの数
*/
0x00, // 背景色のインデックス
0x00, // ピクセルの縦横比。
// この値(1-255)をnとし、(n+15)/64 が実際の比率。
//情報がない場合は、0

// 以下はGlobal Color Tableが1の場合に存在する。
// 1つの色情報につきRGBの3バイトずつ、色情報がSize Of Global Color Table個ならぶ
0x8A,0xB4,0xB4,0xAB,0xD2,0xD2,0xFA,0xFB,0xFB,
0x4C,0x64,0x64,0x99,0xCC,0xCC,0x75,0x9B,0x9B,
0xC4,0xD8,0xD8,0x65,0x84,0x84,0x90,0xC0,0xC0,
0xD9,0xE6,0xE6,0x97,0xC8,0xC8,0x7F,0xA9,0xA9,
0xE7,0xEF,0xEF,0x70,0x93,0x93,0x73,0x85,0x85,
0xAB,0xBB,0xBB,

0x21, // Extention Introducer 固定値 拡張ブロックであることを示す
0xF9, // Graphic Control Extention 固定値 であることを示す。
0x04, // ブロックサイズ 固定値
0x00, // 0000000 0 最後の1ビットは透過処理を行うかどうか、行う:1 行わない:0
0x00,0x00, // 表示する時の遅延時間 0は遅延なし
0x00, // 透過処理する色のインデックス。
0x00, // ブロックの終了

0x2C, // Image Block 固定値
0x00,0x00, // 画像全体に対するイメージブロックの左端相対位置
0x00,0x00, // 画像全体に対するイメージブロックの上端相対位置
0x0C,0x00, // イメージブロックの横幅 0x1234の場合は0x34 0x12となる
0x12,0x00, // イメージブロックの縦幅 0x1234の場合は0x34 0x12となる
0x00, // 0 0 0 00 000
/*
0 Local Color Tableが存在する場合は1、存在しない場合は0
0 インタレースする場合は1、しない場合は0
0 Local Color Tableがソートされている場合は1、ソートされていない場合は0
00 未使用
000 Size of Local Color Table=n の 2の(n+1)乗
*/
// 1つの色情報につきRGBの3バイトずつ、色情報がSize Of Global Color Table個ならぶ
0x04,0x61,0x90,0xC8,0x49,0xAB,0xAD,0x21,0xB1,
0x14,0x90,0xA2,0x81,0x20,0x8A,0x00,0xF0,0x49,
0xDC,0xF2,0x88,0x4F,0x81,0x50,0x40,0xD1,0x88,
0xCE,0x61,0x4A,0x4A,0xA9,0x08,0xC6,0x60,0x9F,
0x12,0x83,0x88,0x51,0x03,0x54,0x0C,0x0C,0x51,
0xE2,0x47,0xC9,

0x25, // LZWコードの最小ビット数
0x44, // 次に続くイメージデータのバイト数を表す値。

// 以下イメージデータ 上のバイト数 LZWアルゴリズムにより圧縮されている
0x87,0x05,0x90,0xA0,0x40,0x2C,0x44,0x83,
0xC6,0x8B,0x10,0x08,0x28,0xAA,0xBC,0xEC,
0x2B,0xC4,0xE8,0x08,0x1B,0x03,0x17,0x4A,
0x69,0x00,0x1C,0xA2,0x27,0x44,0xE1,0xDD,
0x68,0x14,0x16,0x5B,0x82,0x55,0x76,0x07,
0xE4,0x71,0x08,0x81,0x1E,0x17,0x84,0x04,
0x11,

0x00, // ブロックの並びの終わりを表す 固定値

0x3B // GIFファイルの終わりを表す 固定値
};

int main(void)
{
printf("Content-Type: image/gif\n\n");
fwrite(gif3, sizeof(gif3), 1, stdout);
return 0;
}



今回は、コンパイル場所は、(1)トクトクと(2)自分の有料の鯖を
タメしてみましたが、XREAがRedhat7.1でこれらもRedhatなので
うまく動きます。

パーミッション何でも良いと思いますが、100にしてあります。

http://cucu81.s2.xrea.com/x/a.cgi
です。

mockie
2001/12/02, 05:22 PM
cucu81様、早速のご返答感謝します!

おっしゃる通りRedhat上でコンパイルしないと駄目そうですねー。
とりあえずもう一度、今度は

・自分のWin2k上でbcc32
・友人のFreeBSD上でgcc

の二通りで試してコンパイルしたものを上げ直してみたんですが、
結果はやはり同じで内部サーバーエラーでした。
パーミッションは適切、という事は・・やっぱりどこかでRedhatの
環境を探してtelnetとかしなきゃ駄目なんだろうなぁ・・。

tok2が同じ環境であるという事、いい情報になりました!
うまく動作した際はまた報告に来ますね。ありがとうございました!!

cucu81
2001/12/02, 06:50 PM
mockie さん、

それは、WindowsやFreeBSDでコンパイルしたものは、
Redhatでは動かないですよ。

(PS2用に制作されたゲームを
 パソコンに入れても動かないことと
 寸分違わず全く同じことでごじゃます。
 まぁ、がんばりゃうごくというはなしもある)

Redhat上でプログラムを動かすためには、
基本的ににはRedhatが必要で、
最低でも互換性の高いディストリビューション(ファミリー)
(例えば、TurboLinuxとWineLinuxの2つ
のディストリビューション(ファミリー)は
Redhatが基幹になっているので、
バイナリのレベルで互換性が高いです。
なお、WineLinuxはWindowsとRedhatの両方を
サポートするそうです。

でコンパイルしないと動く可能性がないです。

同じLinuxでも、DebianLinuxなどでは、
Redhatとバイナリ互換性はありませんし、
FreeBSDとRedhatでは、確かにUNIXという北斗神拳を継承
しているのですが、ケンシロウとトキとでは、拳法に互換性が
ないのです。
というわけで、トクトクでコンパイルして持ってくれば、動く(イイ!)ので、
トクトクさんには、可愛そうですが、コンパイルさせてもらいましょう。
(トクトクさんってこういう使われ方になってゆくのかな…)

mockie
2001/12/02, 08:53 PM
またまた返答ありがとうございます>cucu81様

バイナリ互換・・考えてませんでした(笑)
確かにトキは夢想転生など使えませんね!
どこでも北斗神拳そのものは一緒だ!とかいうアホミスをやらかしてました。

という事で、t○k2 (伏せ字になってない・・) 様の手を借りてコンパイル
してみる事にします。たぶん大丈夫でしょう (^-^)
ためになるお話、どうもありがとうございました!また動作報告しに来ます。

mockie
2001/12/02, 09:28 PM
何事も無かったかのように動作しました!
某サーバーには悪いですが・・ f(^_^;

やっとこれから安心してプログラム書けます、
ご教授ありがとうございました m(_ _)m > cucu81様

mstk
2001/12/09, 10:59 AM
Originally posted by cucu81

FreeBSDとRedhatでは、確かにUNIXという北斗神拳を継承
しているのですが、ケンシロウとトキとでは、拳法に互換性が
ないのです。



RedHatでコンパイルしたものは、FreeBSDだと動いてしまうのでした。