配布スクリプトの読めない部分を解説しちゃる
■ このスレッドは過去ログ倉庫に格納されています
Perl、PHPなんでもござれ。 配布スクリプトの中でよくわからん構文などがあったら解読&解説しちゃる。
ここは他人のソースが読めない>>1 =本7の教えてスレです >>2 漏れがスレ立てるといっつも本7とか言われるYO! じゃwemaっていうWIKI派生のスクリプト一式お願いします。 >>5 マリガトー。 >>6 あくまで一部。 数行がどうしてもわからん!ってときに解説します。 >>1 解説してください。 $str =~ s/"/"/g;#" セミコロンのあとの#"って意味があるんでつか? 答えは漏れも知ってるんでつが、>>1 さんの実力が知りたいんでつ。 >>1 Wemaの一部ということで。 wema.cgi:289 if id.nil? or id == '' nfn = "#{dir}/#{Time.now.strftime("%Y%m%d%H%M%S")}#{$$}.txt" else nfn = "#{dir}/#{id.sub(/id/,'')}.txt" end ここの処理は何やってるんでしょ? よ-し、お姉さん質問しちゃうよ-- jcode.plの読み方がわかりません。 今はじぇーこーどぴーえると読んでいますが もっとかわいい呼び方を教えてください。 おまいら、あんまり>>1 をイジメんなよ。 もう出てこれないだろうなw これでも>>1 は懲りずに別の教えてスレをまた立てるんだろうな >>1 ももういないと思うので>>8 の答えキボンage "が1個しかないとエディタによっては色が変になってしまうってコトですね そのため対応する"をコメントにして記入してあると。 漏れの使ってるのではならない。 でも一つ目の"以降が行末まで全部色が変わっちゃうから"をエスケープしてる。 マジレス希望。 グラフ出力のPHPコードらしいのだが、よく分からん。 誰か頭のいい人解説して下さい。 sub graphGet { my($len,$out,$min); my($max,$now,$width,$height,$gif_name,$gif_name2) = @_; if($now){ $len = int($now / $max * $width); if($len > $width){ $max = $width . 'px'; $out = "<img src=\"$GIF_URL/$gif_name\" width=\"$max\" height=\"$height\">"; }elsif($len <= 0){ $aaa = $max; $max = $width . 'px'; $out = "<img src=\"$GIF_URL/$gif_name2\" width=\"$max\" height=\"$height\" alt=\"$aaa / $now\">"; }else{ $max = $len . 'px'; $min = $width - $len;$min = $min . 'px'; $out = "<img src=\"$GIF_URL/$gif_name\" width=\"$max\" height=\"$height\">"; $out .= "<img src=\"$GIF_URL/$gif_name2\" width=\"$min\" height=\"$height\">"; } }else{ $max = $width . 'px'; $out = "<img src=\"$GIF_URL/$gif_name2\" width=\"$max\" height=\"$height\" alt=\"1\">"; } return $out; } >>21 え。perlなの? 解説よろしくお願い! >>23 #grapGetという名前の関数(サブルーチン)を定義 sub graphGet { #関数内だけで使うmy変数を宣言 my($len,$out,$min); #引数を変数に代入 my($max,$now,$width,$height,$gif_name,$gif_name2) = @_; 以下略 #$outを戻り値にして終了 return $out; } >>20 このスクリプトは恐らく何かの改造版。 一応動いてはいたがある日改造者のもとへ一通のメールが来た。 しかし改造したやつのレベルは低くオリジナルにあった不具合を解決できるはずもなかった。 「いい機会だ。このままサイトを閉鎖しよう」 そう思い立った改造者はユーザーに何の挨拶もなく消えていったのであった。 数年後、ユーザーがネットを検索していると得体の知れないサブルーチンだけが キャッシュとして残っていることに気づいた。 「まさかこの関数はあのスクリプトのものではないか!」 ユーザーはあの時の思いを熱く語ろうとしている。 そんな関数。 >>20 $max, グラフの最大値 $now, グラフの表示値 $width, グラフ全体の幅 $height, グラフの高さ $gif_name, 表示値用の画像 $gif_name2 グラフ残りの部分用の画像 $out グラフのhtml >>24 お〜!ありがとうございます。 以下略と言うのが、ナマゴロシ。。 やっぱり、コレくらいのスクリプトだったら、すぐにパパパって分かっちゃうもんですか? >>25 ん〜、イミフだが 自作だって言ってたような気が。。。 >>26 レスありがとうございます。 ところで、$gif_name2 グラフ残りの部分用の画像 と言うのは何のことですか??背景? >>27 ┌───────────┬────────┐ │ $gif_name .│ $gif_name2 │ └───────────┴────────┘ >>28 ありがとう。 $gif_name の部分がグラフで $gif_name2 は枠内の、グラフじゃない部分の埋め合わせのためにあるんだね!背景として枠を調整するためにある。という解釈でいいのかな? $page = ($page == int($page) ? $page : int($page + 1)); これの ? と : の意味が良くわかりません・・・。 どなたか教えてくださいm(_ _)m usr/bin/perl sub uri_decode{ my $str = shift; $str =~ tr/+/ /; $str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; return $str; } このpack('H2', $1)の意味がわかりません。教えてください。 検索してみたんですが'H'が意味する「ニブル」ってどういうものですか? '$1'ってところも記述ミスな気がするんですが >>32 http://e-words.jp/w/E3838BE38396E383AB.html http://www.kt.rim.or.jp/ ~kbk/perl-5.8/perlretut.html#extracting_matches 例えば $str = "%41"; の場合、$1 には "41" が代入される。これを "H2"、 つまり2桁のニブル表現と解釈してバイトデータに pack する。 "41" という文字列 → ニブルの 4 と 1 → 二進数の 0100 と 0001 → pack して 01000001 → 十進値 65 のバイトデータ → ASCII の "A" >>33 詳しくありがとうございます。 良く分かりました。 でも、"$1"と言うのはこの場合許されるんでしょうか? スカラ名の最初の一文字に数字を使用するのは好ましくないですよね? "$i"のミスタイプかも知れないのですが… ここらへんお願いします >34 $1、$2・・・は「スカラー変数」じゃないぞ。 「正規表現に関する特殊変数」だ。 >>34 とりあえず示された URL のページくらいは読もうか。 perlvar にも $<digits> として載っている。 http://perldoc.jp/docs/perl/5.6.1/perlvar.pod >>35 $1、$2 …は「ユーザ定義変数」ではないがれっきとした「スカラー変数」 なので、その表現では君が本当に言わんとしている事が正しく伝わらない。 ちなみに「ユーザ定義の変数名や関数名に使える文字列」を指すには 「識別子」という単語があって、/^(?:[A-Za-z]|_\w)\w*\z/ にマッチする ものとなる。 http://www.kt.rim.or.jp/ ~kbk/perl5.005/perldata.html この命名規則に沿っていないのにエラー無しに使えていれば、それは 特殊変数という事だ。シンボリックリファレンスや encoding プラグマを 使えば無茶な名前も付けられるがお勧めはしない。 このスクリプトの書き方で、おかしい所を指摘してくれませんか? #!/usr/bin/perl require "../lib/jcode.pl"; require "../lib/mimew.pl"; $mailto ='hoge@hogehoge.jp'; $subject ='タイトルだよ'; $mail = $cgi->('mail'); $name = $cgi->('name'); $kana = $cgi->('kana'); $subject = mimeencode($subject); open(MAIL, "| /usr/lib/sendmail -t"); print MAIL "To: $mailto\n"; print MAIL "From: $mail\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "お名前は= $name\n"; print MAIL "フリガナは= $kana\n"; close(MAIL); 年始早々、このような低レベルの質問で申し訳ありません。 よろしくお願い致します。 >>35-36 助かりましたありがとうございました 今外出中で、携帯なので帰ったらURL見させてもらいます。 >>38 なになに?どういうこと? 見たけど何かヒントあったの? あっちで聞けってことか...orz 教えてくれよ いや、教えてください。 >37はどこかで配布されてるスクリプトなのかね? そうでないのならスレ違いだ スクリプト自体は少し前のもので、現在はもう作者の継続サイトはないようです。 しかも質問部分は長いのですが、「それでもよい」という方がいらっしゃいましたら解説お願いします。 この中の database.cgi の 312 行目以降すべて (キーワード処理部分と検索部分) が 全般にわたってまったくわかりません。一挙でなくて少しずつでもよいので、各行最後までお願いします。 http://hpcgi2.nifty.com/wanchan/dl.cgi/database.lzh?name=database.lzh&rootcheck=1 >>47 スクリプトについているコメント通りとしか言いようがないです。 どこがわからないのか教えてください。 じゃあ、とりあえず if(substr($buf, 0, 3) != '+OK') die($buf); $buf = _sendcmd("USER $user"); $buf = _sendcmd("PASS $pass"); $data = _sendcmd("STAT");//STAT -件数とサイズ取得 +OK 8 1234 sscanf($data, '+OK %d %d', $num, $size); を解説してもらえませんか まず、_sendcmdという関数が下の方にあると思うけど これは、POPサーバーにコマンドを送って結果の一行だけ受け取る関数 で、それを使って USER PASSの各コマンドでユーザー名とパスワードを送って STATで件数とサイズを取得している。 これらはPOPプロトコルのコマンドだから「POP コマンド」あたりでググると意味がわかると思う。 >>49 それの何がわからないというの 文字列$bufの先頭3文字が'+OK'じゃなかったら$bufを表示して終了。 _sendcmd関数に引数"USER $user"を渡して戻り値を$bufに代入。 引数"PASS $pass"で同上。 引数"STAT"で戻り値を$dataに入れる。$dataのフォーマットはコメントに記載 $dataから件数とサイズをそれぞれ$numと$sizeへ代入する。 Perlで 1 while $MSG =~ s/^(\d+)(\d\d\d)/$1,$2/; の頭の"1"ってどういう意味ですか? >>52 >質問部分は長いのですが、「それでもよい」という方がいらっしゃいましたら解説お願いします。 そんな暇な人はいらっしゃらないようですね。 wikiのページを見ていたらこんなのがありました。 ↓↓↓ #$fp = fopen( "php://stdin", "r" ); #$response = trim( fgets( $fp ) ); #fclose( $fp ); $response="yes"; これは、どういうことなのでしょうか? php://stdinとは何なのでしょうか? >>55 標準入力から一行読み込んで $response に代入、というのを コメントアウトして、$response は 'yes' 決め打ちにしている。 http://www.php.net/manual/ja/wrappers.php.php ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる