2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

配布スクリプトの読めない部分を解説しちゃる

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
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★