勝手にBLOG
俺のための覚え書きっす。 mixiは勝手に使われるそうなのでw
Entries
C言語でCGIする
- ジャンル : コンピュータ
- スレッドテーマ : UNIX/Linux
とりあえず、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と比較する日々が続きそうです…
ローテートするログも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ブログユーザー)




