配布スクリプトの読めない部分を解説しちゃる
1 :nobodyさん :04/09/11 04:02:39 ID:flbBPOWm.net Perl、PHPなんでもござれ。 配布スクリプトの中でよくわからん構文などがあったら解読&解説しちゃる。
42 :nobodyさん :2006/01/05(木) 01:55:21 ID:???.net >37 20世紀のスクリプト
43 :37 :2006/01/05(木) 02:01:34 ID:+yKIo2wf.net >>41 スレ違い須磨祖。他逝ってくる
44 :nobodyさん :2006/04/12(水) 17:45:59 ID:AxAuwUbH.net スクリプト自体は少し前のもので、現在はもう作者の継続サイトはないようです。 しかも質問部分は長いのですが、「それでもよい」という方がいらっしゃいましたら解説お願いします。 この中の database.cgi の 312 行目以降すべて (キーワード処理部分と検索部分) が 全般にわたってまったくわかりません。一挙でなくて少しずつでもよいので、各行最後までお願いします。 http://hpcgi2.nifty.com/wanchan/dl.cgi/database.lzh?name=database.lzh&rootcheck=1
45 :nobodyさん :2006/04/13(木) 13:07:13 ID:???.net >>44 311行以前もわかってないだろ
46 :44 :2006/04/13(木) 16:34:10 ID:C+gS5L5K.net 312 行目以降をお願いします。
47 :nobodyさん :2006/04/14(金) 01:35:44 ID:AD++CmCG.net このスクリプトの解説をお願いします http://osiire.x0.com/uploader/upload.cgi?mode=dl&file=4591 キー1212
48 :nobodyさん :2006/04/14(金) 04:12:35 ID:???.net >>47 スクリプトについているコメント通りとしか言いようがないです。 どこがわからないのか教えてください。
49 :nobodyさん :2006/04/14(金) 04:40:18 ID:AD++CmCG.net じゃあ、とりあえず 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); を解説してもらえませんか
50 :nobodyさん :2006/04/14(金) 06:24:08 ID:???.net まず、_sendcmdという関数が下の方にあると思うけど これは、POPサーバーにコマンドを送って結果の一行だけ受け取る関数 で、それを使って USER PASSの各コマンドでユーザー名とパスワードを送って STATで件数とサイズを取得している。 これらはPOPプロトコルのコマンドだから「POP コマンド」あたりでググると意味がわかると思う。
51 :nobodyさん :2006/04/14(金) 07:32:35 ID:???.net >>49 それの何がわからないというの 文字列$bufの先頭3文字が'+OK'じゃなかったら$bufを表示して終了。 _sendcmd関数に引数"USER $user"を渡して戻り値を$bufに代入。 引数"PASS $pass"で同上。 引数"STAT"で戻り値を$dataに入れる。$dataのフォーマットはコメントに記載 $dataから件数とサイズをそれぞれ$numと$sizeへ代入する。
52 :44 :2006/04/14(金) 14:03:37 ID:GvAB5r46.net お願いします。
53 :nobodyさん :2006/04/14(金) 14:38:15 ID:???.net Perlで 1 while $MSG =~ s/^(\d+)(\d\d\d)/$1,$2/; の頭の"1"ってどういう意味ですか?
54 :nobodyさん :2006/04/14(金) 15:25:00 ID:???.net >>52 >質問部分は長いのですが、「それでもよい」という方がいらっしゃいましたら解説お願いします。 そんな暇な人はいらっしゃらないようですね。
55 :nobodyさん :2006/04/14(金) 19:51:52 ID:???.net wikiのページを見ていたらこんなのがありました。 ↓↓↓ #$fp = fopen( "php://stdin", "r" ); #$response = trim( fgets( $fp ) ); #fclose( $fp ); $response="yes"; これは、どういうことなのでしょうか? php://stdinとは何なのでしょうか?
56 :nobodyさん :2006/04/14(金) 21:24:59 ID:???.net >>55 標準入力から一行読み込んで $response に代入、というのを コメントアウトして、$response は 'yes' 決め打ちにしている。 http://www.php.net/manual/ja/wrappers.php.php
57 :nobodyさん :2006/04/14(金) 23:40:45 ID:???.net >if(substr($buf, 0, 3) != '+OK') die($buf); 質問主じゃないけどちょっとしつもーん。 これって、 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なもの?
58 :nobodyさん :2006/04/14(金) 23:47:02 ID:???.net if (substr($buf, 0, 3) != '+OK') or die($buf); じゃなくて if (substr($buf, 0, 3) == '+OK') or die($buf); かも。
59 :nobodyさん :2006/04/15(土) 01:45:20 ID:8KHm3P0W.net $fp = fsockopen($host, 80, &$errno, &$errstr, $time_out); if(!$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); よろ
60 :nobodyさん :2006/04/15(土) 02:54:09 ID:???.net >>57-58 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/
61 :nobodyさん :2006/04/15(土) 03:46:11 ID:???.net ブックマークした!わざわざ調べてくれてありがと! 探す単語の目安がわからなくて見つからずに困ってたんだよね。
62 :nobodyさん :2006/04/18(火) 03:39:25 ID:???.net 2chはsubbbs.cgi廃止したけど、なんでbbs.cgiがまともに走ってんの? どう考えてもスレ立てが出来なくなると思うんだけど。 誰か記述分かる人おながいします。
63 :nobodyさん :2006/04/18(火) 17:50:46 ID:???.net これだけじゃたりないかもしれませんがお願いします。 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\"の部分をいくら変えても反映されないのですが、これは他で制御しているんでしょうか・・?
64 :63 :2006/04/18(火) 18:44:23 ID:???.net 事故解決しました
65 :nobodyさん :2006/04/19(水) 07:45:55 ID:???.net >>62 bbs.cgiにスレ立て機能があるんだろ
66 :nobodyさん :2006/04/24(月) 05:00:40 ID:66F96BQZ.net ここを解説してもらえませんか function 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にしているだけなのでしょうか?
67 :nobodyさん :2006/04/24(月) 15:55:03 ID:???.net >>66 たぶんそう。 mb_stringかJcodeConvertがあるかどうか調べて いずれかがあったら変換してるみたいだね。
68 :nobodyさん :2006/04/24(月) 18:24:23 ID:???.net どうもです!
69 :nobodyさん :2006/04/25(火) 15:43:49 ID:???.net >>65 どうやってもsubbbs.cgiに飛ぶだろ それとも記述書き換えたとかか?
70 :nobodyさん :2006/04/28(金) 21:39:59 ID:Na6jyHe3.net このスクリプトの説明をお願いします。 function 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; }
71 :nobodyさん :2006/04/28(金) 21:41:13 ID:Na6jyHe3.net 続き function 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; }
72 :nobodyさん :2006/04/29(土) 23:26:03 ID:???.net >>70-71 OpenSSLモジュールを使ってそれぞれ暗号化(encrypt)と復号化(decrypt)をしている関数に見える。 128バイトごとに分割しながら処理してるね。 OpenSSL関数やOpenSSLそのものについてはマニュアルやgoogle参照ということで。
73 :nobodyさん :2006/05/30(火) 08:54:13 ID:D128RUeT.net このスクリプトの解説をお願いします @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); 続く↓↓
74 :nobodyさん :2006/05/30(火) 08:56:35 ID:D128RUeT.net 続き foreach $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); } よろしくお願いします
75 :nobodyさん :2006/05/30(火) 16:45:44 ID:???.net >>73-74 これは何のスクリプト? ログの中からなんらかの条件($LC_kt)に合ったものを読み込んで ログの一番最初のパラメータ(たぶん書き込みID?)でソートして、 指定されたページのところから 表示数文取り出して@log_linesに入れて返しているように見える。 けど、ログの形式もわかんないし、 いくつか使われてるグローバル変数の意味もわかんないし なんともいえない。 実際のログファイルを見ながらなら 読めるんじゃないかな。
76 :nobodyさん :2006/06/22(木) 03:53:34 ID:4vrB1Nlw.net if(phpversion()>="4.1.0"){//PHP4.1.0以降対応 $_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"]; } を説明していただけませんか?
77 :nobodyさん :2006/06/22(木) 07:47:36 ID:???.net >>76 register_globals onを前提に作ったスクリプトをoffにも対応させるためのもの と思われる
78 :nobodyさん :2006/06/22(木) 08:13:20 ID:4vrB1Nlw.net 実際にはどうしているのでしょうか? 教えて頂ければ大変嬉しいです!
79 :nobodyさん :2006/06/24(土) 09:00:44 ID:???.net $_POST と $_GET で渡ってきた値を _clean() という独自関数で 恐らくサニタイズしているようだね。 例えば $_POST['foo'] を $foo と使えるようにしている。 ttp://coronado.s8.xrea.com/php/function.extract.php ttp://coronado.s8.xrea.com/php/function.array-map.php $_COOKIE や $_SERVER はサニタイズしていないから危険だね。
80 :nobodyさん :2006/06/24(土) 09:02:27 ID:???.net あと、アップロードしたファイルも $upfile を そのまま使っていそうだけど 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 でチェックすべき。
81 :nobodyさん :2006/06/24(土) 13:01:58 ID:???.net >>76 レッツか
82 :nobodyさん :2006/06/24(土) 14:18:28 ID:???.net >>76 バージョンを比較するなら version_compare() ttp://coronado.s8.xrea.com/php/function.version-compare.php の方が相応しいね。
83 :nobodyさん :2006/06/29(木) 22:48:30 ID:JkUV3tHw.net Perlで $ref->{q_line} = param("line") ne "" ? param("line") : $ref->{line}; というスクリプトの ? や、 : の使い方が分かりません。 何で検索していいのかも分かりません・・・orz
84 :nobodyさん :2006/06/30(金) 01:18:36 ID:???.net >83 「条件演算子」で検索しる
85 :nobodyさん :2006/06/30(金) 14:09:16 ID:???.net トンクス 真ん中が条件とは・・・
86 :nobodyさん :2006/07/12(水) 11:38:24 ID:???.net >>83 そのサンプルに限ると3項演算子よりも $ref->{q_line} = param("line") || $ref->{line}; がシンプル。
87 :nobodyさん :2006/08/01(火) 23:23:24 ID:???.net >>86 lineが0だとダメ
88 :電脳プリオン :2011/11/05(土) 19:27:57.25 ID:???.net ?2BP(1960) >>2 本7って何よ?
89 :nobodyさん :2013/06/15(土) 21:32:22.92 ID:jrOK9IM3.net 神スレ
90 :nobodyさん :2018/06/21(木) 08:39:20.10 ID:VtSVJLaY.net プログラミングを誰でも習得できる方法は、「前場アキドルのプログラミングマスター方法」というブログで見られるらしいよ。ネットで調べると見られるらしいです。 TM13D
91 :nobodyさん :2023/01/24(火) 14:55:54.19 ID:???.net てすと
27 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★
本文 スレッドタイトル 投稿者