自作CGIを評価するスレ

1Premature end of script headers : /this/thread
垢版 |
03/04/05 12:47ID:tIET0nhf
自分の作ったCGIをみんなに評価してもらうスレだよ。言語は問わないよ。
よほどプログラムが短くないかぎりはアプロダにでもアップしてね。
369nobodyさん
垢版 |
03/06/22 09:04ID:???
>>368
いいんじゃないかな。
while文の所は・・・

while ($retry--) {
  return 0 if rename($lock_file, $lockex_file);
}
&error( 'Lock error' );

こうの方が良いかな。
370368
垢版 |
03/06/22 10:02ID:???
>>369
どうもありがとうございます。
他のスレでこういう書き方をみかけました。
while (!rename($lock_file, $lockex_file) {
 if (--$retry <= 0) {
  &error("lock error");
 }
}

>>369さんが書いてくれたものとどちらがいいんですかね?
371nobodyさん
垢版 |
03/06/24 13:54ID:01cZwzPj
>>368
このルーチンだと穴がある。経験則だけど、アクセスが殺到すると簡単に壊れる。
説明するのめんどいので、

http://www.din.or.jp/~ohzaki/perl.htm#File_Lock

この辺りでも読んでみて。

>>370
好みだと思う。

個人的には>>368>>369>>370もループの最中にreturnやら&errorで関数の
外に飛んでるので気持ち悪い(これも好みの問題)。

あと、>>368はテストが最大6回行われるのに大して、>>369>>370
5回なので等価なコードじゃなくなってる。

というわけで、個人的にはこう書くかな↓

my $retry = 5;
for($retry++; $retry; $retry--){
last if rename($lock_file, $lockex_file);
}

error("lock error") if not $retry;
372368
垢版 |
03/06/24 14:57ID:???
>>371
ありがとうございます。
ロックが甘いということは分かりましたが、アンロックはどうでしょうか?
まだ371さんがおっしゃったサイトは見てないのでなんとも言えませんが…。

もう少し勉強してみることにします。

指摘されたリトライですが、
if (--$retry <= 0) {
こうですね。
373nobodyさん
垢版 |
03/06/24 15:24ID:???
>>371
> このルーチンだと穴がある。経験則だけど、アクセスが殺到すると簡単に壊れる。
> 説明するのめんどいので、

> http://www.din.or.jp/~ohzaki/perl.htm#File_Lock

> この辺りでも読んでみて。

その辺り読んで、載ってるルーチンそのまま使ってテストした所、
ファイル壊れました。

俺は、>>368くらいの簡単なロックで良いと思うけど。
このロックで壊れるようなアクセス受けてるって事は、
その説明に載ってるようなルーチンでも、ほぼ壊れる。

どんなロックしててもファイルは壊れるんだから、
小細工いれた重いロック処理するより、
簡単にロックする処理入れた方が良いような。
374nobodyさん
垢版 |
03/06/24 15:33ID:???
>どんなロックしててもファイルは壊れるんだから

そんなことはないよ。ただ言えることは、この板ではまだまともにロックできて
いるルーチンが1つも書かれてないな。
375nobodyさん
垢版 |
03/06/24 15:35ID:???
>>374
>そんなことはないよ。ただ言えることは、この板ではまだまともにロックできて
>いるルーチンが1つも書かれてないな。
flock使っちゃだめ?
376nobodyさん
垢版 |
03/06/24 15:36ID:???
>>374
どんなに集中アクセスを受けても、
絶対壊れないファイルロックってある訳ない。

あったら、ぜひ見て見たい。
377nobodyさん
垢版 |
03/06/24 15:37ID:???
>>375
あ、ちなみに、flockでも壊れるんで。ファイル。
378nobodyさん
垢版 |
03/06/24 15:40ID:???
↓これでもこわれる?(CSVの処理はPerlメモ参考にしてます)
use strict;
use Fcntl qw(:flock);
$tmpfile = "$datafile".".$$.". time() .".csv";  #万が一リネーム失敗したときのために、
          #ユニークなファイル名にしておく

open (LOCKF, ">$datafile"."_lockf") or die("cannot open:$!");  #ロックファイルを作成する
          #(★注:ロックファイルは、各CSVごとにユニークに)
  flock (LOCKF, LOCK_EX);  #ロックファイルをflockする
  open(IN, "< $datafile") or die("cannot open:$!"); # 読みのみモードで開く
    open(TMP,"> $tmpfile"); #テンポラリファイルを作成
      while ($line = <IN>){
        $line .= <IN> while ($line =~ tr/"// % 2 and !eof(IN));
        $line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
        @values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
         ($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
        #必要なものだけをEUCにして、出力時にSJISにする
        foreach $value (@values){
          &jcode::convert(\$value, "euc");
        };
        #CSV形式に変換
        $newline = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @values;

        print TMP "$newline\n" ;#テンポラリファイルに1レコード書き込み
      }
    close TMP;
  close IN;
  unlink $datafile;
  rename ($tmpfile, $datafile) or die ("cannot rename : $!");
close LOCKF;
379374
垢版 |
03/06/24 15:41ID:???
>絶対壊れないファイルロックってある訳ない

この根拠がどこからくるのかわからないが、
少なくともとてつもないアクセス集中に対応できるように非ブロックモードで
タイムアウトを備えてないとまず無理だということは教えておこう。
380378
垢版 |
03/06/24 15:41ID:???
あ、EUCにしてからSJISにもどすの忘れてるけど、そこは気にしないで
381371
垢版 |
03/06/24 15:46ID:01cZwzPj
> どんなロックしててもファイルは壊れるんだから、

そんなことはない。

というか、上(大崎氏の)のルーチンでファイル壊れたんならファイルシステムに
不備があるか、打ち間違いがあるかパーミッションやらの設定を誤ってるかどれか。
ファイルシステム上でrenameが衝突しないという条件の元でならうまく行くはず。

アクセス集中でファイルが壊れるのはロックの機構に不備がある
だけで、正しい状況下で行われたUNIX系OSでのflockでは、ファイルシステム
にバグがあるか、ファイルシステム自体のクラッシュでもない限り壊れない。

>>375
flockはNFS越しの場合に失敗するから、ファイスシステムを予め
調べておく必要がある。
NFS越しだとPOSIXモジュール使うかfcntl使う必要があった気がする。

>>376
> どんなに集中アクセスを受けても、
> 絶対壊れないファイルロックってある訳ない。
> あったら、ぜひ見て見たい。

非ネットワークファイルシステム+UNIX系OSでのflock。stableなバージョン上で
これで壊れたって話は逆にあったら見てみたい。
382371
垢版 |
03/06/24 15:48ID:01cZwzPj
>>377
ネットワークファイルシステムを使ってる場合はね。
それ以外で壊れるという話は(ファイルシステム開発中のバグ以外は)
聞いたことない。再現できたら結構すごいと思うが。
383371
垢版 |
03/06/24 15:54ID:01cZwzPj
変な憶測並べる前にFAQくらいみんな読もうよ。

http://elib.cs.berkeley.edu/~loretta/perl/nmanual/pod/perlfaq5/How_can_I_lock_a_file_.html
384nobodyさん
垢版 |
03/06/24 18:50ID:???
追加書き込みすれば壊れない。
385371
垢版 |
03/06/24 19:10ID:01cZwzPj
>>384
2つのプロセスが同時に追加書込しようとしたら、
その部分は壊れるよ。
386nobodyさん
垢版 |
03/06/24 20:17ID:???
>>371
って言うかOSが関与しないファイルロックで信頼できるアルゴリズムってあるの?

387nobodyさん
垢版 |
03/06/24 20:18ID:???
>>385
何を以て壊れるとするかだな。
388378
垢版 |
03/06/24 20:27ID:???
>>378
はどうですか?
389nobodyさん
垢版 |
03/06/24 20:34ID:???
>>388
ええ、ばっちりシステムコールのflockがいらっしゃいますね。
390371
垢版 |
03/06/24 20:45ID:???
>>386
symlinkにしろ、rewriteにしろ、mkdirにしろ、OSがファイルシステム上で衝突しないように
設計されているという大前提で作られてるし、実際衝突するかどうかはOS次第なので、
OSに非依存で汎用可能なアルゴリズムっていうのは原理的に不可能じゃないかと。
391nobodyさん
垢版 |
03/06/24 20:47ID:???
>>390
その意見には激しく同意。
じゃあ、議論するだけ無駄だと思うわけだ。
392nobodyさん
垢版 |
03/06/24 20:48ID:???
>OSがファイルシステム上で衝突しないように設計されているという大前提で作られてるし。

OS側でAtomicでもプログラム側がそうでなけりゃ・・・。
393nobodyさん
垢版 |
03/06/24 21:00ID:???
>>373-392
スレ違い。
ファイルロックについてのスレあるから、
そこで熱く語ってくれ。
394nobodyさん
垢版 |
03/06/25 00:00ID:???
require './my_flock.pl';
while (1) {

  while ( not defined ($lock = &my_flock()) ) {};
    open (IN, "./count.txt");
    $data = <IN>;
    close (IN);
  &my_funlock($lock);

  print ++$data. "\n";

  while ( not defined ($lock = &my_flock()) ) {};
    open (OUT, ">./count.txt");
    print OUT $data. "\n";
    close (OUT);
  &my_funlock($lock);

  if ($data >= 10000) {
    last;
  }
}

>>371のその辺のファイルロックを別ファイルに取って呼び出してる。
これを、二つのプロセスで実行してみろ。
無事に10000までカウントなんぞできんぞ。
395374
垢版 |
03/06/25 00:21ID:???
>>394
まともに使えないならいっそ使わないほうが・・・
396nobodyさん
垢版 |
03/06/25 00:39ID:???
>>395
はぁ?
全体に一度だけかけろとか言うのか?
それでも壊れる。

何がまともに使えないだよ・・・
ルーチン呼び出すのに使えるも使えないもないだろヴォケ。
文句言う前に試せやハゲ。
試して、壊れなかったら文句言いにこいや。
397374
垢版 |
03/06/25 00:47ID:???
ルーチンをまともに使えないヤシが晒されるスレはここでつか?
398nobodyさん
垢版 |
03/06/25 00:57ID:???
>>397
だから。
試せってよ・・・。
試しもしないで、使えてねーとか、使い方悪いとか。
そんな事言われても、説得力ねーっちゅーの。

こういう使い方したらファイル壊れないとか、
このタイミングでルーチン呼び出したら大丈夫だとか、

まー試しもしないで語ってるヤツに、
ロクな答えなんて返ってきそうにないけどな。
399371
垢版 |
03/06/25 00:59ID:Q5i43+wA
>>396
> 全体に一度だけかけろとか言うのか?

だってそうしないとカウントが飛んじゃうでしょ。

> 試して、壊れなかったら文句言いにこいや。

一度に5プロセス動かして1000までやってみたけど壊れないね。
FreeBSD2.2.2 + Perl5.6.0だけど。

OS何使ってて壊れるの? > 396
400371
垢版 |
03/06/25 01:03ID:Q5i43+wA
プロセスを7つに増やしてテスト中。
時々ロックファイルが消えるな・・・。renameしかしてないはずなので、
ファイルシステムのバグか?

でもデータが壊れるということは今のところない模様。テスト続行中。
401371
垢版 |
03/06/25 01:13ID:Q5i43+wA
FreeBSD2.2.8 + Perl 5.6.0でも実験したところ、20000件超えてるけど、特に問題なし。
FreeBSD2.2.2の方も、10000件行ってエラーなし。
合計30000件実験してみたけど衝突は起こってない模様(プロセスの譲り合いで片方のプロセスが
ブロックする現象は見られたが)。

単にrenameシステムコールが衝突するようなファイルシステムを持つOSを使ってるだけ
とか、そういうオチじゃなくて?>>398
402371
垢版 |
03/06/25 01:22ID:???
ファイルが消える現象は、ロックファイルをディレクトリにすることで回避
# mkdir lockdir/lockfile

で、20プロセス同時起動で、30000件やってみたけど、全く問題なし。
さすがに30000回連続で20プロセスが同時に1つのファイルにアクセス
する状況はありえないだろうから、少なくともウチの環境上では
きちんとロック機構が機能してると思われる。

で、たった2プロセス同時起動で10000件持たないファイルシステムを
持つ環境がどんな環境なのかとても気になるので早く教えてください>>398
あなたの言う条件↓は満たしましたよ。

> 文句言う前に試せやハゲ。
> 試して、壊れなかったら文句言いにこいや。
403nobodyさん
垢版 |
03/06/25 01:30ID:???
おっと、ご苦労さん。
マジで?
ファイル壊れない?
こっちの環境は、Win2kだけど。

> 単にrenameシステムコールが衝突するようなファイルシステムを持つOSを使ってるだけ
んな訳ない。
2kで、そんなバグ聞いた事ない。

ずっとテスト環境は2kだったからなぁ〜。
とりあえず、こっちもVineの環境があるから、そっちでも試す。

>で、たった2プロセス同時起動で10000件持たないファイルシステムを
>持つ環境がどんな環境なのかとても気になるので早く教えてください>>398
煽りですか。
あんた、一言多いね。
404371
垢版 |
03/06/25 01:49ID:???
> こっちの環境は、Win2kだけど。

多分そのせいじゃないかなぁ。ファイルシステム何になってます?
こっちは今のところ30プロセス同時起動で30万件ノンストップで突破してるので、
スクリプト自体に問題があるとは思えない。
まぁ、このルーチンはrenameの堅牢性に頼ってるので、その点において汎用性は
薄いということを証明する形にはなったかも。

> 2kで、そんなバグ聞いた事ない。

1秒間に同じファイルを数十回renameする必要性ってあまりないからなぁ。
renameのファイルの取り合いって普通の状況だとまず起こりえないし。
ソース読んだら分かると思うけど、renameの空振り以外に原因は考えにくい
ので、再現性あるなら追試してレポート出してみたら?
405nobodyさん
垢版 |
03/06/25 02:14ID:???
>>404
ファイルシステムは、もちろんNTFS
Vineで試してみた。
たしかに、2kの時は途中ファイルが壊れてカウントが1に戻ったりしたけど、
Vineはそんな事なかった。
・・・が、おかしい。
3つのプロセスで動かしたが、ログがおかしい。
同じ数字のカウントをする場面がある。
3つのプロセスでカウントしていったら、
同じ数字がカウントのログとして出るのはおかしいでしょ?

そっちでは、ちゃんとカウントしていってる?
406371
垢版 |
03/06/25 02:28ID:???
>>405
>>394のソース直した?部分的でなく、全体をロックで囲まないと誤動作するよ。
print文の直上直下にあるunlockとlockの2行を外せばうまく行くと思う。
407nobodyさん
垢版 |
03/06/25 02:44ID:???
>>406
あ・・・悪い。
修正してなかった。
ちゃんと動いてる。
もっと沢山のプロセスと、もっと沢山のループで試したかったけど、
Vineが入ってるPCのCPUが弱いんでやめた。

なんだ・・・今回の実験で、2kがいかに糞なのかが証明されたのか・・・?

結果は、壊れないファイルロックが存在したって事か?
・・・俺が、間違ってますた。 スマソ
408371
垢版 |
03/06/25 11:01ID:???
>>407
> 結果は、壊れないファイルロックが存在したって事か?

昨日、あのまま30プロセス同時起動のまま寝て、今朝見たら400万件を
突破してました。もちろんノンストップで。

30プロセスが400万回連続で殺到しても平気だということなんで、
少なくともウチの環境では、ほぼ「絶対に壊れないロック機構」と言い切って
差し支えないと思う。

どうでもいいけど、このテストスクリプトだと、count.txtを書き込みオープンした
瞬間にプロセスが落ちるとカウンタリセットされるよね。堅牢なスクリプトを作ろうと
思ったらそこまで気を遣う必要があるかも。

>>377
flockに書き換えて同じ事やってみたけど、20プロセス10万件で壊れずに
行ってます。やっぱりOSの問題か、flock over networkが原因ではないかと。

スレ違いなようなので、この辺で。
409nobodyさん
垢版 |
03/06/25 14:12ID:???
結論的には何が一番?
410368
垢版 |
03/06/25 18:02ID:???
>>393さんがおっしゃってる通りたしかにスレ違いですが、
とても興味深い話題をありがとうございます。

>>402さんがおっしゃってることを試す価値はありそうなので、
とりあえずファイルを使うロックから、
ディレクトリを使うロックに変えてみたいと思います。
411nobodyさん
垢版 |
03/06/25 22:47ID:???
>>410
ないよ。flockが一番。
412nobodyさん
垢版 |
03/06/25 22:57ID:???
>>411
NFS越しでも?
413nobodyさん
垢版 |
03/06/26 06:18ID:EBHZ+AEW
.
414nobodyさん
垢版 |
03/06/26 09:03ID:???
NFSなんか使うなよ(;´Д`)
415412
垢版 |
03/06/26 10:55ID:???
>>414
お客さんでそういうトコ、多いんですよ(萎
だから仕事でflock使う際は、インストール先の
OSとファイルシステムは必ず確認。
416nobodyさん
垢版 |
03/06/26 11:36ID:???
なるほど(;´Д`)
417nobodyさん
垢版 |
03/06/26 12:53ID:???
>>414
十分有り得るよ。うちの大学もそうだし。
418nobodyさん
垢版 |
03/06/26 21:01ID:???
>>417
レガシーな大学でつね。
03/07/05 05:02ID:???
420nobodyさん
垢版 |
03/07/06 16:49ID:orJjX/H+
別スレでrename失敗どうたらこうたら、言ってるんですが、
そんなにrename失敗することあるんですか?
421nobodyさん
垢版 |
03/07/06 16:50ID:???
権限がなければ
422nobodyさん
垢版 |
03/07/06 17:08ID:GI5yk6yl
権限があれば100%renameできるんですね?
423nobodyさん
垢版 |
03/07/06 17:34ID:???
誰がそんなことを言った?
424nobodyさん
垢版 |
03/07/06 21:37ID:???
⇒と⇔の違い知ってるか?大馬鹿者>>422
425nobodyさん
垢版 |
03/07/06 21:38ID:???
L⇔R
426nobodyさん
垢版 |
03/07/06 21:48ID:???
横浜⇔東京
427nobodyさん
垢版 |
03/07/06 23:37ID:???
とんちんかんちん一休さんの>>422
428nobodyさん
垢版 |
03/07/06 23:40ID:???
将軍が彪の追い出しに成功してボリボリ食われちゃう一休さんの>422
429nobodyさん
垢版 |
03/07/07 11:59ID:???
-=⇒
430山崎 渉
垢版 |
03/07/15 11:08ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
431nobodyさん
垢版 |
03/07/25 23:38ID:???
あげ
432_
垢版 |
03/07/25 23:47ID:???
http://homepage.mac.com/hiroyuki44/hankaku09.html
433山崎 渉
垢版 |
03/08/02 02:24ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
03/08/02 04:52ID:???
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
435nobodyさん
垢版 |
03/08/06 01:58ID:u4hkzo1r
まだ評価していただけますか?
436nobodyさん
垢版 |
03/08/06 02:05ID:???
どうぞ
437435
垢版 |
03/08/06 02:10ID:u4hkzo1r
それでは。

ttp://www.42ch.net/UploaderSmall/source/1060103401.zip

昔作った掲示板です。今ではもうこんなにかけません。
03/08/06 02:44ID:???
>>437
ぱっとみですが、スコープや、名前空間を理解していらっしゃるのでよく勉強されてると思われます。
私の趣味的にはグロブを使わないようにするともっとよさげかと・・・
439nobodyさん
垢版 |
03/08/06 03:48ID:???
ttp://www.42ch.net/UploaderSmall/source/1060108917.zip
良かったらお願いします。
使い方はcgi呼び出して?ってリンク見ると大体書いてあります。
典型的な我流でCGIしか書いたことの無い人のソースだとは思います。
非常識な部分があればご指摘頂きたいです。

#普段タブ使っているのですが、環境に依存しそうなので
#アップの際に、全てスペースに変換しました。
#個人的な情報も消してあります。ご理解ください。
03/08/06 10:05ID:???
>>439
コーディングスレの469さんか。(w

名前空間の扱いに振り回されてる感じがする。
基本的にパッケージ名や定数のハードコーディングは避けた方がいいし、
依存し合うものを別ファイルに分けると見通しが悪くなるだけだよ。

どうしても分けたいのなら各パーツはもっと役割分担を
はっきりさせて汎用性を上げ、OO なスタイルで組むが吉。
441nobodyさん
垢版 |
03/08/06 10:38ID:???
>>440
ここ過疎なので人すくなくてばれるだろうとは思ってました。。。
分けるのは、基本的に改造向けではじめました。
(HTML部分を分ける、とか。)
あと、機能追加のたびに追加したりとかって感じです。
最初はあまり深く考えないで分けていたんですが
最近えらい悩むようになってしまって
つきつめるとOOPにするしかないような気もしてきてしまします。

次になにか0から書くことがあったら、OOで書きたいとは思います。

これは今ある程度完成してしまってますし
身内で使ってくださる方がいるのであまりスタイルを変えるつもりはないです。

総書き直しでOOにしようとか毎晩のように思ったりするのですが
なかなか手出しする気力も時間も・・・

やっぱOOかー
442441
垢版 |
03/08/06 10:58ID:???
しかもコーディングスレであとで言われたとこ
直す前のうpしてた ウワーン
443nobodyさん
垢版 |
03/08/12 15:36ID:QPay4kE6
>>442
age
444山崎 渉
垢版 |
03/08/15 22:37ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
445nobodyさん
垢版 |
03/08/30 22:39ID:???
52 名前:nobodyさん :03/08/30 20:46 ID:???
>>50
自作CGIを評価するスレ
http://pc2.2ch.net/test/read.cgi/php/1049514428/
446nobodyさん
垢版 |
03/08/31 01:55ID:6GeG39LL
Blogの試作公開

http://ex.1000gex.net/blog.zip

common.phpで初期設定。

排他制御も何も入れてないがとりあえず動いた。
これからトラックバックを盛り込むけど難儀するだろうなぁ
447nobodyさん
垢版 |
03/08/31 02:19ID:???
何?評価して欲しいの?
ただの宣伝?
448nobodyさん
垢版 |
03/08/31 02:27ID:6GeG39LL
ダメ出しきのん。

SAFE_MODEでさっそく引っかかったが
449nobodyさん
垢版 |
03/08/31 02:54ID:???
微妙な物作るな
03/08/31 06:44ID:???

PHPでカウンタを作ってみたのですが、どなたかご意見下さい。

http://popup3.tok2.com/home/program/cgi-bin/uploader/source/File:0011.txt
451nobodyさん
垢版 |
03/08/31 11:38ID:???
こちら素人だが、ざっと読んで気づいた点を。
script書き始めなら上々の滑り出しだと思う。

■L38の $ip のダブルクウォートは意図不明。

■” と ’ が混在してるけど、このスクリプトで使われてる ” は上記をのぞいて ’ に統一可能。

■L41は、$newdata = $newcont . '<>' . $_SERVER['REMOTE_ADDR'] ; と書けば十分なのでは。

■関数名とレフトブラケットの間に半角スペースがあったり無かったりする。これは趣味だから
どう書いてもいいと思うが、普通は入れない。制御語(ifとかforとか)の後には入れる。そうすることで
関数と制御構造を見分けやすくする。カラーリング機能のないエディタではこの方が見やすい気もする。
いずれにせよ、どっちかに統一したほうがよいと思われ。

■切り詰めを忘れている。ので、現データが 13<>127.127.127.127 で上書きデータが、14<>25.25.25.25 だった
場合、14<>25.25.25.257.127 に。書き込んだ後で、ftruncate(); を使ってファイルを切り詰める必要あり。
452nobodyさん
垢版 |
03/08/31 11:40ID:???
■L29の rewind(); は意図不明。
ログファイルが壊れる(例えば 8424<>127.0.0.1420<>127.0.0.8420<>127.0.0.842の ように)から
入れたのなら、アイディアとしては◎だが、スマートな処理とはいえないかと。

■あと、排他制御にバグがあるのでは。
ロックがかかっていても、fopen(); も flock(); も、 warning や fatal error (noticeも) を吐かないため、
処理が続行する。排他制御になってもならなくてもこのスクリプトは処理を最後まで実行するので、flock(); は
ちゃんと働いてない。
実際には起こらないかも知れないが、論理上、ロックがかかっているために L32 の fgets(); が失敗して
$buf に false が入ってカウンターが0に戻る可能性がある。L26でロックが取れなかった場合、
つまり前のリクエストを処理中の可能性がある場合、書き込みをスキップするかスクリプトを終了
するかブロックモードで待機させる必要があると思う。http://jp.php.net/flockにあるとおり、flock(); は
失敗すると false を返す。

■同じ理由で、前のロックが邪魔してロックがかかっていないのに書き込みに進行してしまうことがある。
書き込みがいくつも重なると、dat の内容がが妙なことになる予感。ここらあたりを rewind(); が力技で
解消しているように見える。
453nobodyさん
垢版 |
03/08/31 21:50ID:???
本7に対してそこまでしなくていいのに
454nobodyさん
垢版 |
03/08/31 21:56ID:6GeG39LL
ちなみにサンプルページ

http://s2.arigato3.net/~hon7/blog/

ハイブリッドP2Pによるトラックバックを考えてます
455nobodyさん
垢版 |
03/09/01 00:56ID:???
まずsageろ
話はそれからだ
456nobodyさん
垢版 |
03/09/01 01:41ID:???
相変わらず発言が電波過ぎる…
03/09/01 16:10ID:???
>>452

詳しく指摘していただきありがとうございます。
とりあえず''に統一し、関数名とレフトブラケットの間のスペースを
制御構造のみ入れるようにしました。

また、書き込み処理を行った後に、

 // ファイルを切り詰める
 ftruncate($fp, ftell($fp));

という処理を加えました。

ロックのバグについてなのですが、Googleで調べたところ、
flockはデフォルトでブロックモードになっているらしいのですが、

http://itbtech.itboost.co.jp/perl/perl_06.php

よろしくお願いします。
03/09/01 18:57ID:???

すいませんURL間違えました。正しくはこちらです。

http://itbtech.itboost.co.jp/php/php_04.php
459nobodyさん
垢版 |
03/09/01 23:17ID:???
Perlでも評価してもらえます?
460nobodyさん
垢版 |
03/09/02 01:39ID:???
>>459
>>1
461nobodyさん
垢版 |
03/09/02 16:15ID:???
>457
ああごめん。Manualみたらおもっくそそう書いてあった、、。
flockでとまるから一般の環境なら多分大丈夫だね。
こっちの検証スクリプトの間違いなのでflockとrewindの話しはなかったことに。
秒間50リクエストくらいでは問題なかったです(php4.3.0 apache1.3.27 RHLinux)。
ftruncate ( $fp , ftell ( $fp ) ) ; は ( $fp , strlen ( $newdata ) ) ; なんちゅう書き方もある。
03/09/02 19:51ID:???

なるほど、参考になりました。ありがとうございます。
463nobodyさん
垢版 |
03/09/03 02:03ID:6rADPhxn
とある会社の部活動のHPを管理している者です。

Web上で部の共有資産の貸し出し申し込み等の管理を行えるといいなぁ、と思いいろいろとCGIを探してはいるのですがなかなか見つかりません。
探しているのは、次のようなCGIです。

1.画面で借りたい物を選択・自分の名前・貸出期間等の入力、申し込み
2.画面上では「貸し出し中」等に表記が変化(それか削除されるなど、申し込みが行えない状態に変化)
3.sendmailが使えないサーバなので、申し込みがあったことをログに吐き出し、管理人が定期的にそれをチェックし貸し出す

こういうものです。
サーバはinfoseekのiswebでPerl、Python、Ruby、PHPが使えます。

ショッピングカートCGIを活用してもいいなと思ったのですが、sendmailを利用する物がほとんどで、上記のようにログにのみはき出す物はあったことはあったのですがシェアウェア(\15K!)でした。
それほど資産の数が多いわけでもなく、貸し出し回数もそんなに多くないので、15000円もかけるわけにはいきません。
出来れば無料、もしくは1〜2千円程度で利用できるCGIがありましたら、教えてください。

よろしくおねがいします。
464nobodyさん
垢版 |
03/09/03 04:27ID:???
>>463
>>1
465sage
垢版 |
03/09/03 12:28ID:Udj8Y4pI
>464

463です

え〜と。
スレ違いだ、ということですか…?

…すいませんでした。
466nobodyさん
垢版 |
03/09/03 13:26ID:???
sageはmail欄でw。
どっかに「こんなCGI探してます」的なスレあったハズだよ。
467nobodyさん
垢版 |
03/09/03 13:44ID:???
>>465
>スレ違いだ、ということですか…?
スレ違いじゃないと思うんだったら自作CGIへのリンク貼れよ。
自作CGIを評価するスレなんだからさ。
468nobodyさん
垢版 |
03/09/03 18:02ID:???
【CGI】こんなCGI探してますver.10【素材】
http://pc2.2ch.net/test/read.cgi/hp/1059878840/l50
Web製作板でつ。
レスを投稿する