トップページ⇒php
982コメント439KB

【 スクリプト改造工房 PART 7 】

■ このスレッドは過去ログ倉庫に格納されています
0001sage03/09/17 15:28ID:ZcvVdw5C
 
#================================
# スレッドの説明
#================================

「スクリプトを改造したいけどやりかたわかんないよー」という人がいましたら
ここで聞いてください。ひょっとしたらアドバイス出来るかもしれません。

質問するときは以下の点に注意して書いて下さい

(1) そのスクリプトの内容と置いてある場所を明記する (txtファイルでUPすればなお良い)
(2) どんな風に改造して欲しいのか? (完成イメージHTMLを用意すればなお良し)
(3) 出来るだけ詳しく書くこと。少しは自分で考えること。できれば御礼も言ったほうが良い

※答えてくれないからといって逆ギレする厨はお断り

過去ログ>>2
073072304/01/25 23:59ID:???
HELP
0731nobodyさん04/01/26 00:09ID:???
>>730
ああだりい。
どう言う仕様かもっとはっきりさせろ。
スレッドを10日に一度しか作れないのか、
それとも、10日たつと一番古いスレッドが落ちて新しいスレッドが立てられるようになるのか。

ま、そんな程度のこと、一番古いスレッドと、最後にスレッドが立った日時をどっかに保存しておけば、
何ほどもなくできることだから、みんなだるくて答えてないんだよ。
「掛け算九九のやり方教えてください」なんて言われてもだるいだけだよ。
0732nobodyさん04/01/26 00:18ID:???
>>730
なんで配布先のサポート板で聞かないの?
0733nobodyさん04/01/26 00:36ID:???
ああ、掲示板全体のスレッドが10日に最大1個しか増えないってことなのか。
オレはてっきり一人の人に対して10日たたないと別スレを建てられないって話かと思ってた。
あいまいな仕様ってのは怖いよなぁ
0734nobodyさん04/01/26 06:38ID:???
苦労して答えても「ちょっとやりたいことと違うんです」ってさらっと言われたらかなわんからなぁ。
0735nobodyさん04/01/26 06:43ID:???
>>734
その前に仕様の穴に気付くべきですよ。SEごっこもいいですがやるからにはちゃんとやらんと。
0736nobodyさん04/01/26 09:53ID:???
>>732
えらい。それが一番正しい。
0737nobodyさん04/01/26 10:51ID:???
joyful noteで、アップした画像をクリックしたらホームページに飛ぶように
改造するのは難しいでしょうか。

下の掲示板みたいな感じです。
http://www.fuchu.or.jp/~kagu/joyful/joyful.cgi
0738nobodyさん04/01/26 11:06ID:???
>>737
HTMLの問題だろ?
それに、そんな風に改造している奴がいるんなら、そいつに聞くのが一番早いだろ。
0739nobodyさん04/01/26 12:18ID:???
>>735
穴のない仕様書を提示するのが先。
面倒なことは下の立場(質問者)が負うべき。
074073004/01/26 16:06ID:???
>>731
スレ立てたら立てた人はそれから10日間立てられないようにキボンヌ

>>732
サポートが悪いです

>>735
肛門デスカ?
0741nobodyさん04/01/26 16:14ID:???
>>740
自分でいじれもしないやつがそんなサポートが悪いものを使って
改造したいと言うのが一番悪い
074274004/01/26 16:58ID:???
サポート悪いかもしれんが良品
074370604/01/26 17:15ID:???
特定の文字が、改行された複数行にあるときにそれをカウントするには
どうすればいいですか?
count($id)にするとその列でしか数えてくれないので1としかでませんでした。
0744nobodyさん04/01/26 21:48ID:KP+mPnoD
スレ違いだったらすいません。

apeboard+を使ってます。
掲示板に書き込んで、そのページのソースを見ると、

<!--res-->

とあるんですが、それを出ないようにできませんか?
ちなみにcgi本体もスキンも弄ってません。
0745nobodyさん04/01/26 22:11ID:???
>>744
あのさぁ、必要もなくてそうなってると思う?
出なくしてどうなってもいいんだね?
0746nobodyさん04/01/26 22:41ID:???
>745の言う通り、伊達や酔狂で表示してるわけではなさそうだな。
どうも、レス表示部のスキン関係の処理に使用してる様子。
print文で書き出す直前にいじればいけると思うけど、恐らく現状でかなり重いであろう処理がさらに重くなる。

というか、個人的にはコメント文を消す意義が見つからない。
わざわざ2chで質問して、他人の手を煩わせてまで消す理由は?
0747nobodyさん04/01/26 22:44ID:???
>>746
imgboardのソースのコメントは消したくなるがな……。
0748nobodyさん04/01/27 00:03ID:???
>>747
気持ちは分からなくもないけど、
あれを使ってる時点でおかしい。
自分で作ったら2〜30KB程度で済むものを。
0749nobodyさん04/01/27 00:34ID:???
>>706
count()って、普通配列の要素数数えるものだぞ。
配列以外に使ってもいいが、その場合は1しか返さん(NULLを除く)。
文字列を数えるときはsubstr_count()。
0750nobodyさん04/01/27 01:18ID:???
このスレ見てると、diffの使い方教えてあげたくなってくる。
075170604/01/27 01:22ID:+V74HcR4
>>749さん 返事ありがとう。

始めいろいろ調べてるうちにそれを試してみたんですがエラーが返ってきました。

Warning: Wrong parameter count for substr_count() in /virtual/goa/public_html/j.php on line 86

下のように書いたんですけど使い方間違ってますか?

$ct = substr_count($id);
if($data[0]==$id) $rescom = "<br>>> <a href=\"$path/chtml.php?res=$id&page=$page\">返信あり</a>($ct)";
075270604/01/27 01:25ID:???
あれ・・
<br>以降は&gt;&gt;です
0753nobodyさん04/01/27 01:35ID:???
>>751
うるせえだまれエラーメッセージの内容くらい自分で調べろ。
>Wrong parameter count for substr_count()
「substr_count()に与えたcountが、悪い(正しくない)パラメータだ」
なんだから、substr_count()に何を与えればいいのか見直せよ、馬鹿。
0754nobodyさん04/01/27 01:38ID:???
>>742
・おまえにとって良品が他の全員に対して良品だとは限らない。
・改造したいと思った時点で、そいつにとってそれは最良の品ではない。
・サポートが悪いのは誰のせいだろうか。もしかしたら、糞つまらない質問だったらサポートも悪くなるかも。
・自分でいじれるようになろうとしないやつは成長できない屑。よって教える価値なし。
0755saeko☆04/01/27 03:35ID:???
もっと書込み隊にアイコン登録とランダムカラー付け足したいんですがどうすればよいでしょうか?
0756nobodyさん04/01/27 04:19ID:???
>>755
出せる金額とメールアドレスを晒してひたすら待つ。
0757nobodyさん04/01/27 04:33ID:???
>>751
「substr_count()のパラメータの数(count)が正しくない」

>>755
有名&ガイシュツなのかも知れんが、リンクぐらい書いてくれ。一行ですむのだし。

アイコン登録は、画像をアップロードし、メインスクリプト(mkakikomitai.cgi)を書き換えればよい。
$icon_gif[X] = ...
$icon_gif_w[X] = ...
に追加するだけ。
あと、画像をアップするには、enctypeが変わるので、
フォームデータを受け取る部分(sub decode)も修正。

ただ、スクリプト自身に書き込み権限が必要なので、suExecのない共用サーバでは危険。
設定を外部ファイルに持たせればよいが、それが出来れば、こんなところで質問しないか。

ランダムカラーは、どの時点でランダムなのか分からんが、
$FORM{'color(_f)'}か$color(_f)をランダムに変えるだけだろう。
075875704/01/27 04:54ID:???
ある意味756は正しい。
もし仕事なら、2,3万は要求する。
(かつてカウンター1個10万で受注した。
 バイトだったので、大半は会社にもってかれたが。)
0759nobodyさん04/01/27 05:03ID:???
ここも質問用のテンプレを用意するべきかもなぁ
076070604/01/27 08:13ID:8T/PgOL1
fgetsは参照したlogの1行だけ読むってことが分かったんですけど、
これだとlogに書き込まれた全$idはカウントできないですよね。
しかも文字配列が"<>"でexplodeされてるし。

log全体を参照するには file_get_contents か file を使うのかと試してみたんですが
エラーどころかしばらく"ページが表示できません"状態になりました…。

log全体を参照させるのはどうすればいいですか?

$path=dirname("http://".$SERVER_NAME.$PHP_SELF);
$fd2=fopen($res,"r");
while (!feof($fd2)) {<br>
$buffer =fgets($fd2 , 4096);
$data = explode("<>", $buffer);
$ct = substr_count($data[0] , "$id");
if($data[0]==$id) $rescom = "<br>>> <a href=\"$path/chtml.php?res=$id&page=$page\">返信あり</a>($ct)";
}
fclose($fd2);
0761nobodyさん04/01/27 09:27ID:ChIQ2Q6b
Perlだったら while(<FH>) みたいな制御に入れるよな。
あ、PHPか・・・勘違いスマソ
0762nobodyさん04/01/27 15:27ID:???
手元にPHPの処理系を用意してしまった方がいいかもな。
素直に掲示板のログオープン処理を参考にしたら?
0763nobodyさん04/01/27 16:19ID:???
>>706
よく読んでみると、$idには何が入っているのだ?

logがあまり大きくないなら、
$path = dirname("http://".$SERVER_NAME.$PHP_SELF);
$log = file_get_contents($res);
$fd2 = fopen($res, "r");
while (!feof($fd2)) {
 $buffer = fgets($fd2, 4096);
 $data = explode("<>", $buffer);
 if($data[0]==$id) {
  $ct = preg_match_all("/^$id<>/m", $log) - 1;
  $rescom = "<br>&gt;&gt; <a href=\"$path/chtml.php?res=$id&page=$page\">返信あり</a>($ct)";
 }
}
fclose($fd2);
で良いかな。

それより、レス数をlogに書き込んでおくのが良いかと思われる。
0764燦獄詩藍金山椅渉夫04/01/27 16:54ID:???
0765nobodyさん04/01/27 22:13ID:???
http://tsuwa.s41.xrea.com/script.html
あんまし人来てないが、、
0766?&&fr&ur&&siranasr&&a&nr04/01/27 22:19ID:???
a
076770604/01/28 00:36ID:???
>>763さん ありがとうございます!

さっそく>>763さんの試してみたんですがParse error : line 111がでたんですけど、
111はlineの一番最後で </body></html>で終わってるんですよね。
試しにタグを削ってみたら今度はline 110にParse errorがでました。
line 110は ?> です。
処理が終わってないってことですか?
あとlogにレス数を書き込むっていうのは各レスに連番を振ればいいんですか?

$idには親記事の投稿番号が入ってます。
その親記事にレスした子記事のlogの頭に親の番号が付く形です。
下のように記録されてます。

↓$id<>time<>$name<>$comment<>$ua<>$ip<>$_SERVER['HTTP_USER_AGENT']の順
1<>1074872857<>てすと<>てすと<>pc<>211.6.49.226<>Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; (R1 1.3))
076876304/01/28 00:59ID:???
>>706
なるほど、メインの書き込みと、レスが違うファイルに保存されているのね。
それなら、$ct = preg_match_all(……) のあとの"-1"はいらない。

それから、そのParse errorは、括弧かダブルクウォートの対応が間違っている可能性が高い。

もしレス数を登録するとしたら、メインのログに書き込むべし。
076970604/01/28 01:51ID:VL5E7sRe
>>763さん ごめんなさい、1箇所 } で閉じるの忘れてました…

Parse errorは直りました。
Warning : preg_match_all() expects at least 3 parameters, 2 given in ***** line 88で
一つパラメーターが足りないってことだと思うんですけど、
array matchesはどのように書けばいいですか?

何回もすみません。
077070604/01/28 02:23ID:???
>>763さん 出来ました!!
array matchesは $ct でいいんですね。

http://goa.k1.xrea.com/j.php

いやぁ、ほんと助かりました。
これをきっかけに自分で掲示板組めるよにphp勉強してみようかなぁ。

何も知らない自分にここまで付き合って下さってほんとありがとうございますm(_ _)m
077176304/01/28 03:30ID:???
>>706
すまん。preg_match_allは引数3つ必要だった。
3つ目は使わないので何でも良いが、$ctだと紛らわしいので、別の方が良い。
0772nobodyさん04/01/30 20:48ID:O0NkkeT3
はじめまして
snow*materiaのtwin.cgiというアイコンチャットを
設置してちょびちょび改造しているのですが、
このチャットに「魔法の呪文」という設定があって
その中に「予備ログを全部時刻昇順で表示」というものがあり、
ログをアイコン、背景、タグ効果などが反映された状態で上から読めるように表示されます。
これをHTMLとして書き出したいのですが、それは可能でしょうか?
また可能な場合どういった改造を行えば宜しいでしょうか

あと入室中にアイコンを代えるセレクトボックスを追加したいのですが、
デフォルトで「一定の条件下で可能」に作られているのですがこれを情動的にしたいのです。

一応サイトにサポートBBSがあったので質問したら10日まっても一つのレスも付きませんでしたので
削除してこっちに描いてみたり。

どなたかお教えくださいませ。
ttp://useyan.pupu.jp/s/cgis/twin.html
0773nobodyさん04/01/30 23:12ID:???
>>772
HTMLとして書き出すっていう意味がよくわからない。
表示順を常時上下逆にしたいのか?
0774nobodyさん04/01/30 23:53ID:O0NkkeT3
いえ、その「魔法の呪文」入力で「表示を時刻の若い順から」で全て下のフレームに
表示されるのですが、それをそのままHTMLとして保存したいのです。
CGIなのでそのまま「名前を付けて保存」などでは保存できませんでした。
ミーティングや歓談などのログとして参加者に配布できればと思いまして。
077577204/01/30 23:54ID:O0NkkeT3
>>774
の発言は
>>773 さんへの返答です。
0776nobodyさん04/01/31 00:10ID:???
うわ、CGIにHTML書き出し機能追加しようとしてた俺が阿呆みたいだ('A`)
IEならログ表示部で右クリックしてソースを表示、そのソースを保存。
あるいはIEなんて糞ブラウザを捨て、OperaやMozillaを使えばログ表示部のフレームを右クリックから直接保存できる。
で、保存後に拡張子をhtmlに変えてアップロード。
iniの$icondirが絶対パスなら何処においても何の問題も無いはず。


情動的ってのが「常にアイコンを選択できるようにする」って意味なら、すべき事は以下のとおり。
投稿用フォームにアイコン選択欄を追加。455行目のhiddenをチェックボックスに書き換え。
次にアイコン=状態($cond)を決めてる1070行目あたり。書き換え方は自動アイコン変更処理をどうしたいかによる。
いらんなら1072-1091行目をバサッと削除orコメント化。
残しておけば自動処理がユーザの選択に優越する。逆をしたい場合は知らん。
077777604/01/31 00:13ID:???
>776
すまん動揺した。後半、チェックボックスなわけないな_| ̄|○
ドロップダウンメニューかラジオボタンか。
077877604/01/31 00:25ID:???
…ごめん、全然嘘だ。776後半全部と777忘れてくれ。
USBケーブルで吊って来る∧||∧
0779nobodyさん04/01/31 00:26ID:???
>>774
$writehtm = 1; # 1:HTMLに書き出して表示, 0;全部CGIで実行.

1ならtwin.htmに希望と上下は逆だけど常時書き込まれるが
どうしても逆がいいのか?
0780nobodyさん04/01/31 00:37ID:???
>778
い�`。チャットのスクリプトなんて見通しの悪いもんだ。

twin.plの149行目が「一定の条件下」の判断場所。
丸ごと削除すればtwin.cgiの頭のほうの設定だけに従うはず。
他に影響する事は無い                    と思う。
078177404/01/31 00:42ID:???
えぇと776さんの方法なのですが、拡張子がCGIまでなので、「呪文を入力した状態」での表示がよくわかりません
そしてcgiのソースが表示されてしまいログは表示されません。
ちなみにノンフレーム状態で「過去ログ表示の魔法」を入力したところ
エラーになってしまいました。(配布元のオリジナル設置でもなったので恐らく不可)

>>779 さん
設置しているスペースが弱い鯖なのでさいしょから設定は1にでHTMLに書き出しているのですが
それですと「表示可能数」の行数しか表示されません。
ので簡単な話ならそれでも可能なのですが数時間、10人近くとかの膨大なログをまさか全部表示にしているわけにも行きませんし。
ログファイルを除いてみたところ、どうもログへの書き出しはそのまま時刻昇順で書き込まれておりましたので
それならログを直接CGI部の画像アドレスなどを参照して直接HTMLで出力などはできないのかなぁ、と思いまして。
078277404/01/31 00:55ID:???
>>778さん
なりました!有難う御座います。
これは今の段階ですとアイコンの選択ではなく直接適すとボックスに画像名を入力する形になっておりますが。
セレクトボックスにした場合、内容の読込先はどうしたらよいのでしょうか?

また、名前「管理人」で入ると専用アイコン等、特定の名前の際には強制的にそのアイコンと文字色に変わる、という機能が
この場合入室後に変更で書き直すと変化しません。
これは機能可能でしょうか?
0783nobodyさん04/01/31 02:20ID:???
質問させていただきます。
先日Arseno ver2.1.4を使って辞書を作り、とりあえず一通りの設置はうまくいきました。
で、以前、投稿された内容が上昇していくのではなく、下降していく様に変更されている辞書を見かけたことがあり、
できればそういう設定にしたいと思っているのですが、どこをどう変更したらいいのでしょうか?
readmeどおりに設置する程度の知識しかないため、スクリプトのどの部分を抜粋して書き込めばいいかも分かりません。
申し訳ありません。
0784nobodyさん04/01/31 02:35ID:???
>>1ぐらい読んでください。
0785nobodyさん04/01/31 02:57ID:???
>>783そのArseno ver2.1.4のソースのありかぐらい教えてくれ……
0786nobodyさん04/01/31 03:22ID:???
>>785
失礼しました。辞書といえば大抵これなので有名なものかと思ってしまいました。
現在、制作者さんのHPが閉鎖されてしまっているため、下記ページで再配布されています。
ttp://www.geocities.co.jp/SiliconValley/1781/arseno/
再配布については、作者さんの許可はあるようです。
0787nobodyさん04/01/31 04:08ID:???
>>786
dr.cgiのsub show_def内の、print "Content-Type: text/html\n\n";の直前か直後に、
@defs = reverse @defs;
これで良いと思う。
078878304/01/31 04:38ID:???
>>787
直後につけることで変更させることができました。
乏しい情報の中でわざわざすいませんでした。
本当にありがとうございました。
0789nobodyさん04/01/31 13:04ID:???
最近パッチワークCGIが多いな。
0790nobodyさん04/01/31 22:58ID:???
こんなCGI探してますスレッドより誘導されてきました。

現在某画像UP掲示板を運営しており、利用者の増加に伴うCGIの入替を検討しています。
現在はimgboad.cgiを利用しておりますが、評判が良くない事とまれに正常に動作しない場合があるのが理由です。

新しいCGIには、「Child Treeマルチファイルアップ掲示板」
ttp://www.cj-c.com/cgi_s/cbbs.htmを検討しておりますが、どうしても必須な機能が1つ足りません。

連続投稿規制に関する機能なのですが、「1つ投稿したら*分は投稿できない」ではなく、「*分以内には*回まで投稿可能」
という制限機能が必須なのです。(本機能はimgboad.cgiには実装されていますが、Child Treeにはありませんでした…)

「Child Treeマルチファイルアップ掲示板」のインターフェイスは気に入っており、是非利用したいのですが、何とか上記の機能を実装できませんでしょうか?
テンブレの指示通り http://homepage3.nifty.com/qvga/ftp/cbbs.txt にCGIをテキストでUPしておきました。
丸投げでの依頼をする所でない事は重々承知ですが、自分の力ではどうにもならない為、藁にもすがる気持ちで書き込みさせて頂きます。
長文となってしまいましたが、知識のある方のご協力をお願い致します。
0791nobodyさん04/01/31 23:55ID:???
>>790
>丸投げでの依頼をする所でない事は重々承知ですが。

分かっているなら(略

俺?知識があるなんて恐れ多くて言えないから協力せんけど。
0792nobodyさん04/02/01 08:07ID:???
>>791
それじゃなんで来たんだ?屑
分からないならだまっとけよ塵
0793未承諾広告※ ◆aiY4htt2.2 04/02/01 10:07ID:???
>>790
ご予算は如何ほどに?( ̄ー ̄)ニヤリ
変数の扱いが無茶苦茶なので割高になるかと思いますけれども。。。(哀)
取り敢えず、 BBQ が落ち着いてから。
079479104/02/01 11:53ID:???
>>793
なるほど。
納期を長く頂ければ格安でご提供することも可能ですが、いかが致しますか?

よく考えると人件費含めて他人の資産を使おうとしてるんだから、対価が発生するのがデフォルトだよな。
死にかけてる奴とかなら情で無償の奉仕が発生してもそれは人間として正しいわけだが。
それなりの生活水準の奴を無償で助ける義理ってのは無いよな。

まぁ、やな世の中だってこった。
0795nobodyさん04/02/01 16:55ID:???
>>793
禿同。
ただでさえ他人が書いたものはいじる気にならんのに
これだけ汚いスクリプトは読むまえにリタイアだよw
まぁ、知識がないおれには読む書く以前の問題だけどね。
0796nobodyさん04/02/01 17:25ID:???
既にその機能が実装されている掲示板のソースがあるならそこから自力で移植すれば?
その程度ならさして難しくないだろう。
俺なら元のCGIを使いつづけるがな。
0797誘導した本人04/02/01 17:37ID:???
>>790
誘導した本人だ。
君にもレスくれたみんなにも迷惑かけたな。スマン。
責任とって俺がやろう・・・と言いたいが・・・。
そんな安請け合いが出来ないほどcbbs.cgiはすごいな。
かなり気合を入れないと読み下せない。
と言うわけで時間をくれ。
対価はいらんが、もしかしたら逃げてしまうかもしれないと思われ。

それで質問だが、、「*分以内には*回まで投稿可能」 と言うのは一人一人に対してか?
それとも全員合わせてなのか?
例えば5分以内に5回という制限としよう。
ひとりで5分以内に5回投稿したら、他の人は最初の投稿だが投稿できないのでいいのか?
それでいいのなら割と簡単ぽいが、一人一人別制限だったらちょっと辛いかも・・・。
079879004/02/02 16:45ID:???
>>793氏
ご予算ですか…。
掲示板からの収入は全く無いのでポケットマネーからという事になりますが、ウン十万とかは無理です。
1〜2万円でしたらなんとか捻出できるとは思いますが安すぎますよね。
相場とはどのくらいなんでしょうか?

>>794氏
納期を長く、とはどのくらいになりますでしょうか?
リッチな生活をしている訳ではないので安ければ安いにこした事は無いです。
>よく考えると人件費含めて他人の資産を使おうとしてるんだから、対価が発生するのがデフォルトだよな。
私も当然そう思います。
引き受けて頂けるのでしたら代金はお支払いするつもりですが、↑にも書いた通り予算はかなり厳しいです。
この程度の予算では話にならないでしょうか?

>>795氏
私は掲示版を設置する事はできますが、cgiの中身を理解する事はできません。
そんなに酷いのでしょうか?評判が良いらしいのでChild Treeにしようと思ったのですが。。。

>>797氏
わざわざこちらでもレス頂きありがとうございます。
お時間はいくらかかってもOKです。ご協力頂ける事に感謝致します。
対価はいらないとの事ですが、上の皆さんもおっしゃっているようにかなり大変そうですので、無事に完成させて頂ければ
予算内での代金をお支払いさせて頂きたいと考えております。

投稿制限に関してですが
>例えば5分以内に5回という制限としよう。 ひとりで5分以内に5回投稿したら、他の人は最初の投稿だが投稿できないのでいいのか?
>それでいいのなら割と簡単ぽいが、一人一人別制限だったらちょっと辛いかも・・・。
では残念ながらダメですね。全員合わせてではなく、1人1人に対して*分以内には*回まで投稿可能という機能が欲しいのです。
Child TreeのサポートBBSにも書き込みしてみましたが、作者からの返答で
>それは難しいですね。cookie等を用いて投稿回数の記録か、ログに投稿回数などを取得しておかなければなりません。
との返答を頂きました。やっぱり難しそうです。。。
0799未承諾広告※ ◆aiY4htt2.2 04/02/02 21:30ID:???
時間掛けても良いんだったら、勉強汁。
0800nobodyさん04/02/03 00:56ID:???
>>799
ああ、自分が勉強すればその後一切他人に対価を支払う必要はなくなるよな。
確かにその通りだ。
0801nobodyさん04/02/03 07:02ID:7G9Cx1i0
某スレッドよりご紹介を受けて参りました。
テキストエリアから飛ばしたデータを、htmlスキンのテキストエリアで読み込もうとしたら
改行のタグがそのまま出てしまうので、本などで調べてたら、

 $comment =~ s/\r\n/<BR>/g;
 $comment =~ s/\r/\<BR>/g;
 $comment =~ s/\n/<BR>/g;
 $comment =~ s/\t/ /g;
 $comment=~ s/<BR><BR>/<BR> <BR>/g;

 がテキストエリアの改行コードをタグ化する命令文だということが分かりました。で、テキストエリアの改行コードが「\r\n」であるのなら、
ログへもこのコードを飛ばせば、うまくいくんじゃないかと思って、

 $comment =~ s/\r\n/\r\n/g;

という形にしてみたのですが、これだとログ上では改行されていましたが、読み込む際にその改行部分で読み込みが途切れてしまい、後の情報は
全て読み込まれなくなるなどの不具合が生じてしまいました。書き込みした直後はうまく改行された状態でテキストエリアに
表示されるのですが、どこかに移動して戻ってきたり、更新するとダメになります。最初の読み込み時と、二度目の読み込み時で
コメント部分が違う読み込みが行われるので、2重更新まで結果的に許可されてしまう状態となり、もうどうしようもない状態になりました。

 で、2ちゃんで質問させて頂き、こちらを紹介して頂いたのですが、それとほぼ同じごろに、ググりまくった成果がようやく出てきて、
メモ帳などでいじる際のテキストエリアの改行タグ?は「?」であるということが分かり、

 $comment =~ s/\r\n/?/g;
 $comment =~ s/\r/?/g;
 $comment =~ s/\n/?/g;
 $comment =~ s/\t/ /g;
 $comment=~ s/<BR><BR>/<BR> <BR>/g;

 という形に変更したら、見事、二重更新もされず、ログ上にもちゃんと「?」が残った状態で、読み込みの際にだけ
改行が行われるようになり、最初に意図してた通りのhtmlを吐き出してくれました。
0802本題です04/02/03 07:02ID:7G9Cx1i0
 で、ここまできてひとつ気になることが生まれて
質問させていただきたいのですが、\r\nと\rと\nは
winやマックの改行コードとして調べていて分かったのですが、
$comment =~ s/\t/ /g; は一体なんなのでしょうか?
しかも空白になっています。なぜ空白なのでしょうか?

$comment=~ s/<BR><BR>/<BR> <BR>/g; もイメージがつかめません。

 これはこのままにしておいたほうがよろしいのですか?
ちなみにttp://hp.bird.to/info/bbsking.html のCGIを
改造しています。
0803本題です04/02/03 07:04ID:7G9Cx1i0
 あれ??
「&#13;」って書いたところが「?」になってますね…。
奥が深そう・・・。
0804未承諾広告※ ◆aiY4htt2.2 04/02/03 09:56ID:???
perlre でも読んでみませう。
http://rananim.ie.u-ryukyu.ac.jp/~kono/perlman/cat1/perlre.html
とかほかいろいろ
0805nobodyさん04/02/03 16:06ID:???
> <br><br>
バグか仕様か宗教上の問題かは知らんが、<br>を連続で書くと1つの<br>としてしか認識しないブラウザが稀にある。
間にスペースを挟むのはそういうときの対策だな。
消しても問題ないと思う。レアなトラブルと1空行あたり1バイトの無駄データ、どっちを優先するかの話。

>&#13;
&#(数字);は実体参照。意味はぐぐってくれ。
10が\nだと思ったから13は\rなのかな。
&#13;は"&13;"であって「改行」ではないから、例えばそのデータを再び送信するとおかしなことになる。
吐き出したHTMLのソースを読むとその場所で改行されてないって事が分かると思う。
(表示しかしないのであれば問題は無い)

\tについては804を参照。

改行部分で途切れていたのは、perlが改行をデータ間の区切り文字として認識してるから。
ログでは<br>として保存しておいて、表示の直前に<br>を\n(あるいは\r\n)に置換するのが定石。
あるいはperlの区切り文字($/)を一時的に変えてしまうというトリッキーな手もある。
0806nobodyさん04/02/03 16:07ID:???
ところどころ#を書き忘れた、&13;は&#13;と脳内補完してくれ。
0807nobodyさん04/02/03 16:51ID:???
 未承諾広告さん、>805さん、どうもありがとうございました。
 
 未承諾広告さんに教えて頂いたページを読んだのですが、
HP作成歴は、それなりにあるものの、CGIを勉強しだして2週間しか
経っていない私には、正直申し上げて、\tの説明以外の部分は今はまだ
いくら読んでも頭に入ってきませんでした…(お気に入りには登録しておきました)
 
 私のHPの掲示板は、長文を書かれる方が非常に多いので、
レスのコメント部分がテキストエリアで表示されるようにしたら、
1つ1つのレスの大きさも均等化されて、新規レスが上がった際に、
目的のレスまで遠くなるというような問題を解消できると思って、
この改造を思い立ちました。
 
 読み込み専用ですので、これで問題なく動かせそうです。

 「実体参照」、調べてみましたが面白いですね。
また世界が広がったような気がします。ありがとうございました。

 それにしてもどうして>805さんのレスには「&#13;」が
半角でちゃんと表示されているんだ??? 

 「?」←半角で「&#13;」を書いてみた。
0808nobodyさん04/02/03 18:05ID:???
?
0809nobodyさん04/02/03 18:27ID:???
&amp;#13
081079704/02/03 20:00ID:???
>>798
一応出来た。
imgboardのようにクッキーを使おうかと思ったが、それだとcbbsを弄る必要がある。
それは超マンドクセーので、追加記述で出来る別ログに記録しる方式にしてみた。
IPで個人を識別しているので、一旦接続を切ってIPを変えたり、プロクシを刺したりしたら制限が効かない事もある。
クッキーにしたってクライアントがクッキーを破棄すれば制限が効かない事もあるで、個人的にはこれでOKかなと。。。
どうしてもクッキーでやりたいのなら、俺はパスだ。

つづく。
0811nobodyさん04/02/03 20:03ID:???
まず、
cbbs.cgi と同じディレクトリに、空ファイル hiroyuki.txt を600か606でUPしる。

cbbs.cgi の1227行目が空行になっているが、そこに
&fusianasan;
と記述しる。


つづく
0812nobodyさん04/02/03 20:07ID:???
以下をコピペして、スクリプトの一番最後にペーストしる。

sub fusianasan{
    $limit_log = 'hiroyuki.txt' ;    # エポック秒とIPアドレスを記録しるファイル
    $limit_type = '600' ;        # 連続投稿回数制限 サンプリング期間 (秒数)
    $limit_time = '3' ;        # 連続投稿回数制限 回数 (この回数までOK)
    $count = '' ;
    open(LOG,"$limit_log") || &er_("Can't open $limit_log");
    @line= <LOG>;
    close(LOG);
    foreach (@line){
        chomp;
        @_ = split /\t/,$_ ;
        time - $limit_type < $_[0] or next;
        $count++ if $ENV{REMOTE_ADDR} eq $_[1];
        push @line2,$_ . "\n" ;
    }
    &er_("overtimes 掲示板管理者が設定した連続投稿回数をオーバーしました。<BR>しばらく投稿できません","1") if $count >= $limit_time ;
    open(LOG,">$limit_log") || &er_("Can't write $limit_log","1");
    print LOG @line2;
    print LOG time . "\t" . $ENV{REMOTE_ADDR} . "\n";
    close(LOG);
}
0813nobodyさん04/02/03 20:13ID:???
chomp使っているから、perl5 以上でな。
元スクがuse strict してなかったから、俺も適当に書いた。
対価は前にも言ったがいらねー。

どうしても払いたいと言うのなら、>>798の名前で日本赤十字社に寄付してくれ。
金額はお前に任せる。
俺はそれでいい。
0814nobodyさん04/02/03 21:36ID:TrK4Nuwe
改造のアドバイスをお願いしたく、書き込みさせていただきます。
実際のカウント数よりワザと大幅にカウントを多く表示する
「水増しカウンタ」というスクリプトなんですが
http://dekachin.at.infoseek.co.jp/counter.txt
これを日付けが変わると同時にカウンタ数値を000にリセットするようにしたいのですが
どこをどうイジったらいいのかサッパリ…

海外サーバで使用する場合にも追加加工が必要なんでしょうか?
要領を得ない質問のしかたで申し訳ありませんが
どうかアドバイスよろしくお願いいたします。
0815未承諾広告※ ◆aiY4htt2.2 04/02/03 22:35ID:???
>>814
> どこをどうイジったらいいのかサッパリ…
こんなに短いソースなのに漏れもさっぱり。。。
0816nobodyさん04/02/03 22:49ID:???
ファイルの更新日時をstatで取得して、(アクセス時点から見て)前の日だったらリセット。
$ENV{'TZ'}をスクリプト内で適切に設定すれば海外でも国内でも問題ない。
081781404/02/03 22:58ID:TrK4Nuwe
>>815様
やはりかなり特殊な物なんでしょうか…

>>816様
レスありがとうございます。「statで取得」…
ググって頑張ってみます…
0818nobodyさん04/02/03 23:11ID:???
至って不真面目なやり方だが

32行目
旧:($count,$truth,$times,$ips,$i) = split(/<>/,$data[0]);
新:($count,$truth,$times,$ips,$mod) = split(/<>/,$data[0]);

58行目と60行目の間に追加

my ($now_day) = (localtime(time()))[3];
my $old_day = $mod;
my $new_day = '';

if ($now_day ne $old_day){
$count = 0;
$new_day = $now_day;
}else{
$new_day = $old_day;
}


77行目

旧:$data[0]="$count<>$truth<>$tm<>$ip<>\n";
新:$data[0]="$count<>$truth<>$tm<>$ip<>$new_day<>\n";

以上。

>>817
特殊なんじゃなくて汚いわけで<ソース
081981404/02/03 23:39ID:TrK4Nuwe
>>818様
わあ!ありがとうございます!
>特殊なんじゃなくて汚いわけで<ソース
そうなんですか…

自分の使ってるエディタですと多少行数が違って表示されるんですが
該当箇所を教えてくださった通りに書き換えてみました。

これを海外サーバで動かす場合は
$ENV{'TZ'} = "JST-9";
を、どこかに追加すればいいのでしょうか?
0820nobodyさん04/02/04 17:24ID:???
皆様、初めまして
唐突ですみません、
質問させて下さい!
apeボードで書き込みの親記事部分にホスト表示をさせたいのですけれど、、、
こんなことって可能でしょうか
もしこちらでするべき質問ではなかったなら、本当に失礼しました
0821nobodyさん04/02/04 17:39ID:???
>>820
>>1を読んで退場
0822ИТО04/02/04 23:16ID:rVneR8vT
掲示板を作ってるんですが、レス投稿者にトップソートするかしないかを選択できるようにするにはどうすればいいのでしょうか?
2chの場合はE-mailにsageと書くとトップソートしませんよね。
0823nobodyさん04/02/04 23:28ID:???
>>822
質問の前に>>1をみるなり、ネチケット守りましょう。。

自作してるんならわかるんじゃないの?
単にifで条件分岐すればいいだけの話では?
0824nobodyさん04/02/05 01:26ID:???
頭文字だけ書いておくよ。
例えばiとmとsあたりかな。
0825nobodyさん04/02/05 03:38ID:???
自動でトップソートしてくれるような便利な機能は無い。
0826nobodyさん04/02/05 06:03ID:???
・名前を入れている
・本文が2〜3行
・sageない

こういう奴って間違いなくマルチポストしてる
082770604/02/05 08:06ID:???
前回、写メールBBSでお世話になった706です。

あれからphpを勉強して、なんとか5つ星評価スクリプトを作ってみたんですけど
それをcgiに組み込むことって出来ますか?
試しにdatabese.cgiが吐き出すテンプレート用htmlの拡張子をphpに変えて
日付のスクリプト書いてみても日付は表示されませんでした…ムリなんですかね?

http://yellow.ribbon.to/~mush/star.php
0828nobodyさん04/02/05 11:06ID:TYkaMAsn
KENTWEBさんのWEB FORUMを利用しています。
ttp://www.kent-web.com/bbs/wforum.html

この掲示板に2chのような、投稿者別にIDを振って表示させたいのですが何かいい方法はありませんか?
もし何かアドバイスがあればよろしくお願いします。
0829nobodyさん04/02/05 15:17ID:???
>>828
生IP表示しちゃえば良いじゃん
0830nobodyさん04/02/05 16:42ID:???
はじめまして。
ウェブ作成にakiaryという日記作成cgiを使用しています。
http://www.hi-ho.ne.jp/yakira/akiary/

ウェブ上で文章編集し、最新ページ作成と月別のページを自動作成してくれるツールなのですが、
そこに追加で、月別のページに日付とタイトルリストを追加しようとしてもなかなかうまくいきません。
このcgi独自のタグをいじってみても、エラーが出るばかりです。

テンプレートをいじった見本としてあげられているサイトを見ると
あっさりそれを実現している方もいるのですが、テンプレ公開などはされていません。
ttp://nanako.pekori.to/diary/200311.html (左側にちゃんとページ内インデックスが!)

サポート掲示板でもこのことが話題になっているようなのですが、
どうもまだやり方は不明のようです。

どなたか、教えて下さいませ。
■ このスレッドは過去ログ倉庫に格納されています