【 スクリプト改造工房 PART 6 】
■ このスレッドは過去ログ倉庫に格納されています
00011
03/03/16 18:28ID:vOOsWTxU# スレッドの説明
#================================
「スクリプトを改造したいけどやりかたわかんないよー」という人がいましたら
ここで聞いてください。ひょっとしたらアドバイス出来るかもしれません。
質問するときは以下の点に注意して書いて下さい
(1) そのスクリプトの内容と置いてある場所を明記する (txtファイルでUPすればなお良い)
(2) どんな風に改造して欲しいのか? (完成イメージHTMLを用意すればなお良し)
(3) 出来るだけ詳しく書くこと。少しは自分で考えること。できれば御礼も言ったほうが良い
※答えてくれないからといって逆ギレする厨はお断り
#================================
# 過去のスレッド
#================================
【PART1】行方不明
【PART2】http://pc.2ch.net/test/read.cgi/perl/986986227/
【PART3】http://pc.2ch.net/php/kako/988/988808396.html (HTML化済み)
0003前田
03/03/16 18:42ID:KSrtergbこちらのサイトのポップアップ式の掲示板を使ってるのですが
開示版に書かれた最後の記事の時間をindexページに表示したいのですが
どのようにすればよろしいのでしょうか?
教えてください
↓こんなサイトみたいにです。
http://www.ayapro.com/board.html
0004nobodyさん
03/03/16 23:51ID:???sub deleteme{
#自分の発言消去
open (IO,"+<$logfile");
eval{flock(IO,2)};
while (<IO>){
if ($_ =~ /<>$ip/){
@y2=split(/<>/,$_);
if ($y2[6] ne $ip){
push(@log,$_);
}else{
$y2[0] = 'All Clear (^-^)v'; #消去後の名前
$y2[5] = 'All Clear (^-^)v'; #消去後のメッセージ
push(@log,"$y2[0]<>$y2[1]<>$y2[2]<>$y2[3]<>$y2[4]<>$y2[5]<>$y2[6]<>$y2[7]<>\n");
}
}else{
push(@log,$_);
}
}
truncate(IO,0);
seek(IO,0,0);
print IO @log;
close (IO);
&reload2;
}
消去後の名前とメッセージをそれぞれ好きなのに変えれ。
消去しないほうはコメントアウトしれ。
00052
03/03/17 02:02ID:TTdi1HRWいやです。
0006AR
03/03/17 13:44ID:DC9PFXA+0007nobodyさん
03/03/17 13:48ID:VODuniq+http://hkwr.com/
http://hkwr.com/bbs
0008nobodyさん
03/03/17 14:10ID:???0009AR
03/03/17 14:48ID:DC9PFXA+ソース⇒http://csx.jp/~lgyec/ichats.data
援助お願いします。
0011nobodyさん
03/03/17 16:59ID:???0012AR
03/03/17 18:06ID:DC9PFXA+ちなみにいつもはメモ帳でやってます。
0013nobodyさん
03/03/17 18:27ID:???0014nobodyさん
03/03/17 18:30ID:E6NZQVv8秀麻呂を知らんのかっと、。
0015nobodyさん
03/03/17 19:33ID:???とりあえず聞く前に自分で適当なエディタを探して試すべし。
(秀丸は有料だから、フリーのを……なんて質問は却下だよ)
0016nobodyさん
03/03/17 20:12ID:???0017nobodyさん
03/03/19 11:51ID:???#!/usr/bin/perl
#ユーザー設定
$bbs = './i-modebbs/imodebbs.dat'; #BBSログファイル
$bbsurl = 'http://www.*******/cgi/i-modebbs/imodebbs.cgi'; #BBSのURL
#設定終了
#bbsログファイル読込み#
open (BBS, "$bbs");
@bbsfile = <BBS>;
close (BBS);
($bbs_number,$bbs_date,$bbs_name,$bbs_title,$bbs_mail,$bbs_hpurl,$bbs_mhost,
$bbs_magent,$bbs_com) = split(/,/,$bbsfile[0]);
#html部分#
print <<HTML;
<html>
<head><title>掲示板</title></head>
<body>
<a href="$bbsurl">掲示板</a> [$bbs_number]<br>
[$bbs_name]<br>
[$bbs_date]
</body>
</html>
HTML
下のサイトのやつです。
ttp://xx.alpha-sv.com/vf4/cgi/update_bbs.cgi
0019sage
03/03/19 14:16ID:Z36WfgQaファイルが月ごとになっているのでほかのスクリプトから移植することができませんでした。
できれば検索にかかった記事の全文を表示し該当ワードを太字にするような検索結果にしたいです。
わかる方がいましたらよろしくお願いします。
0021nobodyさん
03/03/19 14:49ID:wSFZE8Gs↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
0022sine
03/03/19 14:58ID:mSaoA1aLVBスプリクトだよね!
0023nobodyさん
03/03/19 15:46ID:???@bbsfile = <BBS>;
close (BBS);
($bbs_number,$bbs_date,$bbs_name,$bbs_title,$bbs_mail,$bbs_hpurl,$bbs_mhost,
$bbs_magent,$bbs_com) = split(/,/,$bbsfile[0]);
この中に原因があると見た!って、オリジナルのソースもわからんから
推測だけどな。
0024nobodyさん
03/03/19 16:11ID:???一番上の行を抜き取るならこれでいいんじゃない?
open(BBS, "$bbs");
while (<BBS>) {
($bbs_number,$bbs_date,$bbs_name,$bbs_title,$bbs_mail,$bbs_hpurl,$bbs_mhost,$bbs_magent,$bbs_com) = split(/,/);
last;
}
close(BBS);
002517
03/03/19 17:15ID:???初心者のほう逝って勉強してきたほうがいいですよね…
0027nobodyさん
03/03/19 17:32ID:???0028nobodyさん
03/03/19 18:13ID:???0032nobodyさん
03/03/21 02:31ID:Q30fXesm0035nobodyさん
03/03/21 03:48ID:NS9P8WQ30036nobodyさん
03/03/21 05:15ID:b07vwTaxhttp://homepage3.nifty.com/digikei/
0037nobodyさん
03/03/21 07:18ID:???とあるスクリプトの該当部分
if ($listnum > $pageview){
if ($page >= 2){
$bpage = $page - 1;
print "[<A HREF=\"$script?page=$bpage\">前のページ</A>] ";
}
if ($listnum % $pageview == 0){$lpage = int($listnum / $pageview);}
else {$lpage = int($listnum / $pageview) + 1;}
for ($i=1; $i<=$lpage; $i++){
if ($i == $page){print "<B>[$i]</B>";}
else {print "[<A HREF=\"$script?page=$i\">$i</A>]";}
}
if ($page < $lpage){
$npage = $page + 1;
print " [<A HREF=\"$script?page=$npage\">次のページ</A>]";
}
print "<BR><BR><BR>\n";
}
else {print "<BR><BR>\n";}
あとは自分の都合のいいように改造すれ
0038AR
03/03/22 15:47ID:WjvvL6Ftちなみに秀丸をつかってやりました。
ソース⇒http://csx.jp/~lgyec/ichat.data
おかしい部分を教えてください。
0040nobodyさん
03/03/22 16:52ID:???お前なぁ・・・
同じこと何度目だよ?(゚Д゚#)
秀丸なら その他→ファイルタイプ別の設定→表示 で
全角空白を記号で表示 にチェック入れてみれ
できたという報告をするまで二度と来るな!
0041nobodyさん
03/03/22 17:57ID:O6IB41Gfどうやるのか見当がつかない。
なんかヒントがあったら教えてオクレ。
0044AR
03/03/22 19:01ID:gauSJKrI自分の発言を削除押したらそのメッセージがでるんですけど。
名前のところにまでそのメッセージがでます。
援助お願い致します。
0045nobodyさん
03/03/22 19:22ID:???氏ね
二度とくんなヴォケ!
0048nobodyさん
03/03/23 02:47ID:???なんかこの板は質問のへたなのばかりだな
0049nobodyさん
03/03/23 08:57ID:???質問下手の相手をする気はねぇよ。
ただでさえ、実生活で顧客の曖昧な要求の処理に苦労してんのに、こんなとこまで来てやってられるか。
0050nobodyさん
03/03/23 09:19ID:???>>44の"そのメッセージ"ってのあたりになると解らんけど・・・
で、htmlとしてソースを吐こうとするのは、普通のCGIじゃ無理かと。
無論、自分で作れば問題ではない
0051nobodyさん
03/03/23 13:04ID:???じゃあこんなスレに出入りすんなよ。
カチンと来る気持ちもわかるが、
そうやって雰囲気悪くされるとそれも頭に来る。
というわけで、馬鹿相手にしたくないときはレスしないか、
そおれが出来ないならスレを覗かないかどっちかにしてくれ。
0052AR
03/03/23 13:15ID:7sODWzUz自分の発言を消去を押すと自分の発言した文字すべてにAll Clear (^-^)vが付いてしまうので、それを付かずに一番上に'All Clear (^-^)v'をつける改造をお願いします。
援助宜しくお願い致します。
005349
03/03/23 21:22ID:???ああ、すまない。確かに見ていて気持ちのいい書き込みじゃなかった。
しかしながら、>>52 には別の意味でカチンと来てしまったよ。
ただ、こういう書き込みがあると、他の質問者もこのレベルになるんじゃないかと心配でならない。
できれば、もうちょっとマシな質問の仕方を学んで欲しいと思うのだけれども、
俺の考えることじゃないのかな。
0054nobodyさん
03/03/24 00:48ID:???回答者ももう歩み寄ってナマアタタカイ視線の送るということで。
0055nobodyさん
03/03/24 00:49ID:???0056AR
03/03/24 15:53ID:YcFPejc40057nobodyさん
03/03/24 15:57ID:???(3) 出来るだけ詳しく書くこと。少しは自分で考えること。できれば御礼も言ったほうが良い
~~~~~~~~~~~~~~~~~~~~~~~~~~
0058nobodyさん
03/03/24 16:55ID:???もうくんなっつっただろうが!
なぁ〜にが援助だヴォケ、稲!!
0061nobodyさん
03/03/24 22:21ID:???0062nobodyさん
03/03/25 02:45ID:???0063nobodyさん
03/03/26 01:43ID:???Jcode::convert(\*value, "utf-8"); #Jcode.pm変換後
&jcode'convert(*sub, "euc", "", "z"); #変換前
Jcode::convert(\*sub, "utf-8"); #変換後
文字コードをユニコードにしたいのですが、これであってますか?
006641
03/03/26 04:41ID:Ri6qLnoQ整理すると、つまり負荷負荷のために表示を.cgiではなく.htmlにしたいの。
ぐぐってみたんだけど情報が見つからなくて、
なにかヒントがあればなぁと思ってこのスレに来たんだよ。
でも慌てすぎてて舌足らずだったね。
勘弁してちょ。
もちっと自分で試行錯誤してから出直すよん。
006741
03/03/26 04:41ID:Ri6qLnoQ0069nobodyさん
03/03/26 16:22ID:yvUoj8Wihttp://www.futomi.com/cgi-bin/dlrank/dlranklog.cgi?dl=accp_zip
このアクセス解析を改造したいです。
このアクセス解析はログ内に
20030326155753 ***.docomo.ne.jp 210.153.84.***.1048661873 - http://*** - "DoCoMo/1.0/N504iS/c10/TB" "-" "-"
と言ったログを残すのですがH"ではログが
20030326124628 pdxcgw.pdx.ne.jp 210.168.199.42.1048650389 - - - "" "-" "-"
となってしまいUser Agentは残らないようです。
そこでacc.cgiを
} elsif($user_agent =~ /^PDXGW/) {
から
} elsif ($ENV{'REMOTE_HOST'} eq 'pdxcgw.pdx.ne.jp') {
とホストでの判別できるように
記述し直しましたが
これだけではダメのようです。
ホストでの判別、もしくはUser Agentによる判別をしたいのですが。。。
http://specters.net/cgipon/labo/c_dist.html
http://specters.net/cgipon/labo/c_env.cgi?c=h
http://specters.net/cgipon/labo/h_spec.html
このあたりを参考にしたんですが。。。
0070nobodyさん
03/03/26 17:24ID:NtHaVELZ☆ http://www5b.biglobe.ne.jp/~ryo-kyo/osu.html ☆
。 ☆ 。 * ☆ + 。 。 + + ☆ ☆
おすすめの無料オンラインゲームは↓ vector
http://my.vector.co.jp/servlet/System.FileDownload/download/ftp/0/278022/pack/win95/game/table/pachinko/majo_.lzh
0071nobodyさん
03/03/26 21:00ID:???H"の有識者が現われる前にスレ汚し。
えーと、要は、
1. H"ではログに UserAgent が残らない
2. acc.cgi をホストで判別できるように直したがダメだった
で、
Q1. ホストで何を判別したいの?
Q2. ソースを直した箇所って条件に合致した後、どんな処理をするの?
Q3. H" のリモートホストって、'pdxcgw.pdx.ne.jp' で固定なの?
Q4. どうダメだったの?いや判別できなかったんだろうけど、具体的はどーなのよ
0072nobodyさん
03/03/26 21:52ID:???亀レスだが、perl/CGIなら
$bbsdata = (掲示板のHTMLすべて);
open (FH, +<$filename);
print FH $bbsdata;
close(FH);
でいいんじゃないの?
007369
03/03/26 21:52ID:???A2.それが分からないから困ってる。
A3.そう、固定。
A4.書き換えても変化無し、エラーも何も起きない。
以上です。
007472
03/03/26 21:54ID:???>>72(書き込み処理含む)の後で、locationヘッダでhtmlに飛ばすとか。
書き込みだけCGI使うことになるから、かなりLOM多いなら有効だとオモフ。
007569
03/03/26 21:55ID:???http://www.futomi.com/library/accs.html
でも処理は似ているからそれでもいいんですが。。。。
ようはホストでの認識か、UserAgentの取得が正常に出来れば解決するのですが。。
0076nobodyさん
03/03/26 22:00ID:???でも、
>20030326124628 pdxcgw.pdx.ne.jp 210.168.199.42.1048650389 - - - "" "-" "-"
のように、UserAgent欄には表示されないが、RemoteHost欄に出てるじゃん。
UserAgent欄とRemoteHost欄に同じ"pdxcgw.pdx.ne.jp"という文字列を出したいわけ?
0077nobodyさん
03/03/27 07:00ID:???0078nobodyさん
03/03/27 07:29ID:???>>69の elsif ($ENV{'REMOTE_HOST'} eq 'pdxcgw.pdx.ne.jp') {
の中に入れないってことかなぁ。
>>73 の A4.書き換えても変化無し、エラーも何も起きない。
って具体的はどーなのよ
それとも>>76-77が言ってるみたいに表示だけの問題かい?
0079nobodyさん
03/03/27 08:08ID:???ま、次の返答が来たら大体意図が解る気もするけど。
# でも大抵の質問者はその前に逃げちゃう
0080nobodyさん
03/03/27 12:33ID:???を、
elsif($ENV{'REMOTE_HOST'} =~ /pdx.ne.jp/i){
0081nobodyさん
03/03/27 13:46ID:???. が任意の文字になるから正確には
elsif($ENV{'REMOTE_HOST'} =~ /\Qpdx.ne.jp\E/i){
か、
elsif($ENV{'REMOTE_HOST'} =~ /pdx\.ne\.jp/i){
やね・・・
マッチはするけど・・・
008269
03/03/27 13:55ID:???うーん、変化無しです。
H"のuser agentは
PDXGW/1.0
なんですがこれがうまく取得できていないようなんです。
これを修正する方法が1つ目
ホスト情報はしっかりと残っていて、
pdxcgw.pdx.ne.jp
で固定なので、こちらで判別するのが2つ目の方法です。
/logs/access_log.cgi
のログ内には
>20030326124628 pdxcgw.pdx.ne.jp 210.168.199.42.1048650389 - - - "" "-" "-"
の様にREMOTE HOSTだけ残っているのでなんとか、pdxcgw.pdx.ne.jpのリモートホストから
acc.cgi
のアクセス解析に反映させる方法を悩んでいます。
まあ、どうして取得できないか分からないuser agentを取得するよりもRemote hostからの取得の方が改造しやすいのかな?
と思い相談しました。
0084nobodyさん
03/03/27 14:57ID:???008580
03/03/27 15:22ID:???訂正サンクス
>>82
リモホとエージェントがわかってるなら、
if($ENV{'REMOTE_HOST'} =~ /pdx\.ne\.jp/){
$エージェント = "PDXGW\/1\.0";
でいいんでない?
008669
03/03/27 16:53ID:???>>83 >>85については500エラーになります。
一応、作者にも聞いては見たのですが。今のところ返答はないです。
有料といっても試用期間が∞なので。。。
H"の仕様自体も特殊でわかりにくいようですね。
H"の場合、厳密に言えばブラウザではなく、Eメールの送受信を利用してページを表示している形式だそうです。
http://specters.net/cgipon/
ですべての携帯でみれる掲示板があるのですが、こちらはuser agentからの取得をしているようですね。
0087nobodyさん
03/03/27 18:41ID:WYrKGZij意味不明
0088nobodyさん
03/03/27 18:57ID:???あいかわらず君が何をしたいのかわからんが…
H" のUserAgentの取得をしたいでよろしいか?
でもUserAgentが取得できないので、次善の策として、$ENV{'REMOTE_HOST'}がpdxcgw.pdx.ne.jpならUserAgentにH" を代入するでよろしいか?
> acc.cgiを
> } elsif($user_agent =~ /^PDXGW/) {
> から
> } elsif ($ENV{'REMOTE_HOST'} eq 'pdxcgw.pdx.ne.jp') {
って書いてあるが、おそらく$ENV{'REMOTE_HOST'}ではホスト名が返ってこないと思われ。
じゃ、なぜログにホスト名が記録されているっていうのは、gethostbyaddrを使っていると思われ。
あとは自分でできるね?
0089nobodyさん
03/03/27 19:02ID:???ゴメン、わからなかったね。
0090nobodyさん
03/03/27 19:08ID:???>>83 >>85については500エラーになります。
って書いてあるが、$HostNameや$エージェントって言う変数名そのまま使ったんじゃねーか?
0091bloom
03/03/27 19:15ID:LJULTLGK0094nobodyさん
03/03/28 00:54ID:???これ結構重要なことよ?
0095nobodyさん
03/03/28 01:12ID:???いるんだったら、>>90をはじめとする全ての自分に向けられた質問に回答しろ。
余すところ無く詳細に回答しろ。
#いい加減にしろよこの野郎。
009669
03/03/28 13:29ID:???CGIに関しては設置やせいぜいCGI内のHTMLを書き換えるくらいの知識しかありません。
だから>>90の$HostNameや$エージェントら何を代入するのか、分からないし、gethostbyaddrが何のことか分かりません。。。
申し訳ないです。なので>>88のやり方でどこを書き換えたらいいのか教えて欲しいんですが。。
あと、CGIを勉強するのにいい本ってありますかね?
0097nobodyさん
03/03/28 14:59ID:???0098nobodyさん
03/03/28 15:12ID:???勉強すべきは、CGI じゃなくて言語でしょうな。
で、改造したいソースの流れを追っかけていくだけでも
十分、その言語の勉強になると思う。
> >>88のやり方
gethostbyaddr とはなんぞや?とすかさず Google 様に
お尋ねするようでなければ、こいつホントに勉強する気あるのか?
と疑われても仕方が無いと思う。# もうここまでで散々叩かれちゃってるけど
あと題材も悪かったな。H" のアクセス解析の改造でしょ?
実際H"を所持していて、しかも通信費払ってまでテストしてくれる人、
そう多くはないと思うんだなぁ。
だから、ちったぁ自分が頑張ってくれないと。
009969
03/03/28 19:53ID:???gethostbyaddrというのはIPからのリモートホストの取得の様ですね。
しかし、説明文のソースについてはさっぱりでした。
ログ内は
20030328015624 p7003-adsao03yokoni-acca.kanagawa.ocn.ne.jp 219.161.128.*.1048784184 - http://ime.nu/******/ "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; (R1 1.3))" "ja" "1024 768 24"
20030328015643 pdxcgw.pdx.ne.jp 210.168.199.42.1048784203 - - - "" "-" "-"
20030328020133 ahproxy4.ezweb.ne.jp 61.117.0.**.1048784493 - http://******/i/ - "UP.Browser/3.04-KC13 UP.Link/3.4.5.6" "ja" "120 128 8"
20030328020229 N043207.ppp.dion.ne.jp 211.126.68.***.1048365261 - - http://ime.nu/*****/ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)" "ja" "1024 768 24"
20030328020333 pdxcgw.pdx.ne.jp 210.168.199.42.1048784613 - - - "" "-" "-"
20030328024028 wacc2s2.ezweb.ne.jp 218.222.1.***.1048786828 - http://*****/i/ - "KDDI-TS24 UP.Browser/6.0.8.1 (GUI) MMP/1.1" "ja-jp" "144 140 16"
20030328024332 pdxcgw.pdx.ne.jp 210.168.199.42.1048787012 - - - "" "-" "-"
の様に連続して保存されています。
DDIポケットに問い合わせたのですが、IPも「210.168.199.42」で固定らしいです。
IPからの方が処理はしやすいのですかね?
0100nobodyさん
03/03/28 20:05ID:???君はまだ、>>88 の前半に答えてない。
だからほとんどの人間は君が望むものをきちんと把握できていない。
>IPからの方が処理はしやすいのですかね?
gethostbyaddr をさっぱりとか言っちゃう君には、確かにその通り。
010169
03/03/28 20:49ID:???>でもUserAgentが取得できないので、次善の策として、$ENV{'REMOTE_HOST'}がpdxcgw.pdx.ne.jpならUserAgentにH" を代入するでよろしいか?
はい、その通りです。今回IPが同一だということが分かったのでそれでも構いません。
>って書いてあるが、$HostNameや$エージェントって言う変数名そのまま使ったんじゃねーか?
はい、使いました。$エージェントは$agentにしましたが。。。。
やりたい処理というのは>>99の様に記述されたaccess_log.cgiからH"だと言う情報を読みとり
http://www.futomi.com/cgi-bin/sample/accp/acc.cgi
の
OS/ブラウザー分析
の
OSやブラウザー
と言う欄に
DDI POCKET
H"
とOSランキングに表示させる処理です。
この際、オリジナルのacc.cgiでは
PDXGW/1.0
というUserAgentに指定されていますが、access_log.cgiのログにはUserAgentがなぜか残らないためacc.cgiがH"のログを無視してしまうという症状です。
@UserAgent欄とRemoteHost欄に同じ"pdxcgw.pdx.ne.jp"という文字列を出す。
AUserAgentを頑張ってログに残す処理を考える
Bpdxcgw.pdx.ne.jpという固定のリモートホスト名から判断する
C210.168.199.42という固定のIPから判断する
以上のような処理の仕方がいろいろ考えられますが、アクセス解析に表示されて正常に動作すればどの方法でも構いません。
簡単に直すことが出来る物でお願いします。
010288
03/03/28 20:58ID:???今もって君が何をしたいのかわからんが…
H" のUserAgentの取得をしたいでよろしいか?
でもUserAgentが取得できないので、次善の策として、リモートホストがpdxcgw.pdx.ne.jpならUserAgentにPDXGW/1.0を代入するでよろしいか?
君があんまりあれなんで、ソースを落としてみますた。
ずばり正解を言うと君の勉強にならないから、ヒントだけ言う。
ソースの中にgethostbyaddrが使われているから、その前後を見渡して、リモートホストが入っているであろうと思う変数名を$ENV{'REMOTE_HOST'}と置き換えると幸せになれる。
それと、君に足りないのはCGIの知識じゃなくPerlの知識ね。
勉強が必要なのは、Perlだよ。間違えないでよ。
■ このスレッドは過去ログ倉庫に格納されています