スクリプト改造工房 Part4
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
02/02/05 01:20ID:CZVDHHphという人がいましたらここで聞いてください。
ひょっとしたらアドバイス出来るかもしれません。
前スレ
Part2 http://pc.2ch.net/test/read.cgi/perl/986986227
Part3 http://pc.2ch.net/test/read.cgi/php/988808396
なお、質問するときは
1)そのスクリプトのある場所(URL必須、拡張子".txt"でアップすればなお良し)
2)どんな風に改造して欲しいのか? (完成イメージHTMLを用意すればなお良し)
を必ず明記しよう。
0002名無しさん@お腹いっぱい。
02/02/05 01:37ID:DnrYj3PG日付を1日もしくは半日ずらして表記させるにはどうすればいいでしょうか?
例えば、2/5の深夜(午前)に書き込んで、表示画面で2/4と表示させたいのです。
http://members.tripod.co.jp/gumboll/u_diary.txt
にアップしてみました。時間表記をさせるらしきところに★をつけておきました。
よろしくお願いします。
0005ナナシンボ
02/02/06 17:04ID:dTW/dCg2なんとか新着情報をトップページに表示する方法はわかったのですが、
open (IN,"./log/new_ys.cgi") || &error('オープンエラー','指定された書込みファイルが開けません。');
@LINES = <IN>;
close (IN);
このままだと必要以上に新着サイトが表示されてしまいます。
なんとかして表示できる件数と紹介文の文字数を指定できないでしょうか?
もしも可能な方がおられましたらご教授ください。
0006ナナシンボ
02/02/06 17:21ID:dTW/dCg2# 新着サイトのデータを読み込む
open (IN,"./log/new_ys.cgi") || &error('オープンエラー','指定された書込みファイルが開けません。');
@LINES = <IN>;
close (IN);
# 表示したい場所に配列する。
foreach ( @LINES ) {
($Dno,$Dtitle,$Durl,$Dmark,$Dsyoukai,$Dkanricom,$Dkt,$Dtime,$Dbana_url,$Dpt,$Dip,$Dkey,$Ddate,$Dname)=split(/<>/,$_);
で
$Dkt=$_;
$Dkt=$dkt{$_};
if(length($dkt{$_}) > $CUT eq "s"){
$cu=$CUT-3; $dkt{$_}=substr($dkt{$_},0,$cu); $dkt{$_}.="...";
}
こんな感じのを加えて必要以上の文字列の場合は最後を...にしたいのです。
0007ナナシンボ
02/02/06 17:31ID:dTW/dCg2以外に簡単でした。
もう少し頑張ってみます。
0008ナナシンボ
02/02/06 17:38ID:dTW/dCg2又,宜しくお願いします<(_ _)>
0009名無しさん@お腹いっぱい。
02/02/06 18:44ID:???お疲れヽ(´ー`)ノ
0010名無しさん@お腹いっぱい。
02/02/10 16:19ID:EP30XMzIブラウザの種類(携帯は機種も)、IP、SSID、日付、訪問回数等を
取得できる方法ありませんか?
今は
# 適当なファイルをopenして
open(LOG,'>>logfile');
# 情報を書き込む
print LOG "$ENV{'DATE'} $ENV{'HTTP_USER_AGENT'} $ENV{'REMOTE_HOST'} $ENV{'REMOTE_ADDR'}\n";
# ファイルをクローズ
close(LOG);
ってやってるんですが、1回のアクセスで同じ情報が数回残るんです。
ちなみに掲示板のCGIの上のほうにつけてるんですが。
0011名無しさん@お腹いっぱい。
02/02/10 16:47ID:???前来てたよね。
確か何もかもわからないとか言って散々遊ばれた。。。
0012名無しさん@お腹いっぱい。
02/02/10 16:55ID:???表示 1回。
書き込み 1回。
リロード 1回。
同一IPアドレスからは連続して情報を書き込まないようにすれば。
0013名無しさん@お腹いっぱい。
02/02/10 16:55ID:???自分が取りたい所で取れば良し
0014名無しさん@お腹いっぱい。
02/02/10 16:55ID:???はい、来てました。
どうしても知りたかったのでこちらに質問させていただきました。
わかる人よろしくおねがいします。
0015名無しさん@お腹いっぱい。
02/02/10 16:55ID:???>>12な俺も既に回答は放棄してるよ。
もう少し具体的に書かないと。
0016名無しさん@お腹いっぱい。
02/02/10 16:55ID:???自分で書いて何処でどう動いてるか分からんのか?
改造だったら改造スレにソース上げれば教えてくれるかもな
0017名無しさん@お腹いっぱい。
02/02/10 17:27ID:Y1Zoz0Lgのエレベーター掲示板に
ttp://botan.sakura.ne.jp/~ruuzu/rebbs/rebbs.cgi?mode=res&no=33&inyoumode=35#toukou
のように引用ボタンを取り付け、テキストエリアに引用を表示したいのですがよろしくお願い致します。
エレベーター掲示板のソース
http://www.geocities.co.jp/Milkyway-Lynx/2562/UPDOWN.txt
おおまかに余分な所を取ったソース
http://www.geocities.co.jp/Milkyway-Lynx/2562/UPDOWN2.txt
0018名無しさん@お腹いっぱい。
02/02/10 20:59ID:???>>10 コード見たら解りそうだが君の財布に幾ら入ってるかは誰も答えられない
今の情報で最善のレスは、一行づつずらして全部試せ、くらいだろうね
0019名無しさん@お腹いっぱい。
02/02/10 21:03ID:???全然見てないけど。。
引用ボタンはまあ適当に付けて、
レス返信画面でボタンチェックして、
ログ開いて、s/<br>/>><br>/g;
じゃダメ?? ダメか・・・
0021名無しさん@お腹いっぱい。
02/02/11 00:18ID:???0022名無しさん@お腹いっぱい。
02/02/11 00:46ID:???煽られないうちにDownload板に行った方がいいよ。
0024<丶`∀´>←バカ
02/02/11 00:58ID:???0025名無しさん@お腹いっぱい。
02/02/11 05:03ID:???(・∀・)バーカ
002618
02/02/11 16:24ID:???理解っつうかネタなんだけど
君が>10に書いた事をコードの一番上から一行づつずらして貼り付けて
テストしてみればと言う事、3000行のコードなら3000回繰り返しね
どっかに書いてたが、いい回答はいい質問から
コピペの意味が解らなかったらPC初心者板で聞いてみよう
# 俺は消えるので後の人よろしく
0027名無しさん@お腹いっぱい。
02/02/11 17:08ID:???多分割れ板かなんかの恥ずかしいスクリプトの改造なんだろう
書けない読めないコードは出さないじゃどうしようも無い
よって放置ケテーイ
0028名無しさん@お腹いっぱい。
02/02/13 05:21ID:wBlXKE9R002917
02/02/14 18:32ID:???ありがとうございました。
引用ボタン適当に付けて、ログ呼んで
">$comment3";
s/>/>/g;
s/<br>/\r>/ig;
で上手く出来ました。
0030もにた
02/02/14 21:08ID:74mkviDHhttp://www.bsp-net.com/
さんの
http://www.bsp-net.com/soft/MobileWebEditor.html
を使いたかったのですが
いかんせん、編集したいhtmlファイルのサイズが大きいため
携帯で全部表示されないわ、パケット代かかりまくるわで
困ってしまいました。
そこで、htmlファイル内に何か特定のコメント文を仕込んで
それをcgiが認識して、その部分のみを表示・編集できたら
いいなと考えてるんですが・・・
<html>
<body>
hogehoge
<!--[start]--!>
この部分を表示して編集できる
<!--[end]--!>
hogege
</body>
</html>
こんな感じで改造したいのですが、どうすればいいでしょうか?
0031名無しさん@お腹いっぱい。
02/02/14 21:12ID:JQ2Gyegkp-inとザウルスが、3ヶ月分のパケット代で買えるよ。
0032もにた
02/02/14 21:19ID:74mkviDHいや、まぁそれはごもっともなんですが。
ハードを買うことへの抵抗と、基本料金が・・・
貧乏学生なんで、cgiで済ませたいという安直な考えです。
すいませんがよろしくお願いします。
0033名無しさん@お腹いっぱい。
02/02/15 02:50ID:SfH5n30w掲示板の「発言を下に下に伸ばしていける」スクリプトにしたいのですが、
勘でいろいろいじって「下へ伸びる形」にはやっとできたものの、
ログの最大書き込み行数を超えた時に超えた分を消していくこと
(最大行数$max_msgsを超える文の書き込み)ができなくて、困っています。
スクリプトはここhttp://www.geocities.co.jp/PowderRoom-Rose/8246/wwwboard.txtにあります。
とほほさんのところの過去ログhttp://tohoho.wakusei.ne.jp/lng/199904/99040143.htmを調べたり、
「wwwboard.tmp を作成する時点で、メッセージの個数($current_msgs)を求めて
おいて、.tmp から .dat へのコピーの際に、$current_msgs から
$max_msgs を引いた個数分、読み飛ばしを行えばよいでしょう」
という助言も戴いたのですが、具体的にどのように書けばいいのかがわからなくて……不勉強で申しわけないです、おしえてください。
0034賛成の反対の反対ナノだ!
02/02/15 04:15ID:???#
# Append messages.
#
open(IN, "wwwboard.dat");
while (<IN>) {
print OUT;
}
$current_msgs= $.; ### ADD NEW
###〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
#
# Copy .tmp to .dat
#
open(IN, "wwwboard.tmp");
open(OUT, "> wwwboard.dat");
$msgs = 0;
while (<IN>) {
next if $current_msgs-- > $max_msgs; ### ADD NEW
003533
02/02/15 04:47ID:ZtkdPyAc0036賛成の反対の反対ナノだ!
02/02/15 05:14ID:???$FORM{'MESSAGE'} =~ s/[\r\n]+$//g;
$FORM{'MESSAGE'} =~ s/\r/<BR>/g;
;### ↑の処理後、↓の書きこみが行なわれて即、閉じられているので$FORM{'MESSAGE'}の
;### 最終文字は "\n" じゃないと思われる。
;### 1データを1行で管理するタイプのスクリプトだと思うのでこれではデータ毎の区別が
;### つかないような...(気のせい?)
# 挿入するもの↓。改行とか、スペースとか。
print OUT "$FORM{'MESSAGE'}";
close(IN);
close(OUT);
0037名無しさん@お腹いっぱい。
02/02/15 05:17ID:???質問に答えた人じゃないけど…
<br>というより\nがないとログが一行になっちゃうよ?
\nが無いとwhileで廻せないと思うんだけど。
print OUT "$FORM{'MESSAGE'}<br>\n";
003933
02/02/15 05:21ID:qJwMiHXl>>34さんのスクリプトを実行し、完全解決致しました!
>34さん、あなた、「神」です!
本当に、本当にありがとうございました!
あなたが宗教開いたらぼく、入るかもしれません。
004033
02/02/15 05:23ID:qJwMiHXl0041名無しさん@お腹いっぱい。
02/02/15 05:27ID:???いや、出来たのなら、それで良いんだとおもいます。
かぶちゃったからゴメンナサイしただけで…。
良かったね。
004233
02/02/15 05:29ID:qJwMiHXl2chきてこんなありがたい思いしたのはじめてです、ありがとうございました!
0043賛成の反対の反対ナノだ!
02/02/15 05:41ID:???いそいで勧誘のチラシを刷っているところです。
「最高ですか〜〜!!」「これが定説です。」うーんチョット違うナー。
0044名無しさん@お腹いっぱい。
02/02/15 18:57ID:JdM/hpw9の問題を解こうとして、<!--start-->の所に書き込みを挿入していくのは
まあ表面上だけはできたのですが、どうもコメントタグに囲まれた部分を
編集するのとはちょっと違うなぁということに気が付きました。。
まだしばらくいじってみるかもしれませんが、一応模範解答みたいなのも
欲しいので、お願いできませんでしょうか。
元ソースは http://www.miniflo.com/cgi/up/source/040.txt
しょぼいじりかけは http://www.miniflo.com/cgi/up/source/042.txt です。
あと、元ソースのprintに相当する所の書き方は、これ真似したほうがいいんでしょうか?
実は、こういう書き方のほうが後々応用がきくとかですかね。
0045賛成の反対の反対ナノだ!
02/02/16 06:55ID:???#!/usr/local/bin/perl
(my $script= $0 )=~ s/^.*[\/\\]//g;
my( $passwd )= 'abcd';
my( $jcode )= './lib/jcode.pl';
my( $tmpFile )= "${script}_$$.tmp";
my($html,$name,$do);
my( %FORM );
require $jcode; &decode;
&Html('パスワード未設定') unless $passwd; &Html('Top Page') unless %FORM;
&Html('Password Input Error!') if $FORM{'pass'} ne $passwd;
&Html('No Data') unless ($html= $FORM{'html'})=~ tr/\r\n//d or $html;
open(IN, $FORM{'file'}); eval{ flock(IN, 1) }; open(TMP, "+<$tmpFile"); eval{ flock(TMP,2) }; truncate(TMP, 0);
(seek(IN, 0, 0) && seek(TMP, 0, 0)) or &Html('File Open Error!');
while (<IN>){
if(/(.*)<!--start-->/ .. /<!--end-->(.|\n)*/){
print TMP $& if $do && $1;
print TMP "$&\n$html\n" unless $do++; next;
}
print TMP $_;
}
close(IN); close(TMP); rename($tmpFile, $FORM{'file'}) ? &Html('Edit OK!') : &Html('Edit Error!');
sub decode{
read(STDIN, $_, $ENV{'CONTENT_LENGTH'}) unless $_= $ENV{'QUERY_STRING'};
for ( split('&') ){
($name, $_)= split('=');
tr/+/ /; s/%(..)/chr(hex($1))/eg; # s/<!--[^\-]*-->//g;
&jcode::convert(\$_,'sjis'); $FORM{$name}= $_;
}
}
sub Html{
print <<HTML;
Content-type: text/html
<HTML><BODY><FORM ACTION="$script" METHOD=POST>File:<INPUT name=file><BR>Pass:<INPUT name=pass><BR>
<TEXTAREA COLS=20 ROWS=5 NAME=html></TEXTAREA><BR><INPUT TYPE=submit VALUE=Edit> <INPUT TYPE=reset VALUE=Reset><HR>$_[$[]</FORM></BODY></HTML>
HTML
exit;
}
0046名無しさん@お腹いっぱい。
02/02/16 12:39ID:C81G2/9Shttp://www.kzm-pt.com/seimei/form.htmlのサイトさんの様に
@マークより前のアカウント部分のみ記入したら送信できるようにしたいのですが
よくわかりませんでした。
CGIはテキスト形式にしてアップしてみました。
こちらhttp://stormy.fc2web.com/webform.txt
どなたか教えてください。
よろしくお願いします。
0047名無しさん@お腹いっぱい。
02/02/16 12:44ID:???を
if (!($value =~ /(.*)\@(.*)\.(.*)/)) { $value = $1; }
0048名無しさん@お腹いっぱい。
02/02/16 13:05ID:C81G2/9S変更してみましたが、
「Eメールを入力してください」というエラーが出てきてしまい
変わらず送信できませんでした・・・
0049名無しさん@お腹いっぱい。
02/02/16 13:26ID:???0050名無しさん@お腹いっぱい。
02/02/16 16:42ID:???有り難う御座いました。出来ました。
本当に感謝してます。
■ このスレッドは過去ログ倉庫に格納されています