スクリプト改造工房 Part3
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/02(水) 21:59ID:nr93n3doという人がいましたらここで聞いてください。
ひょっとしたらアドバイス出来るかもしれません。
前スレ
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=958370869
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=986986227
#板移動に伴い「CGI改造工房」→「スクリプト改造工房」に改名
なお、質問するときは
1)そのスクリプトのある場所(URL必須、拡張子".txt"でアップすればなお良し)
2)どんな風に改造して欲しいのか? (完成イメージHTMLを用意すればなお良し)
を必ず明記しよう。
0459456
01/11/02 11:28ID:???管理人しか修正できないんですよ。
それを投稿者本人が修正できるようにしたいんです。
>>457
1:に該当するみたいなので、ちょっとがんばってやってみます。
ありがとうございました。
ここ、sage進行なんですか?
一応sageます。
0460456
01/11/02 14:13ID:???>>458
initializeって、質問の項目のinitializeで、
書き込みの修正は出来ないんでした。(管理人も)
やっぱりダメかなー。
0461名無しさん@お腹いっぱい。
01/11/05 02:04ID:HWi+Nt0Aを使用しているんですけど、スレッド一覧を飛びにくくするには
どのように改造すればよろしいのでしょうか?
連続投稿規制等、色々やってみましたが駄目でした。もうウンコ投げまくり
0462名無しさん@お腹いっぱい。
01/11/05 02:16ID:???0463名無しさん@お腹いっぱい。
01/11/05 02:28ID:???0464名無しさん@お腹いっぱい。
01/11/05 02:44ID:???flock空振りしてるんなら他の関数使って
ロック組むとか
ロックが甘いなら他の関数に変えてみるとか
open (FH,">hogehoge");
flock FH,2;
とかなってるんだったら
open (FH,"+<hogehoge");
flock;
seek FH,0,0;
print FH "hugahuga";
$foo = tell FH;
truncate FH,$foo; とか。。
飛びまくってるって事は前者だと思うけど。
これ以上はワカラソ
0465461
01/11/05 05:06ID:???レンタルサーバーでも、当りハズレがあるん?
>>464
bbs.cgi内を検索してみました
この個所がロック?でどうすれば良いんだろう・・・
eval{flock(SUBW,8);};
close(SUBW);
0466461
01/11/05 20:39ID:HWi+Nt0A0467仕様書無しさん
01/11/05 22:58ID:D9DffOEh> レンタルサーバーでも、当りハズレがあるん? >勿論
他のプログラム(カウンタとか)は置いてないの?
もしそっちが�dで無いなら、それのソース見てロック用のサブルーチンを
使ってみなよ、大体 lock、unlock って言う対になってるか
lock(1)みたいにパラメータ渡すかのどっちかだから。。。
それとflock,8 はロック解除だから全然関係無いよ。
バンガレ(・∀・)
0468461
01/11/06 00:56ID:Ud61Q7HAなるほど、数字は時間かと思った
取り合えず $| = 1; を追加してみた
0469名無しさん@お腹いっぱい。
01/11/06 06:19ID:AMScTkU5するとエラーが出ます。
i-modeはリファラーがとれないのでHTTP_REFERERが怪しい
と思うのですが、どう改造すればいいのでしょう?
# ◇サブルーチン12:「IN処理」
sub link_in {
if ($in{'act'} eq 'vote' || $vote_key == 0) {
if ($in{'act'} eq 'vote') {
$ref = $ENV{'HTTP_REFERER'};
$ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if ($ref !~ /$script_pass/i) { &error("不正なアクセスです"); }
}
0470名無しさん@お腹いっぱい。
01/11/06 06:40ID:???sub link_in {
if ($in{'act'} eq 'vote' || $vote_key == 0) {
if ($in{'act'} eq 'vote') {
$ref = $ENV{'HTTP_REFERER'};
$ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if ($ref !~ /$script_pass/i) { &error("i-modeはいやづら。。。"); }
}
0471名無しさん@お腹いっぱい。
01/11/06 07:03ID:???エラーを消すだけ?
$refを他で使ってないなら#でコメントに。
# $ref = $ENV{'HTTP_REFERER'};
# $ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# if ($ref !~ /$script_pass/i) { &error("不正なアクセスです"); }
0472名無しさん@お腹いっぱい。
01/11/06 07:24ID:???はじく効果なくなるが
$ref = $ENV{'HTTP_REFERER'} || $script_pass;
use of undefined valueでエラー出てるなら
$ref = $ENV{'HTTP_REFERER'} || '';
0473名無しさん@お腹いっぱい。
01/11/06 18:46ID:???本文中のURLを自動リンクさせるという機能を追加しようと思って
タグ禁止処理の場所に
$comment =~ s/(https?|ftp|news):\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]
+)/<a href=\"$1:\/\/$2\">$1:\/\/$2<\/a>/g;
を追加したら、抹殺とかの機能がでなくなった・・・。鬱。
未熟者が改造するとどこかにボロが出る。
0474469
01/11/06 23:34ID:GKzEAczp$ref = $ENV{'HTTP_REFERER'} || $script_pass;
でとりあえずi-modeでもアクセス可能になりましたが、困ったことに
PCの重複投票がチェック出来なくなりました。
「はじく効果なくなる」とはそういう意味だったのですか?
ちなみにPCで連続アクセスすると重複投票のチェックは出来るのですが、
一旦i-modeでアクセスしてから再びPCでアクセスすると、チェックされ
ずにカウントされるようです。
i-modeでアクセスすることによりログの一部が消えるとか・・なんかわ
かりませんが、解決方法ありませんか?
0475461
01/11/07 00:27ID:1ns3B3ND今日も元気よく投げまくり、感動した。人数が多すぎなのかな
0476名無しさん@お腹いっぱい。
01/11/07 01:59ID:w4jQYe5D>>471氏のは当然検討済みだよね?
$ref = $ENV{'HTTP_REFERER'} || $script_pass;
は,リンク元のアドレス(リファラ)が取得できなかった時に,
「正規のリンク元から来た」ということにしているだけ。
$refは$script_pass以外からのアクセスをはじくのに使う。
下段の重複投票は,多分直前のアクセスしか記録してないため。
もっと知りたいなら,そのソースもどっかに上げよう。
0477名無しさん@お腹いっぱい。
01/11/07 02:07ID:???eval{flock(SUBW,8);};
は消してもかまわない。
closeで自動的にflock解除してくれる。
0478461
01/11/07 06:50ID:1ns3B3ND変更前
open(WIP,">$file");
eval{flock(WIP,2);};
foreach(@IP){
print WIP "$_\n";
}
eval{flock(WIP,8);};
close(WIP);
chmod(0600,$file);
↓変更後
open(WIP,">$file");
eval{flock(WIP,2);};
foreach(@IP){
print WIP "$_\n";
}
close(WIP);
chmod(0600,$file);
でイイの?
0479>>461
01/11/07 07:10ID:???my $lockFile = '../'.$FORM{'bbs'}.'/'.lc($_[0]).'.lock';
my $lockMode = $_[1];
my $cntAndFlag = 0;
if ($lockMode == 2) {
while ($cntAndFlag < 3) {
if (-e $lockFile) {sleep (3);}
else {
open (LOCK,">$lockFile")||&DispError('','ロック不能!ヒィー(((゚Д゚)))ガタガタ');
$cntAndFlag = 0;
close LOCK;
last;
}
$cntAndFlag++;
}
} elsif ($lockMode == 8) {
unlink($lockFile)||&DispError('','ちゃんと計算されてる、角度とか');
} else {
&DispError('','(´-`).。oO(なんでこんなに説明してるのにここに飛ぶんだろ?');
}
if ($cntAndFlag && $lockMode == 2) {
&DispError('',"オイ、お前等!!ファイルが詰まっています。$lockFile");
}
return;
}
0480名無しさん@お腹いっぱい。
01/11/07 07:14ID:???まず、今までやった事全部的外れだから忘れる -> 全部元に戻す。
eval{flock(SUBW,2);}; -> lockF('SUBW',2);
eval{flock(SUBW,8);}; -> lockF('SUBW',8);
SUBW を囲んでる ' が無いとシボン
0481名無しさん@お腹いっぱい。
01/11/07 07:20ID:???他にも使えるからね、例えば上のWIPだったらlockF('WIP',2);ね
ただし、絶対lockF('〜〜',8); と対にする事
これは消してかまわなくない、かなり適当だからあんまり参考にするな w
がんばってね
0483461
01/11/07 08:04ID:1ns3B3NDopen(WIP,">$file");
lockF('WIP',2);
foreach(@IP){
print WIP "$_\n";
}
lockF('WIP',8);
close(WIP);
0484お〜〜い!!
01/11/07 08:09ID:???その貼り付けた部分を呼び出してるんだよ。
呼び方はそれで良いから、subjectが飛ぶならSUBWでやらないとダメ
エラーメッセージは直しちゃだめ! ^^
0485461
01/11/07 09:02ID:1ns3B3NDSUBWの部分だけ書き換えて、やってみたけど
またしても憎き500エラーが出てしまった、何でだろ
0486474
01/11/07 17:33ID:cvRZ74aw>重複投票は,多分直前のアクセスしか記録してないため。
そのようです。
0487デフォルトの名無しさん
01/11/07 17:45ID:???ここに来る前の状態にしてbbs.cgiの一番下にペーストするんだよ。ちゃんと最後の
}までだよ。その後動作確認、動かなければ貼り方がおかしいよ。
それで、動いたら今度は上に書いてたCALL部分を書きかえてみて、lockF('SUBW',〜); とかにね。
家のPCのは動いてたから大丈夫だよ、今見れないけど。。
0488461
01/11/08 00:50ID:y3o9Bsijワーイ 指示どうり一番下に貼りつけたら、動きました
良い感じなんですけど、今日も微妙に飛びました
なんか後少しの予感。
0489>461
01/11/08 01:45ID:???my $lockDir = '../'.$FORM{'bbs'}.'/'.$_[0].'_LOCK';
my $lockMode = $_[1];
my $cntAndFlag = 0;
if ($lockMode == 2) {
while ($cntAndFlag < 5) {
if (mkdir($lockDir,0777)){
$cntAndFlag = 0;
last;
} else {
sleep (1);
}
$cntAndFlag++;
}
} elsif ($lockMode == 8) {
rmdir($lockDir)||&DispError('','ちゃんと計算されてる、角度とか');
} else {
&DispError('','(´-`).。oO(なんでこんなに説明してるのにここに飛ぶんだろ?');
}
if ($cntAndFlag && $lockMode == 2) {
&DispError('',"オイ、お前等!!ロックディレクトリが詰まっています。$lockDir");
}
return;
}
0490>461
01/11/08 01:50ID:???上のやつと差し替えてみて。呼び方は同じだからそのままで良いよ
眠いから一回しかテストしてないけど多分大丈夫 w
// しかし、いくらアトミックじゃないって言っても1ステップで
// そうそう割り込まれるもんじゃ無いけどな・・・
// 本家並にアクセスあんの??
0491名無しさん@お腹いっぱい。
01/11/08 20:09ID:???恐らく、スクリプト1の改造方法で会っているけど、
チャットウインドウでの「おみくじ」発言に「<b>おみくじ<b/>」みたいな形で
chat.cgiに入っているから駄目なのだと思います。
初心者で申し訳ないです・・何卒、宜しくお願いします。
設置場所 http://cgi.office.interq.or.jp/virgo/izumino/cgi-bin/yunichat/lobby/sun/
CGIスクリプト1(恐らく間違った改造をしたもの) http://www.yuniqlo.com/chat_cgi.txt
CGIスクリプト2(未改造) http://www.yuniqlo.com/chat.cgi_2.txt
0492491
01/11/08 23:38ID:D/5tN8xA0493名無しさん@お腹いっぱい。
01/11/09 01:55ID:???技術無いんだけど、ちょっとやってみた。
CGIスクリプト1(恐らく間違った改造をしたもの)の168行目に
$value = "$name\t$color\t…略 ってのがあるから、その下に追加。
#####おみくじ 2/2#####
if ($chat2 eq 'おみくじ') { # $emoji追加時の半角スペース2つ
$kuji_file = './kuji.dat';#おみくじファイル
open R, "$kuji_file" or &ended("$kuji_file open error");
rand($.) < 1 and chomp($msg = $_) while <R>;
close R;
$value = "巫女たん\thotpink\t\t$msg>$nameたん $emoji\t\t$date\tyuichat.com\t\t\t\t\n$value";
}
#####おみくじ 2/2ここまで#####
今までの、おみくじ 2/2は削除。不具合でたら自分で解決して。
0494461
01/11/09 03:05ID:xPL7a9xwプログラムがぽんぽん書けるなんて凄いです
差し替えて、様子を見てみました 半分ほど飛んでました
ユーザー権限で動作するサーバーだからかな??
if (mkdir($lockDir,0777))→if (mkdir($lockDir,0705))
かな?
>// 本家並にアクセスあんの??
とりあえず、リロードすれば何処か書き込まれています
テレホタイムには、そこらへんでチャット状態;;
0495初心者
01/11/09 13:34ID:???stlfbbsはここにあります。
www.blk.mmtr.or.jp/~stlf/softwares/
0496491
01/11/09 18:27ID:7iXE60XRそのように改変し、以下の場所に全部アップロードしたのですが・・・
どうもダメみたいです。本当に申し訳ないです・・・
私自身改造出来れば良いのですが、現在勉強中です。
他力本願で、本当に申し訳ないですが・・・どなたか、よろしくお願いします・・・。
設置場所 http://cgi.office.interq.or.jp/virgo/izumino/cgi-bin/yunichat/lobby/sun/
CGIスクリプト1(多分間違った改造をしたもの) http://www.yuniqlo.com/chat_cgi.txt
CGIスクリプト2(未改造) http://www.yuniqlo.com/chat.cgi_2.txt
0497>>461
01/11/09 19:36ID:???bbs.cgiの789行目付近をこんな感じにしてみて。
open(SUBW,">$subject");
eval{flock(SUBW,2);};
#一括書き込み
↓
open(SUBW,"+<$subject");
lockF('SUBW',2);
seek SUBW,0,0; # この行と
truncate SUBW,0;# この行が増えた
#一括書き込み
※ 因みに少し下でSUBWがまた出てくるけど、これはimode用の
indexだからね、これは関係無い。
>if (mkdir($lockDir,0777))→if (mkdir($lockDir,0705))
ユーザ権限で動くなら何でも良いよ、ダミーだからね。
もしロックディレクトリが残った時は
板のindex2と同じディレクトリに 〜〜_LOCK みたいなお化け
が残ってる筈だから、それを消せばOK。(・∀・)
// subbbs.cgiって謎の実行ファイルは何だろう??
0498名無しさん@お腹いっぱい。
01/11/09 20:40ID:???貼り付けてる場所が違うよ。
$value = "$name\t$color\t$email\t$chat\t\t$date\t$host\t\t\t\t\n";
の下です…。
0499461
01/11/10 00:20ID:tDSKehxji-mode利用者がかなり居る場合 i-modeにも貼った方がイイ?
0500
01/11/10 00:24ID:snsG9aFx●★☆●別れさせ屋●☆★●
=その他のトラブル、諸々解決します!!=
http://www.blacklist.jp
(全角を半角に直して下さい)
女性スタッフ募集中!急募!高額支給!!
0501>461
01/11/10 02:56ID:???>i-mode利用者がかなり居る場合・・・・
うん、もし飛ぶならね、つーか使い方を説明するね。
open (〜〜,">〜〜"); って言うので > とか >> とか < とか 何にも無しとか有るでしょ?
その中でヤバイのは > だけ(書き込みモード)だから、まずそれを探す。
逆に、< とか何にも無い所で使っても、処理が増えるだけで意味が無い、っと。
例えば 821行目辺りなら・・・
open(SUBW,">$imodeindex");
eval{flock(SUBW,2);};
# 一括書き込み
を・・・
open(SUBW,"+<$imodeindex"); # > が +< に変わる
lockF('SUBW',2); lockF を呼び出す、呼んだら必ずcloseの時にlockF ('〜〜',8);する事
seek SUBW,0,0; # これと・・
truncate SUBW,0; # これを加える
# 一括書き込み
こんな感じ、5箇所位あるのかな、でも実際の所htmlはアクセス多ければ適当で良い
つのも有る(2chでhtmlが飛んでるの見た事有るかい?)
つー事でこのやり方だとsubjectが一番弱いんすよ、2ch同様。
# そろそろ仕事がテンパって来たんでもう見れないかも (´д`;)
0502461
01/11/10 08:13ID:tDSKehxj今日も飛んでました、動作が遅くなったような気がしますが
ロックが効いてる証拠? 色々ありがとうでした。
(´-`).。oO(何でこんなに飛ぶんだろ、やっぱ鯖が腐ってるのかな〜
0503名無しさん@お腹いっぱい。
01/11/10 14:34ID:???0504491
01/11/11 07:28ID:Z/2ZVokB本当にありがとうございました・・
0505491
01/11/11 07:32ID:Z/2ZVokBhttp://www.umicha.com/cgi/chat/ysan100.lzh(ウイルスなんかじゃないです。
詳細としては、私の使用しているサーバーが「exec」コマンドを使用できなくしている為です。
SSI等々、他のは使用できるのですが・・・
execコマンドに代用されるようなコマンド、又は改造方法等ありましたら教えてください。
他力本願で申し訳ございませんが・・よろしくお願いします・・・
0506名無しさん@お腹いっぱい。
01/11/11 09:50ID:???普通はフレームを使うか,sanka.cgiにして全部printするか,だね。
下はフレーム使った時の呼び出し側。
sanka.plでcontent-typeをprintしないと,たぶんエラーになる。
-- sanka.html
<IFRAME src="sanka.pl" width="280" height="120" scrolling="auto" frameborder="1">
知るかゴルア!
</IFRAME>
0507初心者
01/11/11 14:25ID:JG2AiF5bあるページで1つヒットすると、
それでそのページの検索は終わってしまいます。
そのページのワード全部を検索させるには
どうしたらいいんでしょうか。
foreach $pair (@pairs) {
# ワード検索
$flag=0;
foreach (@data) {
# HTMLのタイトルを記憶
if ($_ =~ /<title>(.*)<\/title>/i) {
$title = $1;
}
# タグを無効化
$_ =~ s/<[^>]*(>|$)//g;
if (index($_,$pair) >= 0) {
$flag=1;
$msg = $_;
}
}
# タイトル名が取得できなかった場合
if ($title eq "") { $title = "無題"; }
if (!$flag) { last; }
}
if ($flag) {
# 検索結果を表示
$hit++;
print "<LI><a href=\"$path\"><b>$title</b></a>\n";
print "<DL><DT>$msg</DL><br><br>\n";
0508名無しさん@お腹いっぱい。
01/11/11 15:52ID:???この行を削れ。
0509初心者
01/11/12 13:48ID:50PufLyA遅いレスですみません。
めっちゃ簡単ですね。
やってみます。
ありがとうございました。
0510初心者
01/11/12 15:02ID:PES/SXwW初心者のアタマで考えたのですが、
ヒットした箇所からあとを、
新たなデータとして再度読むような処理が必要なんでしょうか?
0511名無しさん@お腹いっぱい。
01/11/12 22:37ID:???$flag=0;
を削るか,
foreach $pair (@pairs) {
の前行にもってくるかするとどう?
0512初心者
01/11/14 12:23ID:G5Oc4uFIあと、indexってので検索してるので、
大文字小文字の両方に対応しません。
これって、なんとかならないのでしょうか。
0513名無しさん@お腹いっぱい。
01/11/14 12:28ID:???とりあえずこれで大文字小文字関係なく検索出来るはず。
index(lc($str), lc($word));
0514アップローダーの項目
01/11/14 14:45ID:GCYrvbVthttp://zurubon.strange-x.com/uploader/
のずるぼんあぷろだ
http://zurubon.strange-x.com/upload.txt(ソース)
なのですが、いくつか項目(テキスト)の追加をしたいのですが、
どこをどういじっていいのか、さっぱりわかりません。
http://www33.tok2.com/home/art/remix/upload.cgi
↑が稼動中のものです。
これに、投稿者の名前、曲のテンポ、曲のキーを
投稿できるようにしたいのです。
HTMLはわかりますが、ログ保存部分と読み出し表示部分の改造の、
両方がわかりません。
よろしければ、お願いいたします。
お時間がなければヒントだけでもいただければ、嬉しいです。
0515名無しさん@お腹いっぱい。
01/11/14 18:59ID:???取り合えずマルチパートだから、
HTMLが<textarea name=comment....><type=text name=musictempo size..><type=text name=musickey size..>
だとして、750行目辺りの $comment = &post_decode; の下辺りに
$musictempo = &post_decode;
$musickey = &post_decode;
って書けば値が入るから、後は煮るなり焼くなりして下さい
って感じじゃ駄目?
0516514
01/11/14 20:32ID:GCYrvbVtありがとうございます。
まだ設置していませんが、
教えていただいた通りにして、
あとは、コメント欄と同じような感じにしてできました。
適切なアドバイスに感謝します。
0517初心者
01/11/15 12:28ID:pHkP4Sthありがとうございます。
if (index(lc($_), lc($pair)) >= 0) {
$flag=1;
$msg = $_;
にしてみました。
ただ、もうひとつ問題点がありました。
検索結果のところで $msg を表示するようになっています。
日本語ページの場合は、短文が表示されるのですが、
英文ページの場合、なぜかページの全文が表示されてしまいます。
(むっちゃ長いので使いもんにならん。これはKENTさんの元のやつでもそうなる)
初心者のアタマで考えると、
なんで日本語の場合、短文表示されるのかも不思議なんですが・・・。
0518名無しさん@お腹いっぱい。
01/11/15 13:16ID:???subject読み込みの段階からロックしないと、
書き込んでる最中に次のプロセスが読み出そうとしたとき飛ぶ。
それかrenameを使うか。
0519名無しさん@お腹いっぱい。
01/11/15 23:35ID:???0520名無しさん@お腹いっぱい。
01/11/16 00:09ID:???なんか間違ったこと言ってる?
http://www2.kiwi-us.com/~j_n/perl/flock.html#01
0521!=519
01/11/16 15:55ID:???だったら読み込みなんてロックしなくても飛ぶ訳ないじゃん
renameってのも謎だし・・・
0522!=519
01/11/16 15:56ID:???スピードとのトレードオフでしょ?
0523名無しさん@お腹いっぱい。
01/11/16 18:07ID:???↓
プロセスAがsubjectをtruncate(サイズ0バイトになる)
↓
プロセスBがsubjectを読み込みopen
↓
プロセスBがsubjectから読み込み(0バイト)
↓
プロセスAがsubjectの更新終了
↓
プロセスBがsubjectを更新(0バイトになる)
↓
(+д+)マズー
なんか間違ってる? つーか>>520のリンク先見てもここまで
説明しないと分からない馬鹿ぞろい?
rename使ったやり方はtako時代のperl板のどっかにあったから探して。
0524名無しさん@お腹いっぱい。
01/11/17 01:38ID:???0525名無しさん@お腹いっぱい。
01/11/17 04:21ID:???>subject読み込みの段階からロックしないと、
これに対して発言したんですが?
あなたのOSはroでファイル開けても0バイトになるんですか?
いや、私の勉強不足かも知れませんが (笑
書き込みにロックしなくて何処にロックするんでしょう??
symlinkでもmkdirでもrenameでもAtmicなシステムコールなら
問題無いと思いますが?
つーか上の方のレス読まずに血管ピクピクさせて書いてそうですねあなた。
発言する前に話の流れを理解しましょ
0526名無しさん@お腹いっぱい。
01/11/17 04:29ID:???昨日Perlメモ読んで誰かに教えたかったんだね、うんうん解るよ
そうかロックすればいいのか凄いね、ダブルファイルだねシパカウンタだね
ゴメン、消えるわそう言うのはちょっと勘弁。
0527521
01/11/17 10:03ID:sdhFUdA2えっとどうでも良いんだけど、523は>>501には当てはまらないよ
どこで0バイトになるのか得意のフローチャートで良く考えてみよう。
それとリンク貼るのは良いけど、こんな簡単なこと位自分で考えて
書いて欲しいと思った
0528名無しさん@お腹いっぱい。
01/11/17 14:38ID:???http://pc.2ch.net/pcqa/
0529名無しさん@お腹いっぱい。
01/11/17 15:43ID:IaCs23FH先日質問スレで書いたのですがこちらの方が適してると思ったので
質問させていただいてもよろしいでしょうか。
KENT WEBのpetit boardを使っています。
プルダウンで地域名、年齢の設定項目を追加しました。
ところが、地域名の方は問題ないのですが、年齢の方が
クッキーがずれるというか・・・
例えば、20才を選んで投稿すると次回からは選ばなくても
20才を選んだ状態のになってるはずなんですが、
投稿後、プルダウンメニューは未設定に戻っているんです。
そのまま今度は22才で投稿すると、投稿後の画面では
プルダウンメニューは20才を選んだ状態になっています。ずれてますよね。
ここでリロードすると、22才を選んだ状態になってくれるんですが。
一応、ちゃんと投稿内容にはその時の設定内容がちゃんと反映されてるし
項目も年齢なので毎回変えて投稿するようなものでもないのですが
やっぱり気になります。
その部分のソースはこんな感じです。
0530529
01/11/17 15:43ID:IaCs23FHEOM
# 居住地の選択フォームを表示
if ($c_area eq "") { $c_area = '0'; }
foreach (0 .. $#areas) {
if ( $c_area eq "$areas[$_]") {
print "<option value=\"$areas[$_]\" selected>$areas[$_]\n";
} else { print "<option value=\"$areas[$_]\">$areas[$_]\n"; }
}
print "</select> \n";
# 年齢の選択フォームを表示
print "<b>Age</b> <select name=nen onFocus=\"this.style.backgroundColor='#000066'\" onBlur=\"this.style.backgroundColor='#000000'\" class=\"form\">";
if ($c_nen eq "") { $c_nen = '0'; }
foreach (0 .. $#nens) {
if ( $c_nen eq "$nens[$_]") {
print "<option value=\"$nens[$_]\" selected>$nens[$_]\n";
} else { print "<option value=\"$nens[$_]\">$nens[$_]\n"; }
}
print <<"EOM";
</select>
0531名無しさん@お腹いっぱい。
01/11/18 01:03ID:???フォームから送られた値(が有る時は)そっちを使えば?
0532名無しさん@お腹いっぱい。
01/11/18 04:18ID:???>ああ〜 ちょっとデンパってる? (・∀・)
真性のヴァカですか?
>>subject読み込みの段階からロックしないと、
>これに対して発言したんですが?
そんなことは分かってますが?
>あなたのOSはroでファイル開けても0バイトになるんですか?
その前にプロセスAがtruncateしてるから0バイトになるんですが?
>書き込みにロックしなくて何処にロックするんでしょう??
書き込みにロックしないなんて誰も言ってませんが?
>symlinkでもmkdirでもrenameでもAtmicなシステムコールなら
>問題無いと思いますが?
いくら書き込みだけをatomicなシステムコールによるロックで囲っても
意味がないと言ってるんですが?
>つーか上の方のレス読まずに血管ピクピクさせて書いてそうですねあなた。
>発言する前に話の流れを理解しましょ
461から全部読んでいますが?
あなたこそ発言する前にレスの内容くらい理解しましょ
0533名無しさん@お腹いっぱい。
01/11/18 04:20ID:???>えっとどうでも良いんだけど、523は>>501には当てはまらないよ
思いっきり当てはまりますが何か?
>発言する前に話の流れを理解しましょ
>どこで0バイトになるのか得意のフローチャートで良く考えてみよう。
あなたが考えてください。
0534529
01/11/19 12:35ID:nGPgUcVjすいません、perlのことなど全然良く分からないんです、
フォームから送られた値を使うって言うのはどういうことなんでしょうか?
0535名無しさん@お腹いっぱい。
01/11/20 01:32ID:???if ($c_nen eq "") { $c_nen = '0'; } ってのを、
if ($c_nen eq "") { $c_nen = $in{'nen'} || '0'; }
に変える。たぶん。
0536白夜 ◆GiKO.QrM
01/11/20 02:31ID:9QBlPYDnトリップを使えるように改造しようとして
# トリップ________________________________________
{
$FORM{'name'} =~s/◆/◇/g;
$FORM{'name'} =~s/★/☆/g;
$FORM{'name'} =~s/削除/"削除"/g;
$FORM{'name'} =~s/sakujyo/"sakujyo"/g;
$FORM{'name'} =~s/管理人/"管理人"/g;
$FORM{'name'} =~s/管直人/"管直人"/g;
$FORM{'name'} =~s/菅直人/"菅直人"/g;
# トリップ
my ($key,$salt);
if($FORM{'name'}=~/#(.+)/){
$key = $1;
$salt = substr($key."H.", 1, 2);
$salt =~ s/[^\.-z]/\./go;
$salt =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
$FLAG{'trip'} = substr(crypt($key, $salt),-8);
}
$FORM{'name'} =~ s/#.*//g;
$FORM{'mail'} =~ s/#.*//g;
if($FLAG{'trip'}){
$FORM{'name'}.=" "if($FORM{'name'});
$FORM{'name'}.="<trip>";
$tripper = 1;
}
$FORM{'name'} =~ s/<trip>/◆<\/b>$FLAG{'trip'}<b>/g;
}
と書いたんですが、
コレだとトリップの値までクッキーされてしまいました。
フォームの値から#以降を取り除けばいいと思うんですが
どうすればいいんでしょうか?お願いします。
0537名無しさん@お腹いっぱい。
01/11/20 03:24ID:???トリップってここの◆cryptedword ってやつだよね
クッキーに書きたいなら先に書けば良いんじゃ無いの?
嫌なら別の変数にいれるとか
0538白夜 ◆GiKO.QrM
01/11/20 03:36ID:???いや、ネームの値に#tripperとか書くとそれが
トリップに変換されて名前のクッキーに
トリップの変換後の値も含まれてしまうんです。
で、変換前の値、もしくは#以降を削った値を
クッキーしたいんです。
0539名無しさん@お腹いっぱい。
01/11/20 06:32ID:???$plaincookiename = $FORM{'name'};
# トリップ________________________________________
.....
クッキーする?所で$plaincookiename を使え
そんなの書けて何で分からんのか
0540名無しさん@お腹いっぱい。
01/11/20 07:12ID:???ごめん。何時でもフォーム優先なら、
if ($c_nen eq "") { $c_nen = '0'; } ってのを、
$c_nen = $in{'nen'} if $in{'nen'};
if ($c_nen eq "") { $c_nen = '0'; }
の二行に変える。($in{'nen'}に入ってれば)
>>538
539の人が言うようにいったん退避させてから#以降を除けば?
$plaincookiename =~ s/(.*)#[^#]+/$1/;
こんな感じ?で。
0541白夜 ◆GiKO.QrM
01/11/20 12:23ID:???あ、そうか。
すみません。勉強中なんで。
ありがとうございます。
0542白夜 ◆GiKO.QrM
01/11/20 14:51ID:???0543529
01/11/20 18:07ID:cdlrBx1Qありがとうございます。しかし、やってみたのですが
やっぱり年齢だけselectedが、1つ前の投稿のに
ずれちゃいます。
実際書いて、見てもらった方が早いかもしれません。
よかったら見てみて下さい。まだ何にも公開してないページですので
自由にテスト投稿していただいて構いません。
http://www.chel-c.f2s.com/cgi-bin/b1/bbs.cgi
0544名無しさん@お腹いっぱい。
01/11/21 02:48ID:???テスト投稿じゃ分かんないよ…。
select name=nen だから勘で答えちゃった。ごめん。
スクリプトをテキストでアップしてリンクを張れば、
もっと沢山の人が見てくれると思うよ。
0545初心者
01/11/21 10:09ID:LhK+uP5Ihttp://www.cs-w.com/~escort/estimation.txt
これを
http://www.nakagawachi.co.jp/cgi-bin/b8.cgi
のようにしたいと思います。
0546名無しさん@お腹いっぱい。
01/11/21 12:20ID:???勝手にしろや
0547名無しさん@お腹いっぱい。
01/11/21 17:15ID:???おいおい、冷たいやつだな。
そんな対応してるから人が居なくなるんだよ。
>>545
そうか、頑張れ!
応援してるからな!
0548名無しさん@お腹いっぱい。
01/11/21 18:14ID:???勝手に応援しろや(w
0549529
01/11/21 18:27ID:tWRTsBfqそうですよね、尋ね方が曖昧ですいません!!
というわけでアップしてみました。
http://www.geocities.co.jp/Stylish/6116/bbs.txt
です。私もよく分からずになるべく変に触わらぬようにはしましたが
むりやり他のスクリプトを組み合わせるように改造したので
とんでもない文法になってるかもしれませんが、ご容赦を・・・
もしよければ見てみてください。
あと、テスト投稿してくれた方がいて気付いたのですが
ホスト名が皆、127.0.0.1(localhost)になるのは
何故なのでしょうか。無知で全く申し訳ないです。
0550名無しさん@お腹いっぱい。
01/11/21 18:56ID:???全部元にもどして
# ログ書き込み処理 #
の一番下に
print "Location: http://www.chel-c.f2s.com/cgi-bin/b1/bbs.cgi\n\n";
って書け、
どうせそのうち、リロードすると二重投稿になって困ってます!!!って言うんだから
0551529
01/11/21 20:20ID:tWRTsBfqBBSのアドバイスありがとうございました。すごいありがたかったのですが
しかし私の理解が追いつかなくて何と答えていいものかわからないだなんて
申し訳なくて穴があったら入りたい勢いです・・・
全部元に戻すというのは、>>540のレスなどを参考に書き直した箇所を
元に戻せばいいんでしょうか?
リロードは、二重投稿になっちゃうので「READ ME→掲示板に戻る」とかで
やってるので大丈夫です(見当違いなレスでこれまた申し訳ないっす・・・)
0552名無しさん@お腹いっぱい。
01/11/22 01:06ID:???ソース見たよ。%inじゃなくて%FORMだったんだね。
いやあ申し訳ない。で、手直し。
348行目に入れた、
$c_nen = $in{'nen'} if $in{'nen'};
を削除。これで元通りになるよね。
次に1466行目の
if ($FORM{'nen '}) { $c_nen = $FORM{'nen'}; }
これを↓こう変える。
if ($FORM{'nen'}) { $c_nen = $FORM{'nen'}; }
違いは$FORM{'nen'}に半角スペースが入っているかどうか。
これで望み通りになるよ。
0553461
01/11/23 16:21ID:nRlQ0X++飛ばなくなったぞーーーーーー!! これまで溜まっていた便が大放出!!
すっきりした 感動した!
0554名無しさん@お腹いっぱい。
01/11/23 16:26ID:tdhsiUBdなんだか幽霊みたいなスレなんでこっちで聞かせて下さい。
ttp://www.alived.com/blue/
このサイトのTOPページにある簡易投票cgiとほぼ同様のものが欲しいです。
このサイトで使われているcgiを拝借してスクリプトを覗いたところ
著作権表示など無かったのでここの管理人さん独自に作成したものだと思います。
パクるのは良くないのでこれと同じものがフリーで配布していればいいのですが。
仕様の条件は、上記のサイトのようにhtmlの中の一部に表示できて
cgiを飛ばしても今のhtmlページは再読み込みしない。
自分でも今探しています。御願いします。
0555461
01/11/24 20:38ID:NBml5+Ldあるんですけど、削除スクリプトも例のあれをコピペして書き換えないと駄目?
よくわからんです。
0556501
01/11/25 03:41ID:???つーか久しぶりに来たらえらい騒ぎになってる(汗;
ゴメンねー、結構大きいファイルと思ったからまさかオンメモリにしてるとは
思わなかったよ(;´ω`) 慣れない事するもんじゃ無いね、反省してます。
ちゅう事で518氏は正しいので、反論されてる方は確認されたし
スレッドが消えるのは困ったねー、また話に乗ろうか?(笑
0557461
01/11/25 23:17ID:9En76V3nあれ以来飛ばなくなって、すっきりしてたんですけど
複数スレッド削除したり移動したりすると、datファイルが
サーバー上からほとんど消えて、スレッド一覧には同じ個所に複数リンク
する状態になります
seek SUBW,0,0;
truncate SUBW,0;
これは、ない方が良いのかな?無い方が調子良いような・・・・
それともサーバーが中途半端に、バグってるのかな?
0558名無しさん@お腹いっぱい。
01/11/27 14:28ID:???普通のチャットにぼっとを入れたいのですが
ttp://www.ct.sakura.ne.jp/~e_e/yuichat/yui.shtml
ttp://dream.lib.net/room/cgi/e_lchat.html
Light chat にゆいぼっとを組み込みこもうとしたんですが
皆目見当がつきません。
識者の皆様私はどうしたらいいでしょうか
よろしくお願いいたします
0559名無しさん@お腹いっぱい。
01/11/28 18:00ID:3zC+SFDuというのは、お絵かき掲示板で絵にタイトルをつけたいんですが
なかなかうまくいく方法が見つかりません。
■ このスレッドは過去ログ倉庫に格納されています