【Perl】初心者コーナー Part15
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/08/08 23:19ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0082nobodyさん
02/08/11 02:25ID:uMk9XU0wPERLと関係あるのか?
漏れが無知なだけか
0083nobodyさん
02/08/11 11:47ID:U9P8YsFW書き込み時にログに記録されたIPを、そのままHTML出力に表示させたいのですが、
全部の行が今の自分のIPになってしまいます。
$ad = $ENV{'REMOTE_ADDR'};
とCGIに記述して、
表示させたい部分に$adを埋めるだけじゃダメなんですか?
IP表示ができるCGIを落として解析しても、同じような記述しか出てこないもので。
ex) print (($ENV{'REMOTE_HOST'}) ? $ENV{'REMOTE_HOST'} : $ENV{'REMOTE_ADDR'});
ex) if($sw_host==1){
print "<FONT SIZE=$moji1 COLOR=\"$DTcolor\">\n";
print "$date<BR>$ip $host\n";
print "</FONT>\n";
0085nobodyさん
02/08/11 12:32ID:U9P8YsFWログには保存しているんです。
ただ、HTML出力のソースを見ると、>>83のように、
$ENV{'REMOTE_ADDR'}; したものを$adみたいにして出力するような記述なんですね。
ログから引っ張ってるような記述が見当たらない…
0086nobodyさん
02/08/11 12:37ID:???【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/l50
上のスレのお世話になってはいかが?
008785
02/08/11 12:41ID:U9P8YsFW# IPアドレスを取得
$addr = $ENV{'REMOTE_ADDR'};
if ($name eq "") { $name = $addr; }
して
unshift (@lines,"$date<>$n_name<>$n_email<>$com<>$n_color<>$addr<>\n");
つまりログには保存されています。
これがなぜ、吐き出しになるとだめなのか、今やっとわかりました。
# ログを展開
open(IN,"$logfile") || &error("Open Error : $logfile");
while (<IN>) {
$head = $point;
local($date,$name,$mail,$com,$color,$ip) = split(/<>/);
$addrとすべきところを故意に$ipとして吐き出さないように記述してあったからみたいです。
0088nobodyさん
02/08/11 13:10ID:???008985
02/08/11 13:15ID:U9P8YsFWこちらはDBファイルのデータがタブ区切りで、読み出しもただ変数を羅列しているため、
その順番どおりに表示するようになっていました。
もともとIPは記録しない仕様のため、適当にタブの間にIPを付け足したのが間違いで、
読み込みの順番どおりにDBファイルのタブ区切りを修正したら表示されるようになりました。
俄然perlが面白くなってきますたよw
0091nobodyさん
02/08/11 13:37ID:???スクリプトはちゃんと吐き出してる。$ipとして。
0093nobodyさん
02/08/11 16:05ID:wwIT5eGLこのスクリプトなのですが、時間設定で
sprintfを使わずに、
if ($month < 10) { $month = "0$month"; }
if ($mday < 10) { $mday = "0$mday"; }
if ($sec < 10) { $sec = "0$sec"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
としたり、
($sec_t,$min_t,$hour_t,$mday_t,$mon_t,$year_t,$wday_t,$yday_t,$isdst_t) = localtime(time + 7*24*60*60);
($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60);
という風にlocaltimeとgmttimeを使い分けたりする意味はあるのでしょうか?
前者は処理が早くなるとか・・・?
オシエテクダサイ
0097nobodyさん
02/08/11 19:40ID:???0098nobodyさん
02/08/11 19:44ID:???そうでもないものなんですか
0099nobodyさん
02/08/11 19:44ID:???0100nobodyさん
02/08/11 19:46ID:???0101お願い!
02/08/11 19:56ID:5quTF2lDというテキストを
2ch
2ch
2ch
というように改行させたいです。
テキストエディタの置換機能で「2ch」→「2ch\r\n」としたら、
2ch\r\n2ch\r\n2ch\r\n
となってしまいますた。
テキストエディタで改行するのって無理ですか?
ActivePerl入れなきゃだめかな?
0102nobodyさん
02/08/11 19:57ID:???0103nobodyさん
02/08/11 20:32ID:???たとえば7日以内としたら
#!/usr/local/bin/perl
$times=書き込み時のtime;
$limit=7*60*60*24;
$now=time;
$limit_time="$now-$limit";
print "Content-type: text/html\n\n";
if($times>$limit_time){print"NEW";}
でいいと思うのですが、上手くできませんでした。
ヒントを頂けないでしょうか?
$times が当時の書き込み時間で
$now が現在の時間なんでしょ?
だったら
$now - $times
で何秒たったか分かる
たとえば$nowに110000がはいってて$timesに100000がはいってれば
その差は10000秒になる
んでこれと$limitを比べればいいんでないの?
0106nobodyさん
02/08/11 22:53ID:QpOp3e8Yおい。お前ら!応援投票しろ!
0107nobodyさん
02/08/11 23:56ID:???whileで回す方法と、配列に一気に読んでforeachで回すのとでは
メモリは食うけど、foreachで回すほうが処理は速いんですかね?
それともwhileで回す方法が速い?
0108nobodyさん
02/08/12 00:15ID:???使いこなせるかな? readでも使ったら?
0109nobodyさん
02/08/12 00:25ID:???0110nobodyさん
02/08/12 01:49ID:y1lt6txeブラウザに記憶される名前が変になります。
ひろゆき、だとしたら、「ひろゆき_30__checked_red_30_8/12(月)1:30_2_checked_」
どうも、リロード時間や文字色等の情報まで全部ついてきてしまってるようで…
これは固有のバグでしょうか。
0111nobodyさん
02/08/12 01:58ID:???0112nobodyさん
02/08/12 02:02ID:y1lt6txeでも、他サイトの無改造のゆいぼっとにクッキー全部消去してからお邪魔して
退室したあとにまた入室画面で名前欄を見ると同じようになってるんですよ。
0113110
02/08/12 02:11ID:y1lt6txeなぜ、 \t で区切ったものが、吐き出されるときに _ に変わってるんだろう。
sub getcookie{#くっきーを頂きます。
$cooks = $ENV{'HTTP_COOKIE'};
$cooks = '' unless($cooks =~s/.*yuidata=(.*)yuiend.*/$1/);
($name,$reload,$email,$mode,$color,$window,$lastdate,$count,$autoclear) = split(/\t/, $cooks);
$histry = "$count回目:LAST LOGIN:$lastdate" if($lastdate);
if(!$count){#くっきー情報の無い場合のデフォルト値
$reload = 30; $mode = 'checked';$color = 'red'; $window = 30;
$count = 1;$autoclear = 'checked'; }
}#getcookie END
sub setcookie{#くっきーをブラウザにプレゼントします。
local($dmy,$mdc,$monc,$yrc,$wdayc,$mc,$yc);
($dmy,$dmy,$dmy,$mdc,$monc,$yrc,$wdayc,$dmy,$dmy) = localtime($times + 7776000);
$yc = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$wdayc];
$mc = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') [$monc];
$yrc = $yrc+1900;$mdc = "0$mdc" if ($mdc < 10);
$count++;
$data = "$name\t$reload\t$email\t$mode\t$color\t$window\t$date\t$count\t$autoclear\tyuiend";
$data = 'yuiend' if($FORM{'cook'} ne 'ok');
print "Set-Cookie: yuidata=$data; expires=$yc, $mdc-$mc-$yrc 00:00:00 GMT\n";
0114nobodyさん
02/08/12 02:14ID:???0115110
02/08/12 02:41ID:y1lt6txe= split(/\t/, $cooks);
を
= split(/_/, $cooks);
にしてしまったらうまくいきました。
しかし、環境依存でバグが出るかもしれませんね。
UNIXやMACのクッキーはよく知らないんですが。
0116110
02/08/12 02:47ID:y1lt6txeなんか、IE6.0のバグっぽい。
ということは、それ以外のブラウザではやはり問題が起きてないかもですね。
0117nobodyさん
02/08/12 02:50ID:???IEが正しくて、ほかが間違ってる
んなこたぁない。IEが間違えてることの方が多い。
0118110
02/08/12 03:02ID:y1lt6txeIE6にあわせた修正をしたバージョンでは逆にトラブルになりました。
区切りを本当に_ にしたがダメ。区切りとsplitを, であわせたところ、
IE6、ネスケともにトラブルは収まりました。
MS、恐るべし…
0119nobodyさん
02/08/12 03:05ID:VEDKxtaL違うな
IEが間違ってて、そのCGIも間違ってる。
そして仕様と言い張る。
0120nobodyさん
02/08/12 03:16ID:???制御文字はNG
http://www.ietf.org/rfc/rfc2965.txt
0121nobodyさん
02/08/12 03:20ID:???まぁ、CSSもネスケ4.7が悪い品。
0122nobodyさん
02/08/12 07:05ID:???いえいえ悪いのはオマエの頭だけです
0124nobodyさん
02/08/12 14:23ID:???0125困ったチャン
02/08/12 17:38ID:???パスワードを入力して
認証してOKならページ移動
の処理を作成中なんッスけど
認証のためのデータをあるファイルから
参照してハッシュを使ってIDをキーにして
パスワードをデータにして、
IDを比較するのはOKなんッスけど、
パスワードの比較はどうしたらイイんでしょうか?
ようはキーの中身の比較っすね
0126困ったチャン
02/08/12 17:58ID:???0127nobodyさん
02/08/12 18:26ID:???0128困ったチャン
02/08/12 18:30ID:???0130nobodyさん
02/08/12 22:25ID:???0131nobodyさん
02/08/12 23:21ID:???0132nobodyさん
02/08/12 23:50ID:???…そんなcgiってありますか?
もしあったら、参考になるサイト、もしくはプログラムを
お教え下さい。
0134nobodyさん
02/08/13 00:08ID:???0135nobodyさん
02/08/13 01:27ID:???ほれ。
文化庁がトップページ以外へのリンクを機械的に拒否
http://slashdot.jp/article.pl?sid=02/07/09/0626258&mode=thread
0136nobodyさん
02/08/13 01:31ID:/aTNrvJIカウントするスクリプト、どっかに落ちてますか?
別に自分で見れればページに表示するつもりはないです。
0138nobodyさん
02/08/13 01:40ID:???0139nobodyさん
02/08/13 12:05ID:???スクリプト開始時に自前のcookieを発行→直後それを照合出来ればcookie有効、出来なければcookie無効と見なして弾く。
そう難解でもないかと>133
0140nobodyさん
02/08/13 15:47ID:???ちょっと時間が空いたので,1行200bytes(+crlf)の500行で約100kb程度のファイルをメモリに読み込むテストを行いました.
test1 @a = <FILE>と一度に全て読み込む.
test2 whileでループして1行ずつ読み込む.
この処理を500回ループして,経過時間を計りました.
結果.
TEST1: 39 wallclock secs (38.23 usr + 0.00 sys = 38.23 CPU) @ 13.08/s (n=500)
TEST2: 36 wallclock secs (35.86 usr + 0.00 sys = 35.86 CPU) @ 13.94/s (n=500)
と,微妙にtest2の方が効率が良いと出ました.
以下が実際に使用したソースです.
0141nobodyさん
02/08/13 15:47ID:0NNEcJ22use Benchmark;
my $count = 500;
sub test1{
open(FILE,'test1.data');
my @a = <FILE>;
close(FILE);
}
sub test2{
open(FILE,'test2.data');
my $a = $_ while(<FILE>);
close(FILE);
}
@t = timethese($count,{
'TEST1' => '&test1;',
'TEST2' => '&test2;',
});
0142nobodyさん
02/08/13 15:57ID:0NNEcJ22foreach 文は
・扱うデータ量が少なく,ファイルをすぐに閉じたい場合.
・同じデータを繰り返し使用する場合.
while 文
・データ量が大きく,配列を生成すると莫大なメモリを使用してしまう場合.
・データの1部分だけを必要とし,無駄なデータを読む込みたくない場合.
という事でした.
0143nobodyさん
02/08/13 21:45ID:Q5/MwQBf凄く普通の結論。
0144nobodyさん
02/08/14 00:05ID:???0146nobodyさん
02/08/14 00:26ID:LHt/Hq/vある変数をサブルーチン名に代入したりできるのでしょうか?
&サブルーチン名=変数; みたいにしたいのです
例えば
&hazime というサブルーチンを使いたい時
&(ココの書き方が分かりません)=$hazime;
みたいのことができるのでしょうか?
0147nobodyさん
02/08/14 00:31ID:???$count = &con();
0148147
02/08/14 00:31ID:???0149nobodyさん
02/08/14 00:54ID:???0150nobodyさん
02/08/14 08:03ID:???なんでしょかね?これ??
#!/usr/bin/perl-s
$f=$d?-1:1;$D=pack('C*',33. .86);$p=shift;
$p=~y/a-z/A-Z/;$U=~s/( . *)U$/U$1/;
$D=~s/U( . )/$1U;';($V=$U)=~s/U/V/g;
$p=~s/[A-Z]/$k=ord($&)-64,&e/eg;$k=0;
while(<>){y/a-z/A-Z;y/A-Z//dc;$o.=$_}$o.="X"
while length ($o)%5&&!$d;
$o=~s/.chr(($f*&e+ord($&)-13)%26+65)/eg;
$o=~s/X*$//if$d;$o;$o=~s/.{5}/$&/g;
print"$o|n";sub v{$v=ord(substr($D,$_{0}))-32;
$v>53?53:$v}
sub w{$D=~s/(.{$_{0})(.*)(.)/$2$1$3}}
sub e{eval"$U$V$V";$D=~s/(.*)([UV].*[UV])(.*)/$3$2$1/;
&w(&v(53));$k?(&w($k)):($c=&v(&v(0)),$c>52?&e:$c)}
0152nobodyさん
02/08/14 14:31ID:8dp0qhB8HTMLソースをHTML形式のメールに変換するスクリプトをご存知ないでしょうか?
HTML形式のメールは、HTMLソースがそのまま本文中に書いてあるのだと
ばかり思ってましたが、MHTMLとかいう形式があるようで・・・
0153nobodyさん
02/08/14 14:48ID:???スレ違い
【CGI初心者コーナー】
http://pc.2ch.net/test/read.cgi/php/1028646335/
0154nobodyさん
02/08/14 14:56ID:8dp0qhB8リンク先は「まぁ、またお前は騙されたわけだが・・・ 」というスレッドです。
0156nobodyさん
02/08/14 22:41ID:dH0XveEg-------------------------
#!/usr/local/bin/perl
print"Content-type: text/html\n\n";
print "購入申し込み";
-------------------------
と書いて実行すると、
-------------------------
購入垂オ込み
-------------------------
と表示されてしまいます。
どうしてでしょうか?
何か基本的なことを間違えてるのでしょうか。
0157nobodyさん
02/08/14 23:19ID:???0158nobodyさん
02/08/14 23:26ID:???157じゃないけど、具体的には「申」のあとに\を入れろって事。
申\し込み
なぜこうなるかというと、「申」のShift-JISでの2バイト目が'\'(0x5c)だから。
0159nobodyさん
02/08/14 23:35ID:???$a = 1 << 2 としてみました
00000100 になると思ってたんですが
unpack("B*",$a) としてみたら
00110100 となっていました
上4ビットはなんなんですか
0162156=154=152
02/08/15 01:27ID:5Zkc/vw2EUCに変換して解決しました。
ありがとうございました。
>>158
分かりやすい解説ありがとうございます。
勉強します。
152の問題も解決しました。
スクリプトは見つかりませんでしたが、
Content-type: multipart/alternative;boundary="--- ・・・
を付けて、テキスト部分とHTML部分を区切るだけで出来ました。
ありがとうございました。
0163↓晒しヽ(`Д´)ノアゲー
02/08/15 02:47ID:???http://rating.auctions.yahoo.co.jp/jp/show/rating?userID=hidekurokawa&filter=-1
評価: 非常に悪い 落札者です。評価者は manaboon2001 (21)
IBM Deskstar ATA100/60GB 7200rpm 送料込み!! (6月 9日 23時 14分)
出品者は「 非常に悪い 」と落札者を評価しました。
コメント:取引終了後、1週間のうち私から3度メールでご案内しても何も返事がありませんでした。
お前はブラックリスト入りだ!! (6月 15日 23時 7分) (最新)
評価: 非常に悪い 落札者です。評価者は goodnanews (2)
デジタルミキサー Fostex VM04 (11月 11日 5時 49分)
出品者は「 非常に悪い 」と落札者を評価しました。
コメント:一方的な理由でキャンセルされました。自分が落札した商品には責任を持って対処してください。 (11月 14日 12時 36分) (最新)
評価: 悪い 落札者です。評価者は gtak55 (42)
FOSTEX☆MN06☆6チャンネルミキサー (10月 17日 5時 9分)
出品者は「 悪い 」と落札者を評価しました。
コメント:キャンセルの理由が納得いきません。落札したものはどんな理由があれ責任を持って購入すべきではないでしょうか?
(10月 18日 23時 48分) (最新)
評価: 非常に悪い 落札者です。評価者は hiroalive2000 (35)
定価98000円のスーパーリズムマシンプラス・メモリー9800円あわせて12000円即決 (9月 19日 2時 23分)
出品者は「 非常に悪い 」と落札者を評価しました。
コメント:最悪です。何度連絡してもメールくれません。完璧な無視です。多分オークション二酸化しないほうがいい人
ですからこんな人は注意してください。みなさん。 (9月 24日 19時 33分)
コメント:これかいたらすぐに返事がくるんですよ。こういうやつがふえてるんで・・・。
今まで完璧な無視してきたらこうかかれると私にしつこいとか言ってもんくつけるんですよ。すいそくですが・・・・
日ずけ見て下さったら皆さんわかると思います。 (9月 24日 19時 36分) (最新)
0164nanasi
02/08/15 04:12ID:???したいのですがどのようにしたら良いのでしょうか
0166nanasi
02/08/15 05:50ID:???http://www.cj-c.com/cgi_s/upb.htm (UPP BORD)
を設置してるのですがあっぷした画像のみを他サイトの掲示板で
転載されて困ってるので他サイトからあぷされた画像を閲覧した場合
自分のHPのTOPに飛ぶようにしたいのです。
あっぷされた画像直リンの場合弾きたいということです。
どうか方法教えてください
0167nobodyさん
02/08/15 11:08ID:???画像の直リンク防ぎたいなら .htaccess の出番かと
「.htaccess 画像 制限」 こんな感じのキーワードで
googleで検索すれば解説してるサイトみつかるべ。
これ以上はスレ違いなので、あとはご自分で・・・
0168エロ助
02/08/15 11:32ID:h1WzO6+xhttp://www.kemokemo.com/products/picchabo/picchabo203.lzh
上(掲示板CGI)に下(ランダム広告CGI※呼び出しによりSSI使用しない方)を設置したいのですが『インターネットサーバーエラー』になります。(;_;)
一通りパーミッション設定などを説明どうりやってみたのですが設置できないんです。。(;_;)なぜでしょう??(;_;)
どうか教えていただけないでしょうか。。(;_;)
また呼び出しのときの記述が『require 'rand.pl'; rand::main($Op1,$Op2,$Op3);』を記述しろと書いてあったので正確に記述したのですが『インターネットサーバーエラー』になってしまうんです。。(;_;)
『$buffer』でも記述したんですがだめでした。
http://taihei.cc/pc/cgis/random.html
http://taihei.cc/pc/cgis/randban11.lzh
0169nobodyさん
02/08/15 11:34ID:???0170nobodyさん
02/08/15 14:23ID:???縮小画像を生成したいんですが、
私の知っている方法ではroot権限の関係で共有スペースでは不可能なのですが
root権限の関係無しに縮小画像を生成する方法はありますか?
0171nobodyさん
02/08/15 15:09ID:???/ ̄ ̄ ̄ ̄ ̄ ミ
/ ,――――-ミ
/ / / \ |
| / ,(・) (・) |
(6 つ |
| ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| /__/ / < HTMLでできるだろ!
/| /\ \__________
0172nobodyさん
02/08/15 15:33ID:???GDを使うといい。GD.pmで検索しる。
http://member.nifty.ne.jp/hippo2000/perltips/GD.html
0174アップローダを作り隊
02/08/15 18:04ID:OdAnllx3どうもわからんのです。
フリーのアップローダのソースを見ても掲示板とかが邪魔で
肝心のアップローダの仕組みがわからず。。。
perlのリファレンス本を何冊か読んでも、
何をアップローダに使えばわからず。。。
どうか皆様、この私にアップローダの「ア」の字くらいを教えてくださいませんでしょうか。
0175170
02/08/15 18:24ID:???3<>コメント
1<>コメント
ログファイルにこういう形で保存されいて
1 2 3の中のもっとも大きい数字を求めるにはどうすればいいのでしょうか?
0177170
02/08/15 18:40ID:???0178nobodyさん
02/08/15 18:44ID:???0179nobodyさん
02/08/15 19:04ID:???ゆいのーとの最初の方をみれば割と判るとおもう。
http://zurubon.strange-x.com/uploader/src/
調べるなら「Content-type: multipart/form-data」で。
http://www.tsden.org/ryutaroh/fileupload-j.shtml
0180アップローダを作り隊
02/08/15 19:52ID:OdAnllx3スマソ。やっぱりわからんです。
設定するところをして、CGI対応のサーバーにアップしたのですが、
ファイルサイズがやけに小さくなって、しかも開けず。
自分のPCにApache入れてるんですが、それでも同じ結果です。
他のアップローダーもファイルサイズが同じように小さくなります。
ちなみにJPGファイル。
対応してるはずなんですが。。。
アップローダー十個くらい試してみたのですが、全滅です。。。
設定がいけないんでしょか?
■ このスレッドは過去ログ倉庫に格納されています