配布スクリプトの読めない部分を解説しちゃる
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/09/11 04:02:39ID:flbBPOWm配布スクリプトの中でよくわからん構文などがあったら解読&解説しちゃる。
0004nobodyさん
04/09/11 06:34:09ID:???0006nobodyさん
04/09/11 11:37:08ID:???0008nobodyさん
04/09/12 07:58:08ID:???解説してください。
$str =~ s/"/"/g;#"
セミコロンのあとの#"って意味があるんでつか?
答えは漏れも知ってるんでつが、>>1さんの実力が知りたいんでつ。
0009nobodyさん
04/09/12 10:00:29ID:???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
ここの処理は何やってるんでしょ?
0010nobodyさん
04/09/12 16:11:27ID:???jcode.plの読み方がわかりません。
今はじぇーこーどぴーえると読んでいますが
もっとかわいい呼び方を教えてください。
0015nobodyさん
05/02/03 14:58:30ID:???0016nobodyさん
05/02/03 15:46:05ID:???0017nobodyさん
05/02/03 17:14:06ID:???そのため対応する"をコメントにして記入してあると。
001815
05/02/03 23:20:08ID:???でも一つ目の"以降が行末まで全部色が変わっちゃうから"をエスケープしてる。
0019nobodyさん
05/02/16 16:24:55ID:???0020nobodyさん
2005/12/13(火) 03:38:14ID:T2HC5b4/グラフ出力の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;
}
0022nobodyさん
2005/12/13(火) 08:04:19ID:???0023nobodyさん
2005/12/13(火) 10:29:49ID:T2HC5b4/え。perlなの?
解説よろしくお願い!
0024nobodyさん
2005/12/13(火) 11:55:49ID:???#grapGetという名前の関数(サブルーチン)を定義
sub graphGet {
#関数内だけで使うmy変数を宣言
my($len,$out,$min);
#引数を変数に代入
my($max,$now,$width,$height,$gif_name,$gif_name2) = @_;
以下略
#$outを戻り値にして終了
return $out;
}
0025nobodyさん
2005/12/13(火) 22:19:19ID:???このスクリプトは恐らく何かの改造版。
一応動いてはいたがある日改造者のもとへ一通のメールが来た。
しかし改造したやつのレベルは低くオリジナルにあった不具合を解決できるはずもなかった。
「いい機会だ。このままサイトを閉鎖しよう」
そう思い立った改造者はユーザーに何の挨拶もなく消えていったのであった。
数年後、ユーザーがネットを検索していると得体の知れないサブルーチンだけが
キャッシュとして残っていることに気づいた。
「まさかこの関数はあのスクリプトのものではないか!」
ユーザーはあの時の思いを熱く語ろうとしている。
そんな関数。
0026nobodyさん
2005/12/14(水) 07:37:52ID:???$max, グラフの最大値
$now, グラフの表示値
$width, グラフ全体の幅
$height, グラフの高さ
$gif_name, 表示値用の画像
$gif_name2 グラフ残りの部分用の画像
$out グラフのhtml
0027nobodyさん
2005/12/18(日) 06:28:39ID:Sn4KdT5Zお〜!ありがとうございます。
以下略と言うのが、ナマゴロシ。。
やっぱり、コレくらいのスクリプトだったら、すぐにパパパって分かっちゃうもんですか?
>>25
ん〜、イミフだが 自作だって言ってたような気が。。。
>>26
レスありがとうございます。
ところで、$gif_name2 グラフ残りの部分用の画像
と言うのは何のことですか??背景?
0028nobodyさん
2005/12/19(月) 08:26:48ID:???┌───────────┬────────┐
│ $gif_name .│ $gif_name2 │
└───────────┴────────┘
002927
2005/12/20(火) 21:34:54ID:HQXojDYhありがとう。
$gif_name の部分がグラフで
$gif_name2 は枠内の、グラフじゃない部分の埋め合わせのためにあるんだね!背景として枠を調整するためにある。という解釈でいいのかな?
0030nobodyさん
2006/01/03(火) 22:38:47ID:JH1IlXy/これの ? と : の意味が良くわかりません・・・。
どなたか教えてくださいm(_ _)m
0031nobodyさん
2006/01/03(火) 23:05:07ID:???0032nobodyさん
2006/01/04(水) 10:05:01ID:???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'ってところも記述ミスな気がするんですが
0033nobodyさん
2006/01/04(水) 11:02:02ID:???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"
003432
2006/01/04(水) 12:18:10ID:???詳しくありがとうございます。
良く分かりました。
でも、"$1"と言うのはこの場合許されるんでしょうか?
スカラ名の最初の一文字に数字を使用するのは好ましくないですよね?
"$i"のミスタイプかも知れないのですが…
ここらへんお願いします
0035nobodyさん
2006/01/04(水) 12:33:34ID:???$1、$2・・・は「スカラー変数」じゃないぞ。
「正規表現に関する特殊変数」だ。
0036nobodyさん
2006/01/04(水) 13:33:36ID:???とりあえず示された 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 プラグマを
使えば無茶な名前も付けられるがお勧めはしない。
0037nobodyさん
2006/01/04(水) 14:03:19ID:ClLRhAWO#!/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);
年始早々、このような低レベルの質問で申し訳ありません。
よろしくお願い致します。
0038nobodyさん
2006/01/04(水) 14:19:29ID:???自作CGIを評価するスレ
http://pc8.2ch.net/test/read.cgi/php/1049514428/
004037
2006/01/04(水) 23:33:56ID:ClLRhAWOなになに?どういうこと?
見たけど何かヒントあったの?
あっちで聞けってことか...orz
教えてくれよ
いや、教えてください。
0041nobodyさん
2006/01/05(木) 00:23:03ID:???そうでないのならスレ違いだ
0042nobodyさん
2006/01/05(木) 01:55:21ID:???20世紀のスクリプト
004337
2006/01/05(木) 02:01:34ID:+yKIo2wfスレ違い須磨祖。他逝ってくる
0044nobodyさん
2006/04/12(水) 17:45:59ID:AxAuwUbHしかも質問部分は長いのですが、「それでもよい」という方がいらっしゃいましたら解説お願いします。
この中の database.cgi の 312 行目以降すべて (キーワード処理部分と検索部分) が
全般にわたってまったくわかりません。一挙でなくて少しずつでもよいので、各行最後までお願いします。
http://hpcgi2.nifty.com/wanchan/dl.cgi/database.lzh?name=database.lzh&rootcheck=1
004644
2006/04/13(木) 16:34:10ID:C+gS5L5K0047nobodyさん
2006/04/14(金) 01:35:44ID:AD++CmCGhttp://osiire.x0.com/uploader/upload.cgi?mode=dl&file=4591
キー1212
0049nobodyさん
2006/04/14(金) 04:40:18ID:AD++CmCGif(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);
を解説してもらえませんか
0050nobodyさん
2006/04/14(金) 06:24:08ID:???これは、POPサーバーにコマンドを送って結果の一行だけ受け取る関数
で、それを使って
USER PASSの各コマンドでユーザー名とパスワードを送って
STATで件数とサイズを取得している。
これらはPOPプロトコルのコマンドだから「POP コマンド」あたりでググると意味がわかると思う。
0051nobodyさん
2006/04/14(金) 07:32:35ID:???それの何がわからないというの
文字列$bufの先頭3文字が'+OK'じゃなかったら$bufを表示して終了。
_sendcmd関数に引数"USER $user"を渡して戻り値を$bufに代入。
引数"PASS $pass"で同上。
引数"STAT"で戻り値を$dataに入れる。$dataのフォーマットはコメントに記載
$dataから件数とサイズをそれぞれ$numと$sizeへ代入する。
005244
2006/04/14(金) 14:03:37ID:GvAB5r460053nobodyさん
2006/04/14(金) 14:38:15ID:???1 while $MSG =~ s/^(\d+)(\d\d\d)/$1,$2/;
の頭の"1"ってどういう意味ですか?
0054nobodyさん
2006/04/14(金) 15:25:00ID:???>質問部分は長いのですが、「それでもよい」という方がいらっしゃいましたら解説お願いします。
そんな暇な人はいらっしゃらないようですね。
0055nobodyさん
2006/04/14(金) 19:51:52ID:???↓↓↓
#$fp = fopen( "php://stdin", "r" );
#$response = trim( fgets( $fp ) );
#fclose( $fp );
$response="yes";
これは、どういうことなのでしょうか?
php://stdinとは何なのでしょうか?
0056nobodyさん
2006/04/14(金) 21:24:59ID:???標準入力から一行読み込んで $response に代入、というのを
コメントアウトして、$response は 'yes' 決め打ちにしている。
http://www.php.net/manual/ja/wrappers.php.php
0057nobodyさん
2006/04/14(金) 23:40:45ID:???質問主じゃないけどちょっとしつもーん。
これって、
if (substr($buf, 0, 3) != '+OK') {die($buf);}
を省略してるんだよね?
省略した書き方っていろいろあるけど、他にはどんな感じで書けるんでしょ。
die($buf) if substr( $buf, 0, 3) != '+OK';
if (substr($buf, 0, 3) != '+OK') or die($buf);
こんな感じでいいのかな。
あと、 !=は数字の比較とかに使うと思ってたんだけど、文字列の比較に使ってもOKなもの?
0058nobodyさん
2006/04/14(金) 23:47:02ID:???じゃなくて
if (substr($buf, 0, 3) == '+OK') or die($buf);
かも。
0059nobodyさん
2006/04/15(土) 01:45:20ID:8KHm3P0Wif(!$fp) {
echo "Connect Error! $errstr ($errno)";
}else {
fputs($fp,$dat);
if($timeout<time()) die("Time out Error!");
while (!feof($fp) && $he != "\r\n"){
$he= fgets($fp, 512);
}
while(!feof($fp) && time()<$timeout) {
$line = fgets($fp,1024);
よろ
0060nobodyさん
2006/04/15(土) 02:54:09ID:???PHP
http://www.php.net/manual/ja/language.control-structures.php
http://www.php.net/manual/ja/language.operators.comparison.php
http://www.php.net/manual/ja/language.operators.logical.php
【PHP】下らねぇ質問はここに書き込みやがれ Part19
http://pc8.2ch.net/test/read.cgi/php/1144513878/
Perl
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsyn.html
http://perldoc.jp/docs/perl/5.6.1/perlop.pod の
Equality Operators の項と Logical or and Exclusive Or の項
Perlコーディング初心者質問スレ Part 47
http://pc8.2ch.net/test/read.cgi/php/1141195171/
0061nobodyさん
2006/04/15(土) 03:46:11ID:???探す単語の目安がわからなくて見つからずに困ってたんだよね。
0062nobodyさん
2006/04/18(火) 03:39:25ID:???どう考えてもスレ立てが出来なくなると思うんだけど。
誰か記述分かる人おながいします。
0063nobodyさん
2006/04/18(火) 17:50:46ID:???if ($FORM{mode} eq 'i') {
foreach ($startpage..$endpage) {
if ($ThreadData[$_] eq '') { next; }
my $icnt = $_ + 1;
my $rcnt = $_ + 1;
$icnt == $pageline ? $icnt = 0 : $icnt = $_ + 1;
my ($key,$title,$cnt) = split (/\f/, $ThreadData[$_]);
$ithread .= "$rcnt.<a accesskey=\"$icnt\" href=\"./read.cgi?bbs=$bbs&key=$key&ls=10&first=true&mode=i\">$title</a> ($cnt)<br>";
}
$next = "<a href=./pageview.cgi?mode=i&bbs=$bbs&page=$nextpn>?次</a>" if $lpnum > $page;
}
href=\"./read.cgi?bbs=$bbs&key=$key&ls=10&first=true&mode=i\"の部分をいくら変えても反映されないのですが、これは他で制御しているんでしょうか・・?
006463
2006/04/18(火) 18:44:23ID:???0066nobodyさん
2006/04/24(月) 05:00:40ID:66F96BQZfunction convert($str) {
if (function_exists('mb_convert_encoding')) {
return mb_convert_encoding($str, "SJIS", "JIS,SJIS,UTF-8");
} elseif (function_exists('JcodeConvert')) {
return JcodeConvert($str, 0, 2);
}
return true;
}
JISをSJISにしているだけなのでしょうか?
0067nobodyさん
2006/04/24(月) 15:55:03ID:???たぶんそう。
mb_stringかJcodeConvertがあるかどうか調べて
いずれかがあったら変換してるみたいだね。
0068nobodyさん
2006/04/24(月) 18:24:23ID:???0070nobodyさん
2006/04/28(金) 21:39:59ID:Na6jyHe3function ssl_encrypt($source,$type,$key){
//Assumes 1024 bit key and encrypts in chunks.
$maxlength=117;
$output='';
while($source){
$input= substr($source,0,$maxlength);
$source=substr($source,$maxlength);
if($type=='private'){
$ok= openssl_private_encrypt($input,$encrypted,$key);
}else{
$ok= openssl_public_encrypt($input,$encrypted,$key);
}
$output.=$encrypted;
}
return $output;
}
0071nobodyさん
2006/04/28(金) 21:41:13ID:Na6jyHe3function ssl_decrypt($source,$type,$key){
// The raw PHP decryption functions appear to work
// on 128 Byte chunks. So this decrypts long text
// encrypted with ssl_encrypt().
$maxlength=128;
$output='';
while($source){
$input= substr($source,0,$maxlength);
$source=substr($source,$maxlength);
if($type=='private'){
$ok= openssl_private_decrypt($input,$out,$key);
}else{
$ok= openssl_public_decrypt($input,$out,$key);
}
$output.=$out;
}
return $output;
}
0072nobodyさん
2006/04/29(土) 23:26:03ID:???OpenSSLモジュールを使ってそれぞれ暗号化(encrypt)と復号化(decrypt)をしている関数に見える。
128バイトごとに分割しながら処理してるね。
OpenSSL関数やOpenSSLそのものについてはマニュアルやgoogle参照ということで。
0073nobodyさん
2006/05/30(火) 08:54:13ID:D128RUeT@log_lines=();
if(!$EST{html}){%Clog=();}
local(@temp_lines,%temp_ref,$line,@kt,$kt,@Slog,$st_no,$end_no,$i=0,$j=0);
$end_no=$EST{hyouji}*$LC_page -1;
$st_no=$end_no - $EST{hyouji} +1;
if(!$EST{html}){
open(IN,"$EST{log_path}$Spre_kt_file.cgi");
while($line=<IN>){
@Slog=split(/<>/,$line);
@kt=split(/&/,$Slog[10]);
foreach $kt(@kt){
if($LC_kt eq $kt){
$temp_ref{$Slog[0]}=$i;
push(@temp_lines,$line);
$i++;
}
$Clog{$kt}++;
}
}
close(IN);
続く↓↓
0074nobodyさん
2006/05/30(火) 08:56:35ID:D128RUeTforeach $line(sort{$b <=> $a}(keys %temp_ref)){
if($st_no<=$j && $j<=$end_no){
push(@log_lines,$temp_lines[$temp_ref{$line}]);
}
$j++;
}
undef(@temp_lines); undef(%temp_ref);
}
よろしくお願いします
0075nobodyさん
2006/05/30(火) 16:45:44ID:???これは何のスクリプト?
ログの中からなんらかの条件($LC_kt)に合ったものを読み込んで
ログの一番最初のパラメータ(たぶん書き込みID?)でソートして、
指定されたページのところから
表示数文取り出して@log_linesに入れて返しているように見える。
けど、ログの形式もわかんないし、
いくつか使われてるグローバル変数の意味もわかんないし
なんともいえない。
実際のログファイルを見ながらなら
読めるんじゃないかな。
0076nobodyさん
2006/06/22(木) 03:53:34ID:4vrB1Nlw$_GET = array_map("_clean", $_GET);
$_POST = array_map("_clean", $_POST);//11/8修正
extract($_GET);
extract($_POST);
extract($_COOKIE);
extract($_SERVER);
$upfile_type=_clean($_FILES['upfile']['type']);
$upfile_size=$_FILES["upfile"]["size"];
$upfile_name=_clean($_FILES["upfile"]["name"]);
$upfile=$_FILES["upfile"]["tmp_name"];
}
を説明していただけませんか?
0078nobodyさん
2006/06/22(木) 08:13:20ID:4vrB1Nlw教えて頂ければ大変嬉しいです!
0079nobodyさん
2006/06/24(土) 09:00:44ID:???恐らくサニタイズしているようだね。
例えば $_POST['foo'] を $foo と使えるようにしている。
ttp://coronado.s8.xrea.com/php/function.extract.php
ttp://coronado.s8.xrea.com/php/function.array-map.php
$_COOKIE や $_SERVER はサニタイズしていないから危険だね。
0080nobodyさん
2006/06/24(土) 09:02:27ID:???そのまま使っていそうだけど
ttp://coronado.s8.xrea.com/php/function.is-uploaded-file.php
ttp://coronado.s8.xrea.com/php/function.move-uploaded-file.php
ttp://coronado.s8.xrea.com/php/features.file-upload.php
でチェックすべき。
0082nobodyさん
2006/06/24(土) 14:18:28ID:???バージョンを比較するなら
version_compare()
ttp://coronado.s8.xrea.com/php/function.version-compare.php
の方が相応しいね。
0083nobodyさん
2006/06/29(木) 22:48:30ID:JkUV3tHw$ref->{q_line} = param("line") ne "" ? param("line") : $ref->{line};
というスクリプトの ? や、 : の使い方が分かりません。
何で検索していいのかも分かりません・・・orz
0084nobodyさん
2006/06/30(金) 01:18:36ID:???「条件演算子」で検索しる
0085nobodyさん
2006/06/30(金) 14:09:16ID:???真ん中が条件とは・・・
0086nobodyさん
2006/07/12(水) 11:38:24ID:???そのサンプルに限ると3項演算子よりも
$ref->{q_line} = param("line") || $ref->{line};
がシンプル。
本7って何よ?
0089nobodyさん
2013/06/15(土) 21:32:22.92ID:jrOK9IM3■ このスレッドは過去ログ倉庫に格納されています