Entries

C言語でCGIする

とりあえず、PHPでは2Gの壁とメモリの壁が越えられないです。
ローテートするログも3Gをになってしまったので、とりあえず
Cで書き直し。
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64
この呪文を書いておけば、動きますよ。

で、問題はダウンロードのためのCGI。
はまり点その1:エラーの返し方
 メインプロセスなら、自分でHTTPヘッダーを作ればいいんでしょうが、
 CGIだと、どうしてもcontent-typeがないとserver errorになってしまいます。
 解決策はprintf("Status: 404 Not Found\n\n");
必要なら、この後に404のページを書いて、exit(error_code)すればいいです。

はまり点その2:ファイル名
 MSの仕様で、以下のファイルタイプが必要です。
printf( "Content-type: application/octetstream;\n");
//printf( "Accept-Ranges: bytes\n");
printf( "Content-Length: %u\n",length);
printf( "Content-Disposition: inline; filename=%s\n\n",filename);
以下本体を出力

はまり点その3:レンジ
 getenv("HTTP_RANGE")でレンジは取れますが、
 うまくいかないー。まだHTTPヘッダが足りないんだな。
 上のAccept-Rangeを出せば、一応レンジモードには突入しますが、計算が合わない。
 apacheと比較する日々が続きそうです…

0件のコメント

コメントの投稿

新規
投稿した内容は管理者にだけ閲覧出来ます

0件のトラックバック

トラックバックURL
http://pochi2pochi.blog40.fc2.com/tb.php/38-033ad661
この記事に対してトラックバックを送信する(FC2ブログユーザー)