• ベストアンサー

アクセス人数制限CGIについて。

アクセス人数制限CGIについて。 お世話になります。 特定ファイルに同時アクセスする人数を制限して、制限を越えたら 「しばらくお待ちください」みたいなメッセージを表示するCGI、 あるいは他の方法でもよいのですが、何か方法があるでしょうか。 理由は150Kbps約60分のストリーミングファイルを公開したいのですが、 レンタルサーバのデーター転送制限の関係で、2人までの同時アクセスは セーフで、3人になると転送制限を超えてしまいアウト。サーバ屋さんから 怒られてしまいます。 なんとかこのファイルを公開していので、皆さんのお知恵を拝借させて ください。

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

  • ベストアンサー
回答No.3

プログラム的には簡単とはいえ、 unixコマンドとかhttpの予備知識がないとキツいでしょうね・・ とりあえずperlのサンプルです。 ただ書いただけで、動作確認はしてません。 ------------------------ #!/usr/bin/perl my $fn='largefile.flv'; my @ps=`ps ax | grep $fn | grep -v 'grep'`; if(@ps>2){   print "Content-type: text/html\n\n";   print "<html><head></head><body>Overloaded.</body></html>\n";   exit; } print "Content-type: video/flv\n"; print "Content-Disposition: inline; filename="$fn"\n\n"; system("cat $fn"); exit; ------------------------- ・最初の'largefile.flv'は、公開したいストリーミングファイル名に変更して下さい。  ただし、ファイル名が日本語だと、保存しようとした時に化けます。  対応するとけっこうタイヘンなんです。詳しくは  http://cydn.cybozu.co.jp/office/2008/07/post_1.html ・Content-Typeをprintしている行のvideo/flvは、flv動画の場合です。  ストリーミングファイルの種類に応じて、変更する必要があります。  Content-Typeについては、  「動画 content-type」でぐぐってください。 ・psコマンドについては、  http://www.garunimo.com/program/linux/linux11.xhtml このCGIを<a>タグなり、flashプレイヤーの<object>タグなりの もともとのストリーミングファイルの代わりに指定します。 #前回の回答には「同じCGI名を数える」と書いてましたが、 #cat使ったのでファイル名を数えました。

okwavewan
質問者

お礼

サーバエラーの原因は、 ×print "Content-Disposition: inline; filename="$fn"\n\n"; ○print "Content-Disposition: inline; filename=$fn\n\n"; でした。 映像は、映像本体のasfと、そのメタファイルのasxになっていたので、実行ファイルはasx。プロセス用はasfと、切り分けて設定して、動作させることができました。 おかげさまで映像ファイルを公開できることができました。ありがとうございました。

okwavewan
質問者

補足

ご返事遅れました。 早速アドバイスのCGIを下記のように書き換えて試したところ、500番サーバエラーになってしまいました。レンタルサーバは「ステップサーバ」です。 映像ファイルの指定を.asxではなく、元の.asfにしてみたりと試したのですが、ダメでギブアップしました。再度アドバイスよろしくお願いいたします。 *** #!/usr/local/bin/perl my $fn='video_001.asx'; my @ps=`ps ax | grep $fn | grep -v 'grep'`; if(@ps>2){   print "Content-type: text/html\n\n";   print "<html><head></head><body>Overloaded.</body></html>\n";   exit; } print "Content-type: video/asx\n"; print "Content-Disposition: inline; filename="$fn"\n\n"; system("cat $fn"); exit; *** Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, info@stepserver.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log.

その他の回答 (2)

回答No.2

psコマンドで同名CGIのプロセス数を数える、くらいでよければ、 どこのレンタルサーバでもできそうだし、処理も簡単かと思います。

okwavewan
質問者

補足

netaninja さん お答えありがとうございます。 自分はプログラムを作ったことがなく、CGIは既存のものに多少表示などの変更をする程度の 知識しかありません。どこか、本件の参考になるサイトがありましたらご紹介してください。

  • YkazubonY
  • ベストアンサー率30% (26/86)
回答No.1

PHPのセマフォーを使うと、同時セマフォーゲットを指定でき、 それを越えた時点で、待ち状態にできるので、 望みの処理が可能になると思います。 要するに、ホームページをPHPで記述するということですね。

okwavewan
質問者

補足

YkazubonY さん ご返事ありがとうございます。 自分はプログラム製作の経験がなく、HPHは、既存のアクセス解析を設置した経験しかありません。 そのような訳で、本件で初心者にヒントになるサイトがありましたらご紹介ください。

関連するQ&A