トップページ⇒php
1001コメント344KB

CGI: Common Gateway Interface part 11

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/06/14 22:26ID:F9qlqHNx
CGIの運用に関する質問スレッドです。

※CGIは特定の言語に依存するものではありません。

Perlのコーディングに関する質問は、専用スレでお願いします:
[Perl 初心者コーナー Part24]
http://pc2.2ch.net/test/read.cgi/php/1054992610/

CGIとPerlの区別がわからない、という人はとりあえずこちらへ:
[WebProg 初心者の質問 Part3]
http://pc2.2ch.net/test/read.cgi/php/1045091733/

過去ログ・関連スレッドは >>2-5 あたりに
0586nobodyさん04/01/24 00:26ID:sB1NzHfU
http://pc2.2ch.net/test/read.cgi/php/1072896288/
から誘導されてきましたー。


現在ログをHTMLファイルとして吐き出す掲示板を作っています。
動作自体は問題ないのですが、HTMLをファイルとして吐き出して上書きする
性質上、 パーミッションが606にならざるを得ません。 suExecはナシってことで。

こうしたHTMLファイルをサーバー上に置いた場合、外部から書き換えられる
危険性があるでしょうか。
まあ、普通の掲示板のログファイルが勝手に書き換えられるというのも聞かない
ので大丈夫だと思うのですが。

スクリプトでも埋め込まれると目も当てられないので。

過去ログ全部たどったら、「ダメだ」と「いや大丈夫だ」となってて、どっちでしょう?
0587nobodyさん04/01/24 00:39ID:???
>>586
じゃあ書き換える前後にパーミッションを変えればいいじゃないの
058858604/01/24 00:40ID:sB1NzHfU
>>587
CGI上からのchmodのできないサーバーです。
情報小出しで申し訳ない。
0589nobodyさん04/01/24 00:49ID:???
>>586
外部から書き換えられる危険性はほとんど無いが、
内部から書き換えられる危険性は結構高い。

例えば、君がそのCGIをどっかのプロバイダの共用サーバ上で動かしているとして、
その共用サーバは suExec 使っていない、つまり全ユーザのCGIが同じ実効uidで動いているわけだが、
そのプロバイダに俺も入会して、同じ共用サーバにアカウントもらったとする。
そしたら俺は、速攻で「そのサーバ上の全ディレクトリを回って606のファイルを見つけるCGI」を組んで
次に「606ファイルを好きに書き換えるCGI」を組んで
俺が将来何か素晴らしいことを思いついた時に踏み台にできるよう準備しておく。
何の役に立つかはよくわからないが、何をやったとしてもまず足が付かないので、理想的な環境だ。

もちろん、俺のようなやつは世の中にそうそういないので、
そんなやつと同じサーバで出会う確率は無視できるほど小さい、と言うこともできる。
059058604/01/24 01:10ID:sB1NzHfU
>>589
> その共用サーバは suExec 使っていない、つまり全ユーザのCGIが同じ実効uidで動いているわけだが、
> そのプロバイダに俺も入会して、同じ共用サーバにアカウントもらったとする。
> そしたら俺は、速攻で「そのサーバ上の全ディレクトリを回って606のファイルを見つけるCGI」を組んで
> 次に「606ファイルを好きに書き換えるCGI」を組んで

なるほど。つまり書き込み権限のあるフォルダにHTMLがあればどうにでもなる、と。
707などというパーミッションはとんでもない、ということでいいですか?
サーバー側でホームディレクトリ以下のファイルしか変更できないような対策があれ
ば安心?

サーバーがAppachだとして、管理者がsuExecを導入しない理由ってなに?
とまで聞いたらスレ違いでしょうか。
0591nobodyさん04/01/24 01:23ID:???
>>590
予想
a. 昔 suexec を入れてなくて そのまま入れる機会を逸している。
b. suexecを知らない
c. suexecはプロセスの起動数が倍になるので、負荷を避けるために導入していない。
 (httpd → CGIなプロセス が httpd → suexec → CGIなプロセスになる)
0592nobodyさん04/01/24 01:47ID:???
>>591
bは論外として(笑)。
一応いまのところは問い合わせたときに「当面予定はありません」だったのでcかな。

いちおうもう一度、上記のようなケースに対策をとっているのか問い詰めて、
導入を薦めてみます。

とはいっても配布を視野にいれているので、そこそこいろんなサーバーで動かない
となぁ。
選択制でchmodの機能は入れるとして、セキュリティ上は堅いとはいい難い、と・・・。


今日はこれで寝ますが、対策・絶対ダメなど、何か他に情報ありましたらよろしくお願い
します。

>>587>>589>>591 ありがとうございました。
0593nobodyさん04/01/24 09:51ID:???
HTTP PUTメソッド
0594nobodyさん04/01/24 16:31ID:PL//gjDg
PerlのCGI.pmを使うときに少しでも軽くするために気をつけるべきことは
ありますか?
0595nobodyさん04/01/24 16:42ID:???
>>594
use CGI; 行の先頭を # でコメントにすることぐらいかな
0596nobodyさん04/01/25 12:38ID:???
>>595
CGI.pmは使うなと?
フォームデータのデコード、Cookieの生成、ヘッダの出力にしか
使ってないので自前で作っちゃった方がいいかなぁ。
0597nobodyさん04/01/25 20:21ID:???
>>596
CGI.pmを別名にして、開いて、要らない部分を消すとか。
0598nobodyさん04/01/25 21:00ID:???
CGI.pm は重い重いとよく言われていて、実際重いんだが、
HTML::Template や LWP, DBI みたいにもっと重いモジュールをがんがん使う俺様から見ると、
もはや誤差のうち
0599nobodyさん04/01/25 22:33ID:???
楽をしたいがために、
CGI
HTML::Template
DBI
を同時に使うことはよくある。
0600nobodyさん04/01/25 22:54ID:???
どう重いの?
0601nobodyさん04/01/25 23:47ID:???
最初のコンパイルに時間がかかる。

俺の自宅鯖 (Pen4/3G) だと、たいていの CGI は 5〜10msec で実行が終わるが
use CGI と書くだけで 50msec に跳ね上がる。

しかし use HTML::Template は 60msec 食うし
use DBI に至っては 80msec 以上かかる (しかもこれにはDBDのコンパイル時間は入っていない)。

mod_perl でこの辺のモジュールを全部キャッシュしておけば
何も問題なくなるのだが。
0602nobodyさん04/01/26 00:10ID:???
>>601
そしてその方が、HTML::Template もキャッシュが可能になってさらに速くなると言う。
060359404/01/26 00:27ID:???
うーん。まさにCGI、HTML::Template、DBIを使ってるんですよね。
CGI.pm部分だけ自作しても焼け石に水ってことですか。
0604nobodyさん04/01/26 01:01ID:???
DBIはまだしもHTML::TemplateやCGI.pmなんかいらんだろ
0605nobodyさん04/01/26 09:45ID:???
>>604
楽がしたいから使うんだけどな。
Perl使いが一番重要視する効率はコーディングの効率だと思うんだけどどうよ。
感覚的なものだけどさ。
0606nobodyさん04/01/26 10:01ID:???
怠惰、傲慢、短気は perl プログラマの三大美徳ですしな
0607nobodyさん04/01/26 13:17ID:???
教えてください。perlでログを採取したいので
以下のようにしました。
ただ追加書き込みしているだけですがflockはした方がよいでしょうか?
また、その場合どのようにすればよいでしょうか?

open(FH,">>index.log");
print FH $date_time . "\t" . $host . "\t" . $user_agent . "\t" . $http_referer . "\r\n";
close(FH);
0608nobodyさん04/01/26 13:52ID:???
>>607
禿しくスレ違い

Perl コーディング初心者質問コーナー Part31
http://pc2.2ch.net/test/read.cgi/php/1072896288/l50

逝ってよし
060960704/01/26 13:57ID:???
解決しますた。
0610nobodyさん04/01/26 21:56ID:???
>>603
HTML::Template は、便利だと思うけどなぁ。
061161004/01/26 21:56ID:???
もとい、
>>604
0612nobodyさん04/01/26 22:16ID:???
HTML::Templateの機能なんて普通に同じ事をコーディングでやるだろ
0613nobodyさん04/01/26 22:42ID:???
俺、ほとんど同じことをするライブラリを自分で作った後で
HTML::Template を見つけたよ

ループのネストとか「おお俺って賢いじゃん」と思ってたんだがなあ…
0614nobodyさん04/01/27 01:55ID:???
>>613
ちなみにどんなやり方?
061561304/01/27 02:13ID:???
>>614
Template クラスと Tag クラスがあって、
Template オブジェクトに Tag オブジェクトを「貼り付け」る。
Template オブジェクトは HTML::Parser 使ってテンプレートファイルをパースしてって、
それらしいタグにぶつかると、対応する Tag オブジェクトの print メソッドを呼び出して、
戻り値をタグの代わりに挿入する。
Tag クラスは Tag::Base クラスを基底として継承したものをいくつか作ったんだが、
ループするタグだとか、if/unless タグだとか。ネストするときは Tag に Tag を貼り付ける。
将来他に新しいタグを思いついたときにも、同様に Tag::Base を継承したクラスさえ作れば、
Template クラスには一切手を加えずに機能拡張できる、つー。

しかし完成直後に HTML::Template を見つけ、
ほとんど全ての機能が既に実現されていたと知り、
新しいタグを作る気も失せてしまった…
0616nobodyさん04/01/27 02:18ID:???
>>612
ちりもつもればなんとやらで、
HTML::Templateの作法を頭にいれちゃえば、使い回しきくので便利。
(まぁ、自作のモジュールをすでにそーいうのを作っているならいいけど)
でも、複数人がコーディングしたり引き継ぎとかの場合、
ドキュメントがちゃんとあるから、HTML::Template のほうがいいかなと。
⇒http://member.nifty.ne.jp/hippo2000/perltips/html/template.htm

あと、HTML::Templateってそのまんま置けばつかえる(SSH接続不要)というのも好き。
0617nobodyさん04/01/27 11:03ID:???
>>616
俺も最初自作のモジュールを使ってたんだけど、やっぱ事実上Perlの
標準であるHTML::Templateの方が引継ぎの時等に便利なんだよね。

ちなみに俺の場合、<TMPL_VAR NAME="hoge">というのがどうしても
嫌だったから、勝手に%hoge%という書式に変更して、newするときに
filterオプションで置換して使ってます。
TMPL_LOOPやTMPL_IFは<!--#tmpl_loop name="hoge" -->みたいに
SSI風書式にしてます。
0618す04/01/28 14:22ID:i/cjCs6g
ちょいと質問です。apache の改造を行っているのですが、まぁそれは良いとして、
CGI 起動するときに環境変数 DOCUMENT_ROOT がなかったらダメですか?
apache 自体にはまったく問題ないんですけど、CGI 開発者としてのご意見きぼん。
0619nobodyさん04/01/28 14:36ID:???
俺はそんな環境変数使わんが、世の中には
ttp://www.palcom.ne.jp/hosting/support/server_independent.html
みたいな書き方をしているサイトが結構あるらしい
0620す04/01/28 14:41ID:???
>>619 おもいっきりサーバに依存してますね(萎
0621nobodyさん04/01/28 14:44ID:???
>>618
ttp://hoohoo.ncsa.uiuc.edu/cgi/env.html
なので無くても文句は言いません。
0622nobodyさん04/01/28 14:45ID:???
>>618
DOCUMENT_ROOT はApacheが独自につけてくれる環境変数みたいなので
なくても、公式のCGIとしてはOKなのでは。
ただし、Apacheにどっぷり遣ったようなCGIプログラムは必要としてるかも。

参考
http://hoohoo.ncsa.uiuc.edu/cgi/env.html
http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html
062362204/01/28 14:55ID:???
ってもうレスついてるじゃん… _| ̄|●_
0624nobodyさん04/01/29 15:43ID:pGuQUw/W
掲示板などのCGIで書き込みボタンを押した時にエラーが出るなどして
ブラウザの戻るボタンで戻る場合、先ほどの書き込み内容が
フォームの中に残っている時と残ってない時があるのですが、
これを確実に残して置く方法ってあるのでしょうか?
0625nobodyさん04/01/29 16:03ID:???
>>624
俺もそういう方法があれば是非知りたいと個人的には思っているのだが
たぶんブラウザの側の実装や設定の問題なので
CGIからは手出しできないんじゃないかと見ている
0626nobodyさん04/01/29 17:52ID:???
>>624-625
書き込みを一旦CGIが受け取れて単に内容の不備などによる
エラーなら値をフォームのvalueに入れれば済むだろ。
0627nobodyさん04/01/29 17:59ID:???
>>626
ブラウザの戻るボタンを使った場合らしいぞ
0628nobodyさん04/01/29 18:01ID:???
キャッシュさせないようにしておけばいいんじゃない?
0629nobodyさん04/01/29 19:26ID:???
value="" とかしてると戻ったときに入力された値が表示されない。
どうもIEだとvalueの値が優先されて表示される模様。

経験則なので嘘かもしれないw
0630nobodyさん04/01/29 20:44ID:???
なゆ板を設置したいのですがCGIの設定が(しかた)
わかりません。
パールを変えただけでは駄目ですよね?
0631nobodyさん04/01/29 23:34ID:???
>パールを変える
新語キター
0632nobodyさん04/01/29 23:55ID:???
なゆ板って何よ?
0633nobodyさん04/01/30 00:04ID:HPifPmuk
>>632
UP板です。
ファイルとかの。
0634nobodyさん04/01/30 02:51ID:???

 配  布  元  で  聞  け

0635nobodyさん04/01/30 04:10ID:???
配布元はバー茶の垢デリで亡くなりますた。
0636nobodyさん04/01/30 04:22ID:???
どっちにしてもスレ違いだから放置するか
0637 ◆LLLLLLLLL. 04/01/30 10:45ID:r6WYD04X
hoge.shtmlとfoo.cgiがあり、
hoge.shtmlのなかに上下に2つfoo.cgiをexec cgiで呼び出す記述をし、
foo.cgiの方で、UserAgentを見て携帯電話の時とPCの時に処理を分け、
それぞれ表示させてるんですが、
携帯ユーザーの時は、上下2つあるうちの下の方は、
何も表示させないようにしたいんです。

cgiからの戻り値をssiに渡すことができるなら、
cgiから、表示させる文字列に加えて、携帯の時はフラグとして1を返し、
フラグが立ってたら下のexec cgiは実行しないような書き方をすると
出来るのではないかと思うのですが、、
何処を探してもそういうことが出来ると書かれたところを見つけられませんでした。

ssiスレを探しましたが無いようで、こちらに書かせていただきました。
何かいい方法無いでしょうか?

#ssi側でUAを判定することで下のexecをさせなくすることはできるのですが、
#cgi内でも表示させる文字列を分けるためUA判定する必要があるので、2度でまなんです

つまりssiとcgiで、変数を共有、若しくは戻り値、引数として値を渡せないかということです。
063863704/01/30 10:47ID:???
変なトリップついちゃいました。トリップは無視してください。
間違ってperlスレに書き込みしてしまいましたんで↑はコピペです。
よろしくお願いします。
0639nobodyさん04/01/30 13:59ID:???
>>637
SSIは全然知らんので求めてる答えとは違うが、
UAが携帯の時に空白文字列を返すんじゃだめなのか?
0640nobodyさん04/01/30 14:01ID:???
>>638
同じfoo.cgiを実行させてるから出来ないだろう。
おれだったら下はfoo2.cgiにして処理するけど。
0641nobodyさん04/01/30 14:09ID:???
>>640
引数渡せばいいんじゃん?
foo.cgi?loc=topとfoo.cgi?loc=bottomとか
064263704/01/30 14:22ID:???
>>641
それがexec cgiは引数渡せないみたいなんです(とほほさん調べ)
>>640
最悪それでいこうかと考えてたんですけど・・
大きいスクリプトなんで、主な処理を別ファイルにして、
ssiから呼ばれる上用CGIと下用CGI、
それぞれからメインのCGIをrequireしようかと・・

どうやらどうしても変数などを渡すことは出来ないようなんで、
負荷など若干気になりますがそれでいこうかと思います。
有難うございました。
0643nobodyさん04/01/30 14:34ID:???
exec cgi でやるから引数渡せないんであって
exec cmd なら渡せる(ARGV渡し)
0644nobodyさん04/01/30 14:37ID:???
exec (cgi|cmd) より include virtual を勧める。
0645nobodyさん04/01/30 14:41ID:???
ふむ・・・
うちのApache2.0.39だとexec cgiで引数渡せたんだがな・・・
バージョンによって違うのかな?

んで、
SSIで<!--#set var="TYPE" value="TOP">とかやると
$ENV{'TYPE'}でとってこれるみたい
0646ありが�dです04/01/30 14:49ID:???
>>643
ごめんなさい。exec cmd使えない鯖なもんでexec cgiなんです。
>>645
なんか環境によって使えたり使えなかったりらしいです。
うちのローカルでは使えなかったんですけど、
鯖で一回試してみます。
>>644
includeって読み込んで実行してくれるんですか。
ちょっとこっちも試してみます
0647訂正04/01/30 14:50ID:???
読み込んで実行というか、実行結果を読み込んでくれるって感じですかね。
調べてきます
0648nobodyさん04/01/30 14:54ID:???
どっちにしても、2つとも実行しないといけないんでわ?
SSIで判定して呼ばないとかは、CGIの範疇を超えてると思うですが。
0649nobodyさん04/01/30 14:56ID:???
っと
俺もすっかり見落としてたが、
ttp://tohoho.wakusei.ne.jp/wwwssi.htm#If
ここらへん使えばいけそう?
0650nobodyさん04/01/30 15:00ID:???
>>649
いや、そんなのはわかってて、その分岐の判断材料をcgiから返して欲しいんだが出来ないって話じゃないか?
0651nobodyさん04/01/30 15:40ID:???
>>645
やはり、exec.cgiで引数は渡せなかったんですが、
(ローカル5.8.0、鯖5.6かな?)

騙されたと思って下のほうの
>SSIで<!--#set var="TYPE" value="TOP">とかやると
>$ENV{'TYPE'}でとってこれるみたい
これをやってみると、ちゃんと変数渡せてました。

これは私が、「引数」などで検索してたため、見つからなかっただけで、
実は当たり前のことなのかもしれませんね。
有難うございました。これで期待通りのことが出来そうです。
0652nobodyさん04/01/30 15:44ID:???
何度もすいません・・perlのバージョンかいても仕方ないですね
apacheは1.3.29だと思います。
0653nobodyさん04/01/30 16:13ID:???
>>650
HTTP_USER_AGENTじゃあかんの?>判断材料

まぁ とりあえずSSIでCGIから返り値をとってくるのはムリポ
CGI中でENV書き換えてみたけど普通の方法じゃやっぱり保存できないみたいだし

>>651
思惑どおりにいきそうらしいので何よりです。 カンパレ
0654nobodyさん04/01/30 18:24ID:???
>>630ですが。
板違いみたいなんですが何処で聞けば良いんでしょう?
0655nobodyさん04/01/30 18:42ID:???
>>654
君の質問が意味不明だから相手にされないんだよ

CGI設置について質問
http://pc2.2ch.net/test/read.cgi/php/1054216089/

過去ログを読んでテンプレに従って質問してみ
0656nobodyさん04/01/30 20:30ID:???
ttp://homepage2.nifty.com/gyakuten/gyakutenhp/gyakumain.html
こんなにcgi使ってサーバーに怒られないんですか??
0657nobodyさん04/01/30 21:38ID:???
>>656
どれ? そのページ見るきがしねぇ
0658nobodyさん04/01/31 00:27ID:???
いきなりだが、2chのトリップ機能の仕様を教えてくれ。
自分の掲示板に組み込もうと思って。
0659nobodyさん04/01/31 01:38ID:???
>>658
ぐぐれ。厨じゃなければすぐにわかる。
0660nobodyさん04/01/31 02:24ID:???
>>659
ぐぐらんとわからん時点で駄目かと
一目見て気がつかんとなー
0661nobodyさん04/01/31 06:20ID:???
馬鹿がぶら下がってるが気にするなよ。
066265804/01/31 10:32ID:???
crypt関数か。

普通に気づかなかった。
投稿者の記事削除機能で使ってたのに。
テンキュー。
0663nobodyさん04/01/31 11:55ID:???
>>662
>投稿者の記事削除機能で使ってたのに。
厨臭さが漂ってますよ
0664nobodyさん04/02/01 10:14ID:???
>>663
ほんとだw
0665nobodyさん04/02/03 00:14ID:???
2ch某板のアクティブなスレッドから、特定IDのレスを抽出するCGI作ってるんだけど、(ニュース系のIDストーカーみたいなの)
どうも安いレンタルサーバーで動かすと激烈に重い。
今、上位100スレの全ログから抽出するのに成功したけど、全部で700以上のスレがあるんだよね。
どうにか軽くする方法ないですかねー。
0666nobodyさん04/02/03 00:27ID:???
>>665
こうゆうこと言ったら元も子もないがCGIでやることではないような。
クライアント側でやるべきでは?
例えばそのようなIEツールバーを作るとか。
0667nobodyさん04/02/03 01:49ID:???
>>665
1.定時に巡回してログを収集する(cronか何かで)
2.ログを解析し、DBにぶちこむなり、IDでindexを張るなり(これもcronか何かで)
3.CGIは、DBないしindexを検索するだけ
0668nobodyさん04/02/03 07:01ID:???
無駄に2chの負荷増やすなよ。
0669nobodyさん04/02/03 09:57ID:???
find.2ch.net
0670nobodyさん04/02/03 20:53ID:???
掲示板の作成でwrite.htmlとwrite.cgiとread.cgiと一緒に空のテキストファイル(content.txt)をアップロードしてやるそうです。
利用する技術はopen文、CGIモジュール、param関数、ファイル読み込み、ファイル書き込み、です。
これがwrite.htmlのソースです。
↓
<html>
<body>
<body background=star-k2.gif>
<center>
<font size="7"color="#FF00FF">掲示板のプログラム</font><br>
</center>

<font size="4"color="#00FFFF">氏名</font><br>
<center>
<font size="5"color="#FFFF00">書き込みの内容を指定してください ;</font><br>
</center>
<center>

<form action="write. cgi">
<input type="text" name="contents">
<input type="submit">

</center>
</form>
</body>
</html>

0671つづき04/02/03 20:55ID:???
これがwrite.cgiのソースです。
↓
#!/usr/bin/perl

print "Content-type:text/html\n\n";
use CGI qw(:standard);
$value = param("contents") ;
???????????????????
?ここに何を入力するかわかりません。?
???????????????????
print "<html><body>";
print "書き込みが終了しました";
print "</body></html>";

これがresd.cgiのソースです。
↓
#!/usr/bin/perl
print "Content-type: text/html\n\n";
??????????
ここに何を入れるか???
?????????????
print ???????
print ???????
print ??????
print ???????

以上です。わっけがわかりません。友達みんなこうゆうの弱いんで今みんなパソコン詳しい人に頼み込み中なんです…
誰か教えてください!
0672nobodyさん04/02/03 21:18ID:???
>>670-671
自由にソースコード書いていいと思うよ。
0673nobodyさん04/02/03 21:58ID:???
>>672

レスありがとうございます!
でも…馬鹿ですいませんが、自由にソースコードを書くことすら出来ない
のが現状です…大学の講義で、情報処理関係の講義を選択したのですが、
もうなにがなんだかさっぱりわからなくて…HTMLの基礎をかじったぐらい
の知識しかないので…
もしよろしければ、もう少し教えていただけませんか?
「勝手にしろ」とおっしゃられるかもしれませんが、ホントお願いします!
0674nobodyさん04/02/03 22:35ID:???
>>673
君がやりたいことを実現してくれるソースコードを書け
0675nobodyさん04/02/03 22:39ID:???
問題作った香具師も相当なアレだよなぁ。。。
0676nobodyさん04/02/04 04:15ID:???
ここで宿題を教わろうというアレな香具師とちょうどいいじゃん
0677nobodyさん04/02/04 13:07ID:???
673です。
痛い香具師なのは十分わかってるんですが…
右も左もわからない状態でして…
やっぱり自分でとことん調べるべきですよね。。
なんとか頑張ります。

ありがとうございましたm(_ _)m
0678nobodyさん04/02/08 23:32ID:???
Perl初心者スレから誘導されました。

現在mod_perlを使ってるのですが、
時間のかかるスクリプトの場合、途中でブラウザ側が読み込み中止をしても
最後までスクリプトは実行されるものなんでしょうか?
15秒程度のスクリプトで実験したところ、中止した後も最後まで実行されているようでした。

更新作業をするスクリプトで、一旦更新するブロックに入ったら
何があっても最後まで実行させたいのですが、まれに途中で止まってしまっているようで
原因がよくわかりません。


タイムアウト以内に終わるのであれば、ブラウザで読み込みの中止をしても最後まで実行される
ものなんでしょうか?
それとも、fork,execなりsystemなりして別プロセスとして動かしたほうがいいんでしょうか?
067967804/02/08 23:34ID:2J+W47Q/
なんかわかりにくくなっちゃったな。
どういうタイミングで、実行中のスクリプトが終了するのかが分からないんです。
0680nobodyさん04/02/08 23:49ID:???
KENTのスクリプトとか見てるとflock使わないで
symlinkやmkdirを使って自前でロックしてるみたいなんだけど
flockじゃやっぱりロックしきれないのかな?
0681nobodyさん04/02/09 00:50ID:???
>>678
fork して入出力 (STDIN/OUT/ERR) を閉じれ。
完了確認はメール送るなりなんなりすれ。
http://www.google.co.jp/search?q=CGI+%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88

>>680
Perl の場合は NFS 越しの flock は意味を成さないのと、
flock を実装していない OS に対応する為に、排他処理を
自作ルーチンでやる事がある。これらに当てはまらない
環境で使う事が分かっているなら flock が無難。

…という話は散々既出で嫌がられるので、以後はこの辺に。
http://pc2.2ch.net/test/read.cgi/php/1024795138/
0682nobodyさん04/02/09 00:54ID:???
なんで mod_perl がCGIなのかと問いつめたい…
flock は CGIとは直接の関係もないのではないかと(ry
0683nobodyさん04/02/09 11:32ID:???
>>681
専用スレあったのですね。スマソ。
0684nobodyさん04/02/09 12:15ID:???
>>678
mod_perl のことは難しいので、普通のCGIのケースに限って話をすると、
apache の場合のポイントは二つある。

一点目、apache が CGI を実行するときは、
クライアントとの TCP 接続について結構無頓着で、
CGI からデータが送られてくるまでは感知せず、
データを受け取って、つまりクライアントにデータを送信する段になって、
初めて TCP 接続をチェックして、
ここでようやく「切れてるじゃん」ということに気づく。
気づくと、CGI プロセスを kill しにかかる。

それじゃあ処理が完了するまでデータ送らなきゃ良いじゃん、
という話になるわけだが、まあやっぱりそういうわけにもかず、
二点目として、apache は、一定時間 CGI から出力がないと、
タイムアウトとみなし、CGI プロセスを kill しにかかる。
普通はこっちに引っかかるだろう。

上記は普通の CGI についての話であって、
mod_perl でコンテンツハンドラを書く場合はまた話が異なる。
Apache::Connection クラスには aborted という素敵なメソッドが用意されているぐらいで
いろいろ楽しいことができそうに思うのだが、
詳しいことは mod_perl スレに行って詳しい人に聞いてくれ。
0685nobodyさん04/02/10 19:09ID:???
Perl+Socketでブラウザと同じリクエストを送るようにして
エロ動画に直リンできるCGIを組んだんだけど
これを公開したら転送量がものすごいことになることに気づいた。
リクエストそのままで指定したURLに飛ばしたりはできない…よね。
やっぱり各自DLして使ってもらうしかない?
0686nobodyさん04/02/10 19:58ID:???
仕組みが理解できていない典型だな
■ このスレッドは過去ログ倉庫に格納されています