自分の作ったCGIをみんなに評価してもらうスレだよ。言語は問わないよ。
よほどプログラムが短くないかぎりはアプロダにでもアップしてね。
自作CGIを評価するスレ
1Premature end of script headers : /this/thread
03/04/05 12:47ID:tIET0nhf357211
03/06/17 06:07ID:??? >>356
うーん、無理にスタックを意識して、
goto文を使用しようとは思わないです・・・。
あまり、ソースがトリッキーすぎると、
未来の俺から苦情がきます。
それでなくても、結構トリッキーっぽいから・・・
スタックとは、何なのかはっきり分かってなかったのですが、
いろいろ調べ回って、何なのか、何となく分かりました。
スタックについて、勉強させてもらう機会をいただいた皆さんに感謝です。
さて、また一つヘンテコなスクリプトを組みました。
複数のファイルから、文字列を検索するスクリプト。
My_Grep。
http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1181.zip
使い方などは、同封してるテキストファイルを読んでください。
改造してくれる人は、できればアップして、ソース見せてください。
勉強させてもらいます。
また、今回も「DirTree.pm」を同封してますが、
>>349の指摘された所は、直してます。
では、評価お願いします。
うーん、無理にスタックを意識して、
goto文を使用しようとは思わないです・・・。
あまり、ソースがトリッキーすぎると、
未来の俺から苦情がきます。
それでなくても、結構トリッキーっぽいから・・・
スタックとは、何なのかはっきり分かってなかったのですが、
いろいろ調べ回って、何なのか、何となく分かりました。
スタックについて、勉強させてもらう機会をいただいた皆さんに感謝です。
さて、また一つヘンテコなスクリプトを組みました。
複数のファイルから、文字列を検索するスクリプト。
My_Grep。
http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1181.zip
使い方などは、同封してるテキストファイルを読んでください。
改造してくれる人は、できればアップして、ソース見せてください。
勉強させてもらいます。
また、今回も「DirTree.pm」を同封してますが、
>>349の指摘された所は、直してます。
では、評価お願いします。
358211
03/06/17 06:17ID:???359211
03/06/18 07:21ID:??? バージョンアップしました。
http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1184.zip
このバージョンで、
複数の拡張子のファイル検索が可能。
ログで、先頭のインデントなどのスペースを削るようにした。
・・・誰か、評価お願いします・・・
誰も手がってくれない。寂しいね。
http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1184.zip
このバージョンで、
複数の拡張子のファイル検索が可能。
ログで、先頭のインデントなどのスペースを削るようにした。
・・・誰か、評価お願いします・・・
誰も手がってくれない。寂しいね。
360nobodyさん
03/06/18 15:16ID:???361211
03/06/19 02:58ID:??? >>360
ども。 一応覗いてくれてた人がいてたんだね。
よかった。
まったく手がってもらえないから、かなり寂しかった(w
やってる処理自体は、そんなにレベルの高い物じゃなかったりします。
俺も研究させてもらうので、何かスクリプト作ったらアップしてくれたら嬉しいです。
ども。 一応覗いてくれてた人がいてたんだね。
よかった。
まったく手がってもらえないから、かなり寂しかった(w
やってる処理自体は、そんなにレベルの高い物じゃなかったりします。
俺も研究させてもらうので、何かスクリプト作ったらアップしてくれたら嬉しいです。
362211
03/06/19 02:59ID:??? さて、また意味なくバージョンアップしました。
http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1189.zip
このバージョンで、
結果ログファイルがHTMLファイルになって、
ヒットしたキーワードが強調表示されるようになった。
ファイルがバイナリファイルか調べるようにした。
拡張子指定で、ファイル名に拡張子と同じ文字列があったら、
そのファイルも検索対象になっていたバグを修正。
指定した拡張子のファイルが無かった時でも、
つづけて検索フェイズに移行してたバグを修正
Html.pmってファイルを書き換えると、
出力するログの見た目が変えられるかもしれません。
それと、今回のバージョンで謎なバグが一つ・・・
tmpファイルが、今までスクリプト終了と同時に、
削除されるようにしてたんだけど・・・
今回のバージョンは、なぜかtmpファイルが残ります・・・。
何度も見直したんだけど、まったく原因がわかりませんでした。
どなたか、ご指摘いただけたら嬉しいです。
http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1189.zip
このバージョンで、
結果ログファイルがHTMLファイルになって、
ヒットしたキーワードが強調表示されるようになった。
ファイルがバイナリファイルか調べるようにした。
拡張子指定で、ファイル名に拡張子と同じ文字列があったら、
そのファイルも検索対象になっていたバグを修正。
指定した拡張子のファイルが無かった時でも、
つづけて検索フェイズに移行してたバグを修正
Html.pmってファイルを書き換えると、
出力するログの見た目が変えられるかもしれません。
それと、今回のバージョンで謎なバグが一つ・・・
tmpファイルが、今までスクリプト終了と同時に、
削除されるようにしてたんだけど・・・
今回のバージョンは、なぜかtmpファイルが残ります・・・。
何度も見直したんだけど、まったく原因がわかりませんでした。
どなたか、ご指摘いただけたら嬉しいです。
364211
03/06/19 14:12ID:??? >>363
あら。
何か主旨が変わってきたね。
評価貰えるよう、スレを上げるために、
何もなくスレ上げてたら荒らしだから、
何か無いかと、がんばってバージョンアップしてたんだけど・・・。
でも、いくつか勉強させてもらったし・・・
この辺が潮時かな。
じゃ、俺のスクリプト公開は終了します。
あら。
何か主旨が変わってきたね。
評価貰えるよう、スレを上げるために、
何もなくスレ上げてたら荒らしだから、
何か無いかと、がんばってバージョンアップしてたんだけど・・・。
でも、いくつか勉強させてもらったし・・・
この辺が潮時かな。
じゃ、俺のスクリプト公開は終了します。
365nobodyさん
03/06/19 14:28ID:???3661
03/06/21 10:11ID:??? 自作CGIを評価するスレ
このスレは終了いたしました。
みなさん書き込みありがとうございました。
投稿件数 : 365
最終投稿者: nobodyさん
最終投稿日: 03/06/19
このスレは終了いたしました。
みなさん書き込みありがとうございました。
投稿件数 : 365
最終投稿者: nobodyさん
最終投稿日: 03/06/19
367nobodyさん
03/06/21 17:05ID:???∧__∧ / ̄ ̄ ̄ ̄ ̄ ̄
( ^u^) < 乙彼様でした☆
と つ \______
(__つ 丿
し'
368nobodyさん
03/06/22 07:46ID:??? スレの趣向とは少し外れるんですが、
下記のロック、アンロックはどうでしょうか?
# lock routine
sub lock {
$retry = 5;
if (-e $lockex_file) {
$mtime = (stat($lockex_file))[9];
if ($mtime + 600 < time) {
rename($lockex_file, $lock_file) || &error("lock error");
}
}
while (1) {
last if rename($lock_file, $lockex_file);
if (--$retry < 0) {
&error("lock error");
}
}
}
# unlock routine
sub unlock {
if (-e $lockex_file) {
rename($lockex_file, $lock_file) || &error("lock error");
}
}
評価お願いします。
下記のロック、アンロックはどうでしょうか?
# lock routine
sub lock {
$retry = 5;
if (-e $lockex_file) {
$mtime = (stat($lockex_file))[9];
if ($mtime + 600 < time) {
rename($lockex_file, $lock_file) || &error("lock error");
}
}
while (1) {
last if rename($lock_file, $lockex_file);
if (--$retry < 0) {
&error("lock error");
}
}
}
# unlock routine
sub unlock {
if (-e $lockex_file) {
rename($lockex_file, $lock_file) || &error("lock error");
}
}
評価お願いします。
369nobodyさん
03/06/22 09:04ID:??? >>368
いいんじゃないかな。
while文の所は・・・
while ($retry--) {
return 0 if rename($lock_file, $lockex_file);
}
&error( 'Lock error' );
こうの方が良いかな。
いいんじゃないかな。
while文の所は・・・
while ($retry--) {
return 0 if rename($lock_file, $lockex_file);
}
&error( 'Lock error' );
こうの方が良いかな。
370368
03/06/22 10:02ID:???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;
このルーチンだと穴がある。経験則だけど、アクセスが殺到すると簡単に壊れる。
説明するのめんどいので、
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) {
こうですね。
ありがとうございます。
ロックが甘いということは分かりましたが、アンロックはどうでしょうか?
まだ371さんがおっしゃったサイトは見てないのでなんとも言えませんが…。
もう少し勉強してみることにします。
指摘されたリトライですが、
if (--$retry <= 0) {
こうですね。
373nobodyさん
03/06/24 15:24ID:??? >>371
> このルーチンだと穴がある。経験則だけど、アクセスが殺到すると簡単に壊れる。
> 説明するのめんどいので、
> http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
> この辺りでも読んでみて。
その辺り読んで、載ってるルーチンそのまま使ってテストした所、
ファイル壊れました。
俺は、>>368くらいの簡単なロックで良いと思うけど。
このロックで壊れるようなアクセス受けてるって事は、
その説明に載ってるようなルーチンでも、ほぼ壊れる。
どんなロックしててもファイルは壊れるんだから、
小細工いれた重いロック処理するより、
簡単にロックする処理入れた方が良いような。
> このルーチンだと穴がある。経験則だけど、アクセスが殺到すると簡単に壊れる。
> 説明するのめんどいので、
> http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
> この辺りでも読んでみて。
その辺り読んで、載ってるルーチンそのまま使ってテストした所、
ファイル壊れました。
俺は、>>368くらいの簡単なロックで良いと思うけど。
このロックで壊れるようなアクセス受けてるって事は、
その説明に載ってるようなルーチンでも、ほぼ壊れる。
どんなロックしててもファイルは壊れるんだから、
小細工いれた重いロック処理するより、
簡単にロックする処理入れた方が良いような。
374nobodyさん
03/06/24 15:33ID:??? >どんなロックしててもファイルは壊れるんだから
そんなことはないよ。ただ言えることは、この板ではまだまともにロックできて
いるルーチンが1つも書かれてないな。
そんなことはないよ。ただ言えることは、この板ではまだまともにロックできて
いるルーチンが1つも書かれてないな。
375nobodyさん
03/06/24 15:35ID:???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;
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なバージョン上で
これで壊れたって話は逆にあったら見てみたい。
そんなことはない。
というか、上(大崎氏の)のルーチンでファイル壊れたんならファイルシステムに
不備があるか、打ち間違いがあるかパーミッションやらの設定を誤ってるかどれか。
ファイルシステム上でrenameが衝突しないという条件の元でならうまく行くはず。
アクセス集中でファイルが壊れるのはロックの機構に不備がある
だけで、正しい状況下で行われたUNIX系OSでのflockでは、ファイルシステム
にバグがあるか、ファイルシステム自体のクラッシュでもない限り壊れない。
>>375
flockはNFS越しの場合に失敗するから、ファイスシステムを予め
調べておく必要がある。
NFS越しだとPOSIXモジュール使うかfcntl使う必要があった気がする。
>>376
> どんなに集中アクセスを受けても、
> 絶対壊れないファイルロックってある訳ない。
> あったら、ぜひ見て見たい。
非ネットワークファイルシステム+UNIX系OSでのflock。stableなバージョン上で
これで壊れたって話は逆にあったら見てみたい。
382371
03/06/24 15:48ID:01cZwzPj383371
03/06/24 15:54ID:01cZwzPj 変な憶測並べる前にFAQくらいみんな読もうよ。
http://elib.cs.berkeley.edu/~loretta/perl/nmanual/pod/perlfaq5/How_can_I_lock_a_file_.html
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:01cZwzPj390371
03/06/24 20:45ID:??? >>386
symlinkにしろ、rewriteにしろ、mkdirにしろ、OSがファイルシステム上で衝突しないように
設計されているという大前提で作られてるし、実際衝突するかどうかはOS次第なので、
OSに非依存で汎用可能なアルゴリズムっていうのは原理的に不可能じゃないかと。
symlinkにしろ、rewriteにしろ、mkdirにしろ、OSがファイルシステム上で衝突しないように
設計されているという大前提で作られてるし、実際衝突するかどうかはOS次第なので、
OSに非依存で汎用可能なアルゴリズムっていうのは原理的に不可能じゃないかと。
392nobodyさん
03/06/24 20:48ID:??? >OSがファイルシステム上で衝突しないように設計されているという大前提で作られてるし。
OS側でAtomicでもプログラム側がそうでなけりゃ・・・。
OS側でAtomicでもプログラム側がそうでなけりゃ・・・。
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までカウントなんぞできんぞ。
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までカウントなんぞできんぞ。
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
> 全体に一度だけかけろとか言うのか?
だってそうしないとカウントが飛んじゃうでしょ。
> 試して、壊れなかったら文句言いにこいや。
一度に5プロセス動かして1000までやってみたけど壊れないね。
FreeBSD2.2.2 + Perl5.6.0だけど。
OS何使ってて壊れるの? > 396
400371
03/06/25 01:03ID:Q5i43+wA プロセスを7つに増やしてテスト中。
時々ロックファイルが消えるな・・・。renameしかしてないはずなので、
ファイルシステムのバグか?
でもデータが壊れるということは今のところない模様。テスト続行中。
時々ロックファイルが消えるな・・・。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
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
あなたの言う条件↓は満たしましたよ。
> 文句言う前に試せやハゲ。
> 試して、壊れなかったら文句言いにこいや。
# 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
煽りですか。
あんた、一言多いね。
マジで?
ファイル壊れない?
こっちの環境は、Win2kだけど。
> 単にrenameシステムコールが衝突するようなファイルシステムを持つOSを使ってるだけ
んな訳ない。
2kで、そんなバグ聞いた事ない。
ずっとテスト環境は2kだったからなぁ〜。
とりあえず、こっちもVineの環境があるから、そっちでも試す。
>で、たった2プロセス同時起動で10000件持たないファイルシステムを
>持つ環境がどんな環境なのかとても気になるので早く教えてください>>398
煽りですか。
あんた、一言多いね。
404371
03/06/25 01:49ID:??? > こっちの環境は、Win2kだけど。
多分そのせいじゃないかなぁ。ファイルシステム何になってます?
こっちは今のところ30プロセス同時起動で30万件ノンストップで突破してるので、
スクリプト自体に問題があるとは思えない。
まぁ、このルーチンはrenameの堅牢性に頼ってるので、その点において汎用性は
薄いということを証明する形にはなったかも。
> 2kで、そんなバグ聞いた事ない。
1秒間に同じファイルを数十回renameする必要性ってあまりないからなぁ。
renameのファイルの取り合いって普通の状況だとまず起こりえないし。
ソース読んだら分かると思うけど、renameの空振り以外に原因は考えにくい
ので、再現性あるなら追試してレポート出してみたら?
多分そのせいじゃないかなぁ。ファイルシステム何になってます?
こっちは今のところ30プロセス同時起動で30万件ノンストップで突破してるので、
スクリプト自体に問題があるとは思えない。
まぁ、このルーチンはrenameの堅牢性に頼ってるので、その点において汎用性は
薄いということを証明する形にはなったかも。
> 2kで、そんなバグ聞いた事ない。
1秒間に同じファイルを数十回renameする必要性ってあまりないからなぁ。
renameのファイルの取り合いって普通の状況だとまず起こりえないし。
ソース読んだら分かると思うけど、renameの空振り以外に原因は考えにくい
ので、再現性あるなら追試してレポート出してみたら?
405nobodyさん
03/06/25 02:14ID:??? >>404
ファイルシステムは、もちろんNTFS
Vineで試してみた。
たしかに、2kの時は途中ファイルが壊れてカウントが1に戻ったりしたけど、
Vineはそんな事なかった。
・・・が、おかしい。
3つのプロセスで動かしたが、ログがおかしい。
同じ数字のカウントをする場面がある。
3つのプロセスでカウントしていったら、
同じ数字がカウントのログとして出るのはおかしいでしょ?
そっちでは、ちゃんとカウントしていってる?
ファイルシステムは、もちろんNTFS
Vineで試してみた。
たしかに、2kの時は途中ファイルが壊れてカウントが1に戻ったりしたけど、
Vineはそんな事なかった。
・・・が、おかしい。
3つのプロセスで動かしたが、ログがおかしい。
同じ数字のカウントをする場面がある。
3つのプロセスでカウントしていったら、
同じ数字がカウントのログとして出るのはおかしいでしょ?
そっちでは、ちゃんとカウントしていってる?
406371
03/06/25 02:28ID:???407nobodyさん
03/06/25 02:44ID:??? >>406
あ・・・悪い。
修正してなかった。
ちゃんと動いてる。
もっと沢山のプロセスと、もっと沢山のループで試したかったけど、
Vineが入ってるPCのCPUが弱いんでやめた。
なんだ・・・今回の実験で、2kがいかに糞なのかが証明されたのか・・・?
結果は、壊れないファイルロックが存在したって事か?
・・・俺が、間違ってますた。 スマソ
あ・・・悪い。
修正してなかった。
ちゃんと動いてる。
もっと沢山のプロセスと、もっと沢山のループで試したかったけど、
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が原因ではないかと。
スレ違いなようなので、この辺で。
> 結果は、壊れないファイルロックが存在したって事か?
昨日、あのまま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:???413nobodyさん
03/06/26 06:18ID:EBHZ+AEW .
414nobodyさん
03/06/26 09:03ID:??? NFSなんか使うなよ(;´Д`)
416nobodyさん
03/06/26 11:36ID:??? なるほど(;´Д`)
420nobodyさん
03/07/06 16:49ID:orJjX/H+ 別スレでrename失敗どうたらこうたら、言ってるんですが、
そんなにrename失敗することあるんですか?
そんなにrename失敗することあるんですか?
421nobodyさん
03/07/06 16:50ID:??? 権限がなければ
422nobodyさん
03/07/06 17:08ID:GI5yk6yl 権限があれば100%renameできるんですね?
423nobodyさん
03/07/06 17:34ID:??? 誰がそんなことを言った?
425nobodyさん
03/07/06 21:38ID:??? L⇔R
426nobodyさん
03/07/06 21:48ID:??? 横浜⇔東京
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:???433山崎 渉
03/08/02 02:24ID:??? ∧_∧
( ^^ )< ぬるぽ(^^)
( ^^ )< ぬるぽ(^^)
434ぼるじょあ ◆ySd1dMH5Gk
03/08/02 04:52ID:??? ∧_∧ ∧_∧
ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
ピュ.ー ( ・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
昔作った掲示板です。今ではもうこんなにかけません。
ttp://www.42ch.net/UploaderSmall/source/1060103401.zip
昔作った掲示板です。今ではもうこんなにかけません。
438nobodyさん
03/08/06 02:44ID:???439nobodyさん
03/08/06 03:48ID:??? ttp://www.42ch.net/UploaderSmall/source/1060108917.zip
良かったらお願いします。
使い方はcgi呼び出して?ってリンク見ると大体書いてあります。
典型的な我流でCGIしか書いたことの無い人のソースだとは思います。
非常識な部分があればご指摘頂きたいです。
#普段タブ使っているのですが、環境に依存しそうなので
#アップの際に、全てスペースに変換しました。
#個人的な情報も消してあります。ご理解ください。
良かったらお願いします。
使い方はcgi呼び出して?ってリンク見ると大体書いてあります。
典型的な我流でCGIしか書いたことの無い人のソースだとは思います。
非常識な部分があればご指摘頂きたいです。
#普段タブ使っているのですが、環境に依存しそうなので
#アップの際に、全てスペースに変換しました。
#個人的な情報も消してあります。ご理解ください。
440向こうの472=475
03/08/06 10:05ID:??? >>439
コーディングスレの469さんか。(w
名前空間の扱いに振り回されてる感じがする。
基本的にパッケージ名や定数のハードコーディングは避けた方がいいし、
依存し合うものを別ファイルに分けると見通しが悪くなるだけだよ。
どうしても分けたいのなら各パーツはもっと役割分担を
はっきりさせて汎用性を上げ、OO なスタイルで組むが吉。
コーディングスレの469さんか。(w
名前空間の扱いに振り回されてる感じがする。
基本的にパッケージ名や定数のハードコーディングは避けた方がいいし、
依存し合うものを別ファイルに分けると見通しが悪くなるだけだよ。
どうしても分けたいのなら各パーツはもっと役割分担を
はっきりさせて汎用性を上げ、OO なスタイルで組むが吉。
441nobodyさん
03/08/06 10:38ID:??? >>440
ここ過疎なので人すくなくてばれるだろうとは思ってました。。。
分けるのは、基本的に改造向けではじめました。
(HTML部分を分ける、とか。)
あと、機能追加のたびに追加したりとかって感じです。
最初はあまり深く考えないで分けていたんですが
最近えらい悩むようになってしまって
つきつめるとOOPにするしかないような気もしてきてしまします。
次になにか0から書くことがあったら、OOで書きたいとは思います。
これは今ある程度完成してしまってますし
身内で使ってくださる方がいるのであまりスタイルを変えるつもりはないです。
総書き直しでOOにしようとか毎晩のように思ったりするのですが
なかなか手出しする気力も時間も・・・
やっぱOOかー
ここ過疎なので人すくなくてばれるだろうとは思ってました。。。
分けるのは、基本的に改造向けではじめました。
(HTML部分を分ける、とか。)
あと、機能追加のたびに追加したりとかって感じです。
最初はあまり深く考えないで分けていたんですが
最近えらい悩むようになってしまって
つきつめるとOOPにするしかないような気もしてきてしまします。
次になにか0から書くことがあったら、OOで書きたいとは思います。
これは今ある程度完成してしまってますし
身内で使ってくださる方がいるのであまりスタイルを変えるつもりはないです。
総書き直しでOOにしようとか毎晩のように思ったりするのですが
なかなか手出しする気力も時間も・・・
やっぱOOかー
442441
03/08/06 10:58ID:??? しかもコーディングスレであとで言われたとこ
直す前のうpしてた ウワーン
直す前のうpしてた ウワーン
443nobodyさん
03/08/12 15:36ID:QPay4kE6 >>442
age
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/
>>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で初期設定。
排他制御も何も入れてないがとりあえず動いた。
これからトラックバックを盛り込むけど難儀するだろうなぁ
http://ex.1000gex.net/blog.zip
common.phpで初期設定。
排他制御も何も入れてないがとりあえず動いた。
これからトラックバックを盛り込むけど難儀するだろうなぁ
447nobodyさん
03/08/31 02:19ID:??? 何?評価して欲しいの?
ただの宣伝?
ただの宣伝?
448nobodyさん
03/08/31 02:27ID:6GeG39LL ダメ出しきのん。
SAFE_MODEでさっそく引っかかったが
SAFE_MODEでさっそく引っかかったが
449nobodyさん
03/08/31 02:54ID:??? 微妙な物作るな
450ガイキチ厨房
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(); を使ってファイルを切り詰める必要あり。
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(); が力技で
解消しているように見える。
ログファイルが壊れる(例えば 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:6GeG39LL455nobodyさん
03/09/01 00:56ID:??? まずsageろ
話はそれからだ
話はそれからだ
456nobodyさん
03/09/01 01:41ID:??? 相変わらず発言が電波過ぎる…
レスを投稿する
ニュース
- イチロー氏、野球と比べてサッカーが「うらやましい」と語る 「チームのためにという感じが」「野球は個人で成績を出さないとボロカス」 [冬月記者★]
- 【サッカー】ブラジル戦、NHKは地上波なし 本田圭佑はBSで解説… 悲鳴続出「マジかよ」 地上波はフジテレビが生中継、解説は小野伸二 [冬月記者★]
- 【W杯】韓国が大窮地 悪夢のシナリオ止まらず 決勝T進出順位ボーダーの8位に転落 セネガル、イランに抜かれる ★5 [尺アジ★]
- 【自維】鮭おにぎり198円に絶望、コンビニすら遠い存在に…「生き延びられない」物価高で広がる生活苦★6 [ひぃぃ★]
- 【サッカー】W杯の「日本VSブラジル」を他で例えると…Xで問いかけ話題「湘北vs山王」「明徳義塾vs大阪桐蔭」「ドトウvsオペラオー」★2 [o(^・-・^)o★]
- 【サッカー】日本代表、ブラジル戦でアウェーユニホーム着用へ… FIFAが公式発表 爆売れの白デザイン、W杯で初お披露目! [冬月記者★]
- (´・ω・`)お前らって好きなアイスあるの?
- 石破がアメリカに投資した80兆円って返ってくるの? [126644339]
- お前らチンポ出したか?
- 経団連「年内には訪中して習主席と面会したい😢レアアースもタングステンももう限界😢」 ★2 [904151406]
- 安倍晋三「らめぇ!お尻がオマンコになっちゃう…!❤」 [279951338]
- 【高市悲報】今国会の全法案が廃案へ。。。飲みィのヤリィのしてきた結果がこれなのか・・・ [252835186]