勝手にBLOG
俺のための覚え書きっす。 mixiは勝手に使われるそうなのでw
Latest Entries
mod_xsendfile
mod_xsendfile
認証して、さらにダウンロードという手法は通常、プログラムだけwebから見られるように
していた。で、実態はread/writeで転送するわけだ。
しかし、実際にやってみると転送量にまけて、プログラムではとっても無理。
プログラムで可能なのは、せいぜいjpgとかmp3まで。
動画などの大容量ファイルでは、認証後、locateみたいな仕組みが必須でした。
それを実現するのが、mod_xsendfileです。
あるプログラムからxのついたヘッダをだすとapacheの通常のとは違うルートで転送してくれる。
だから、.htaccessでdeny from allとしておいて、認証プログラムだけallowすればいいのです。
ただ、まだ使いこなしてなくて、認証プログラムとダウンロードプログラムを同じフォルダに
置かないと実施できない…
認証して、さらにダウンロードという手法は通常、プログラムだけwebから見られるように
していた。で、実態はread/writeで転送するわけだ。
しかし、実際にやってみると転送量にまけて、プログラムではとっても無理。
プログラムで可能なのは、せいぜいjpgとかmp3まで。
動画などの大容量ファイルでは、認証後、locateみたいな仕組みが必須でした。
それを実現するのが、mod_xsendfileです。
あるプログラムからxのついたヘッダをだすとapacheの通常のとは違うルートで転送してくれる。
だから、.htaccessでdeny from allとしておいて、認証プログラムだけallowすればいいのです。
ただ、まだ使いこなしてなくて、認証プログラムとダウンロードプログラムを同じフォルダに
置かないと実施できない…
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と比較する日々が続きそうです…
AVIとか、WMVとかダウンロードさせる
- ジャンル : コンピュータ
- スレッドテーマ : UNIX/Linux
mime.typesだけいじってましたが、IEには効かないんですって。
Proxyとか
httpd.confに
AddType application/octet-stream .avi .mpg .wmv
Header set content-disposition attachment
これでOK.
Proxyとか
httpd.confに
AddType application/octet-stream .avi .mpg .wmv
Header set content-disposition attachment
これでOK.
へたれ設定
とりあえずLVMに挑戦。
fdiskで8eを設定して、
/sbin/lvmでpvcreate,vgextentとかする。
extent2fsとかなんとかすると増えるはずなんだけど、途中で止まっちゃうんだわ。
すごい中途半端な増え方。
どっかで練習せなあかんな。
あとDNSも自力設定。
MXレコードの設定とAレコードの設定でいいん?
あー。本当に何にも知らないですねー。
あと1Uのネットワークボード増設にはライザーカードが必要というのも知らなかった。
ボードが900円くらいで1万円もするライザーカードかってられねーって。
fdiskで8eを設定して、
/sbin/lvmでpvcreate,vgextentとかする。
extent2fsとかなんとかすると増えるはずなんだけど、途中で止まっちゃうんだわ。
すごい中途半端な増え方。
どっかで練習せなあかんな。
あとDNSも自力設定。
MXレコードの設定とAレコードの設定でいいん?
あー。本当に何にも知らないですねー。
あと1Uのネットワークボード増設にはライザーカードが必要というのも知らなかった。
ボードが900円くらいで1万円もするライザーカードかってられねーって。



