七行プログラミング (452レス)
七行プログラミング http://medaka.5ch.net/test/read.cgi/php/1036141603/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
186: nobodyさん [sage] 03/12/03 23:13 ID:??? 7blosxom.cgi l10n for Japanese start_html に -title=>$0 入れると7行に収まらなかった(苦)。 #!/usr/bin/perl use CGI':all';use File::Find;($Y,$M,$D)=grep/^\d+$/,@i=path_info=~m|/([^/]+)|g; $R=$i[-1]=~/\.txt$/?pop@i:'\.txt';find sub{($d,$m,$y)=(localtime($t=(stat)[9])) [3..5];$e{$File::Find::name}=$t if!($Y&&$Y-$y-1900)&!($M&&$M-$m-1)&!($D&&$D-$d) &/$R$/},$P=join('/','.',grep!/\.\.|^\d+$/,@i);put header(-charset=>$c='EUC-JP') ,start_html(-encoding=>$c,lang,ja);for(sort{$e{$b}<=>$e{$a}}keys%e){open F,$_; s/^\.//;chomp($h=<F>);put h2(a{href,url.$_},$h),pre<F>,hr}put end_html >>182 '..' さえ防いだら大丈夫な気も… 既に開かれてるファイルハンドルを open し直すと、開いていたファイルは close されてから新しいファイルを open するので、close は明示しなくても 可な筈。 http://perldoc.com/perl5.8.0/pod/func/close.html http://medaka.5ch.net/test/read.cgi/php/1036141603/186
187: nobodyさん [sage] 03/12/03 23:57 ID:??? >>186 ちと修正。 #!/usr/bin/perl use CGI':all';use File::Find;($Y,$M,$D)=grep/^\d+$/,@i=path_info=~m|/([^/]+)|g; $R=$i[-1]=~/\.txt$/?pop@i:'.txt';find sub{($d,$m,$y)=(localtime($t=(stat)[9]))[ 3..5];$e{$File::Find::name}=$t if!($Y&&$Y-$y-1900)&!($M&&$M-$m-1)&!($D&&$D-$d)& /\Q$R\E$/},join'/','.',grep!/\.\.|^\d+$/,@i;put header(-charset=>$c='EUC-JP'), start_html(-encoding=>$c,lang,ja);for(sort{$e{$b}<=>$e{$a}}keys%e){open F,$_; s/^\.//;chomp($h=<F>);put h2(a{href,url.$_},$h),pre<F>,hr}put end_html http://medaka.5ch.net/test/read.cgi/php/1036141603/187
188: nobodyさん [sage] 03/12/04 01:07 ID:??? なにこのすれ(;´Д`) http://medaka.5ch.net/test/read.cgi/php/1036141603/188
189: 128 [] 03/12/04 03:24 ID:h3ZU5uFM 皆、お疲れ〜。 元気っぽいですな。 >>185 7thread 修正どうもです。かなりいけてました。 charset()を使わないと、escapeHTMLで文字化けが起こりますね。(「機能」とか) EUCにしようかとも思ったんだけど。 #!/usr/local/bin/perl use CGI":all";charset$c=Shift_JIS;*i=*param;*x=*textfield;sub l{a{href,pop},pop }sub e{escapeHTML i pop}chdir G;$b=e(B)||e S;open F,"+>>$b";flock F,2;[<F>];$t= 'スレッド';s!\w+://.+$!l$&,$&!emg,s/\n/br/eg,print F dt($.+1,':'.b(l e(N)||'七氏', 'mailto:'.e M),':'.gmtime),dd($_),"\n"if$_=e T;seek F,0,0;put header,start_html (-title=>$b||$t,encoding,$c,lang,ja,style,[<DATA>]),startform,h1($b||$t),$b?dl( <F>).hidden(B,$b).l $t,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).$t.x(S) ,br,submit,Name,x(N),Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html http://medaka.5ch.net/test/read.cgi/php/1036141603/189
190: 128 [] 03/12/04 03:32 ID:h3ZU5uFM オオボケでした。 開発中のを送ってしまった。 こっちです。 use CGI":all";charset$c=Shift_JIS;*i=*param;*x=*textfield;sub l{a{href,pop},pop }sub e{escapeHTML i pop}chdir G;$b=e(B)||e S;open F,"+>>$b";flock F,2;[<F>];$t= 'スレッド';s!\w+://.+$!l$&,$&!emg,s/\n/br/eg,print F dt($.+1,':'.b(l e(N)||'七氏', 'mailto:'.e M),':'.gmtime),dd($_),"\n"if$_=e T;seek F,0,0;put header,start_html (-title=>$b||$t,encoding,$c,lang,ja),startform,h1($b||$t),$b?dl(<F>).hidden(B, $b).l $t,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).$t.x(S),br,submit, Name,x(N),Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html http://medaka.5ch.net/test/read.cgi/php/1036141603/190
191: nobodyさん [sage] 03/12/04 06:04 ID:??? >>189 > charset()を使わないと、escapeHTMLで文字化け あぁ、確かに ad hoc な事やってますな…。相変わらず CGI.pm はダサい。:< #!/usr/bin/perl use CGI":all";charset$c=Shift_JIS;*i=*param;*x=*textfield;sub l{a{href,pop},pop }sub e{escapeHTML i pop}sub r{seek F,0,0}chdir G;($b=e(B)||e S)=~m![./]!&¨ open F,"+>>$b";flock F,2;r;[<F>];s!\w+://.+!l$&,$&!eg,s/\n/br/eg,print F dt($.+ 1,':'.b(l e(N)||'七氏','mailto:'.e M),':'.localtime),dd($_),"\n"if$_=e T;r;$t= 'スレ';put header,start_html(-title=>$b||$t,encoding,$c,lang,ja),startform,$b?h1( $b).dl(<F>).hidden(B,$b).l $t,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]). $t.x(S),br,submit,Name,x(N),Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html ・レス番号が増えないのを fix 。 ・スレタイに [./] は使用不可 (「../7thread.cgi」なんてスレ立てられると…) 。 ・gmtime は流石にどうかと思う。 ・上記改造のしわ寄せを h1 周りに。 http://medaka.5ch.net/test/read.cgi/php/1036141603/191
192: nobodyさん [] 03/12/04 21:36 ID:b7RTKokI 7thread 差分 < *i=*param < sub e{escape i pop} > sub e{escape param pop} > -title=>$b=($t='スレ') >186 thx URL なるほど、close省略出来たんだ。 FileHandle にはスコープは関係なかったね。IO::Fileと勘違いしてた。 blosxom ... 残り1行じゃFlavourは無理かなぁ http://medaka.5ch.net/test/read.cgi/php/1036141603/192
193: 128 [] 03/12/05 03:38 ID:2kvaGCEL 乙カレーっす。 7thread ログの形式を変えてみました。 今までのログは利用できません。 あと__DATA__以降にスタイルシートを指定できるようにしました。 #!/usr/bin/perl use CGI":all";charset$c=Shift_JIS;*i=*param;*x=*textfield;sub l{a{href,pop},pop }sub e($){escapeHTML i pop}chdir G;($F=e B||e S)=~m![./]!?die:open F,">>$F";$t= 'スレ';$d=e N||'七氏';flock F,2;s!\w+://.+!l$&,$&!eg,s/\n/br/eg,print F li(b(e M? l$d,'mailto:'.e M:$d),localtime.p$_)if$_=e T;open F;$/='';put header,start_html (-title=>$F||$t,-style=><DATA>,encoding,$c,lang,ja),startform,h1($F||$t),$F?ol( <F>).hidden(B,$F).l $t,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).$t.x(S) ,br,submit,Name,x(N),Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html __DATA__ h1{color:red; font-size:140%;} p {margin:0; padding:0.5em; background:#EEF;} http://medaka.5ch.net/test/read.cgi/php/1036141603/193
194: nobodyさん [] 03/12/05 06:41 ID:1VQJofzV sage機能実装。大幅に機能削ってしまったのでbranch. marge よろしく;-] use CGI":all";charset$c='EUC-JP';sub l{a{href,pop},pop}chdir G;sub e{escapeHTML param pop}$d=e(N)||'七氏';($F=e B)=~/[.\/]/?die:($u=($m=e M)=~/sage/?(stat($F)) [9]:0),open F,">>$F";flock F,2;s!\w+://.+!l$&,$&!eg,s/\n/br/eg,print F li(b($m? l$d,'mailto:'.$m:$d),localtime.p$_)if$_=e T;$t='スレ';open F;$/='';*x=*textfield; put header,start_html($F||$t),startform,h1($F||$t),$F?ol(<F>).hidden(B,$F).l$t, '?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).$t.x(B),br,submit,Name,x(N), Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html;$u&&utime time,$u,$F http://medaka.5ch.net/test/read.cgi/php/1036141603/194
195: nobodyさん [sage] 03/12/05 06:41 ID:??? >>193 一引数の open で開き直すのはナイスですな。 start_html に -style を指定すると、外部 CSS への link 要素を吐く (少なくとも CGI.pm 3.00 では) 。ので、style 要素に変更。 #!/usr/bin/perl use CGI":all";sub l{a{href,pop},pop}sub e($){escapeHTML param pop}($C,$B,$S,$D) =<DATA>;charset$C;chdir G;($F=e B||e S)=~m![./]!?die:open F,">>$F";flock F,2;s! \w+://.+!l$&,$&!egx,s/\n/br/eg,print F li(b(e M?l e N||$D,'mailto:'.e M:e N||$D ),localtime.p$_)if$_=e T;*x=*textfield;open F;put header,start_html(-title=>$F ||$B,encoding,$C,lang,ja),style($S),startform,h1($F||$B),$F?ol(<F>).hidden(B,$F ).l Threads,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).NewThread.x(S),br, submit,Name,x(N),Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html __DATA__ Shift_JIS 7ch h1{color:red; font-size:140%;} p {margin:0; padding:0.5em; background:#EEF;} 七氏 http://medaka.5ch.net/test/read.cgi/php/1036141603/195
196: 195 [sage] 03/12/05 06:42 ID:??? >>194 むぅ。(w http://medaka.5ch.net/test/read.cgi/php/1036141603/196
197: nobodyさん [sage] 03/12/05 07:03 ID:??? >193 お疲れ様。取り急ぎ、動作報告します。 Perl5.8.2/CGI.pm3.00, Perl5.6.1/CGI.pm2.752で確認しました。 -style=<DATA> は、CGIpm/3.00ではlinkのhref属性に入ってしまう。 引数の型によってlink, styleの出力を区別してるらしい。see _style method in CGI.pm 古いバージョンのCGI.pmではxmlのencoding属性の指定は出来ない。 <body encoding="..." となるので特に影響はないけど。 http://medaka.5ch.net/test/read.cgi/php/1036141603/197
198: nobodyさん [sage] 03/12/05 13:00 ID:??? >>194 *本当に下がる* sage 機能、無理矢理 merge 。:p URL auto link が犠牲に。 #!/usr/bin/perl use CGI":all";sub l{a{href,pop},pop}sub e($){escapeHTML param pop}($C,$B,$D,@S) =<DATA>;charset$C;chdir G;($F=e B||e S)=~m![./]!?die:open F,">>$F";flock F,2;$s =($m=e M)=~/sage/;*x=*textfield;s/\n/br/eg,print F li(b($m?l e N||$D,'mailto:'. $m:e N||$D),localtime.p$_)if$_=e T;close F;$s&&utime 1,1,$F;open F;put header, start_html(-title=>$F||$B,encoding,$C,lang,ja),style(@S),startform,h1($F||$B), $F?ol(<F>).hidden(B,$F).l Top,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]). New.x(S),br,submit,Name,x(N),Mail,x(M),textarea(T,'',7,80,1),endform,end_html __DATA__ Shift_JIS 7ch 七氏 h1 {color:red; font-size:140%;} p {margin:0em; padding:0.5em; background:#EEF;} utime は FreeBSD だとファイル閉じないと効かなかったです。 Win98SE だと開いたままいぢれたけど。 http://medaka.5ch.net/test/read.cgi/php/1036141603/198
199: 128 [sage] 03/12/05 18:07 ID:??? 皆様。乙! sage 機能いいですねぇ。 >>197 チェックありがとっす! -style ってバージョンによって違ったんですね。 2.98でも確認できました。 修正版です。$/の定義はズルしてます。(w #!/usr/bin/perl use CGI":all";charset$c=Shift_JIS;*x=*textfield;sub l{a{href,pop},pop}sub e($){ escapeHTML param pop}chdir G;($F=e B||e S)=~m![./]!?die:open F,">>$F";$t=Thread ;$d=e N||NoName;flock F,2;s!.+://.+!l$&,$&!eg,s/\n/br/eg,print F li(b(e M?l$d,' mailto:'.e M:$d),localtime.p$_)if$_=e T;open F;put$/=header,start_html(-style=> {code=><DATA>},title=>$f=$F||"7$t",lang,ja,encoding,$c),startform,h1($f),$F?ol( <F>).hidden(B,$F).l$t.List,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).New .$t.x(S),div(submit,Name,x(N),Mail,x(M)),textarea(T,'',7,80,1),endform,end_html __DATA__ h1{color:red; font-size:140%;} p {margin:0; padding:0.5em; background:#EEF;} b {color:green;} a:hover{background:#FCC;} input,textarea{margin:0 10px 0 2px;} http://medaka.5ch.net/test/read.cgi/php/1036141603/199
200: nobodyさん [sage] 03/12/05 22:30 ID:??? マ板から誘導されました。 既出と承知しつつ、1行掲示板です。 一応、名前と本文両方がないとはじく機能と、投稿日付つき。 (4行目の $t[4]/$t[3] を $t[2]:$t[1] にすれば、手動リロードの 簡易チャットにもなります。名前毎回入れるの面倒だけど。笑) ファイル名は lb.cgi、パーミッション755で置けばいきなり稼動可能です。 #!/usr/bin/perl $l='log.dat';@t=localtime();$t[4]++;use CGI;$q=new CGI;$d=$q->param('n'); $e=$q->param('h');($d&&$e)and &g;&p;exit;sub g{&i;open F,">$l";flock(F,2);print F "$t[4]/$t[3]:$d<BR>$e<HR>\n",@b;close F;}sub p{&i;print"Content-Type:text/h" ,"tml\n\n一行掲示板<FORM METHOD=POST ACTION=\"lb.cgi\" NAME=1>名前<INPUT TYPE=" ,"TEXT SIZE=20 NAME=n><BR>本文<INPUT TYPE=TEXT SIZE=60 NAME=h><BR><INPUT TYPE=" ,"SUBMIT VALUE=\"送信\"></FORM><HR>",@b;}sub i{open F,"$l";@b=<F>;close F;} http://medaka.5ch.net/test/read.cgi/php/1036141603/200
201: nobodyさん [sage] 03/12/06 00:29 ID:??? >>200 特にヒネりもなく縮め。 #!/usr/bin/perl use CGI":all";*P=*param;-e($F='log.dat')||open F,">$F";if(P(n)&&P(h)){open F, "+<$F";flock F,2;@b=<F>;@t=localtime;seek F,0,0;print F++$t[4],"/$t[3]:",P(n), '<BR>',P(h),"<HR>\n",@b}open F;$I='<INPUT TYPE';print"Content-Type: text/html\n 一行掲示板<FORM METHOD=POST ACTION=\"$0\">名前$I=TEXT SIZE=20 NAME=n><BR>本文", "$I=TEXT SIZE=60 NAME=h><BR>$I=SUBMIT VALUE=\"送信\"></FORM><HR>",<F> 過去の作品に出てくるテクや Perl の言語仕様をしっかり研究してから 次回作を作って見せて欲しいな。 ところで 7blosxom と 7thread と 7ch (>>128〜) 、参加作という事で http://cm.xrea.cc/ に載せていいですか? >オリジナル作者各位 と言っても実際に載せるのは年越してからになると思いますが(苦)。 http://medaka.5ch.net/test/read.cgi/php/1036141603/201
202: nobodyさん [sage] 03/12/06 17:16 ID:??? スレ汚し失礼。簡易telneted。ポート1029を使います。 use Socket;socket(SERVER,2,1,getprotobyname('tcp'));setsockopt(SERVER, SOL_SOCKET,4,1);bind(SERVER,pack_sockaddr_in(1029,INADDR_ANY));listen( SERVER,1);select(SERVER);$|=1;for(;;){accept(CLIENT,SERVER) ;select(CLIENT);$|=1;$cmd;print '$ ';while($c=getc(CLIENT)){if($c=~/\n$/){ print `$cmd`,"\n",'$ ';$cmd = '';}else{print $c;$cmd .= $c;}}close CLIENT} http://medaka.5ch.net/test/read.cgi/php/1036141603/202
203: 128 [sage] 03/12/07 00:41 ID:??? >>201 7ch と 7thread のオリジナル作者です。 どうぞ載せてくださいませ。 http://medaka.5ch.net/test/read.cgi/php/1036141603/203
204: nobodyさん [] 03/12/07 03:57 ID:enSfwhvY >201 参加してたんだw。どぉも。一年ぶりです。 <- 7blosxomのプロトタイプ提供者(===7wiki)です。 > http://cm.xrea.cc/ に載せていいですか? 他にも幾つかストックあるので、公開時には掲載よろしくお願いします。m(_ _)m http://medaka.5ch.net/test/read.cgi/php/1036141603/204
205: 7uploader [] 03/12/07 09:25 ID:enSfwhvY もっと詰めてからにしようと思ったけど、とりあえず公開します。後はよろしく:) #!/usr/bin/perl use CGI':all';$CGI::POST_MAX=1024*1000;chdir D;if($u=upload u){open F,">./$u"or die;binmode F;while(read$u,$b,1024){print F$b}close F}@f=sort{-M$a<=>-M$b}<*>;( ($_=param d)&&grep/^$_$/,@f)?do{open F,$_;put header(-Content_length=>-s, attachment=>$_,-type=>"application/octet-stream"),<F>}:do{put header,start_html ,start_multipart_form,filefield(u),submit,endform,hr,table({-border=>1},Tr[th([ qw/name size date/]),map{td([a({href,"?d=$_"},$_),-s,''.localtime((stat)[9])])} @f]),end_html} __END__ TODO [ ] 保存するファイル名のチェック。 uploadされたphpやshtmlが実行されるのを防止,や../等の対策。 [*] 出力するファイル名のチェック。 [ ] binary ファイルの取扱。(for windows) [ ] 他のブラウザへの対応。 http://medaka.5ch.net/test/read.cgi/php/1036141603/205
206: nobodyさん [sage] 03/12/07 09:39 ID:??? >>202 term 関係はシステム依存度高くて鬼門でごわす。 #!/usr/bin/perl use Socket;socket S,2,1,getprotobyname"tcp";setsockopt S,SOL_SOCKET,4,1;bind S, sockaddr_in 1029,INADDR_ANY;listen S,1;{accept C,S;binmode C;select C;$|=1;$n= "\r\n";print$p='$ ';while($_.=$c=getc C){if(s/[$n]+\x00//){/^exit$/&&last;s/\s+ \z//x for@o=`$_`;print join$n,'',@o,$p;$_=''}else{$c=~/[$n]/||print$c}}close C; redo} TeraTermPro → Win98SE (command.com) と TeraTermPro → FreeBSD 4.x (tcsh) で動作する事を確認。 FreeBSD 上で telnet localhost 1029 は動作不能。 誰か残りの行で UNIX 系 OS 用のコード組み込んで下さい。:o) http://medaka.5ch.net/test/read.cgi/php/1036141603/206
207: nobodyさん [] 03/12/07 20:49 ID:enSfwhvY Socket関連も、環境に依存する定数があったと思う。 後、ls コマンドの実装。 環境 Linux NetKit0.17 telnet で動作確認。(line mode) > env | grep TERMCAP TERMCAP=SC|screen|VT 100/ANSI X3.64 virtual terminal:\ use Socket;socket S,PF_INET,SOCK_STREAM,getprotobyname'tcp';setsockopt S, SOL_SOCKET,SO_REUSEADDR,1;bind S,sockaddr_in 1029,INADDR_ANY;listen S,1;{accept C,S;binmode C;select C;$|=1;$n="\r\n";print$p='$ ';while($_.=getc C){if(length ==1){s/^[$n\x00]//}elsif(s/[$n]$//){/^exit$/&&last;(/^cd\s*(.*)/)?chdir$1:print join$n,(map{s/[$n\z]//g;$_}`$_`),$p;$_=''}}close C;redo} character mode では、local echoが返らなかった。 端末への対応、悪化してたりしたらゴメン(焦 http://medaka.5ch.net/test/read.cgi/php/1036141603/207
208: 7hoo [] 03/12/09 13:46 ID:+unlQkjh PerlHoo(http://www.webreference.com/perl/xhoo/)です。 ディレクトリ型のリンク集。後1行がなかなか縮まらない >_<。 use CGI":all";$_='($p)=path_info=~m|^/*(.+?)/*$|;chdir("./$p")||die;@f=grep-d, <*>;%F=(Url,U,Title,T);$F=".7hoo";if(@P=Ms/[\r\n]/ /g;$_}Mparam$_}(U,T,D)){open F,">>$F";print F join"\t",@P,"\n"}put header,start_html,p(join" / ",(A},Home),M A.($i.="/$_")},$_}split"/",$p),hr,(param 1)?(h2($p),startform(POST,url."/$p"),( Mtextfield($F{$_},"",40),b$_,br}keys%F),textarea(D,"",3,40,1),br,submit,endform ):(table(Tr Mtd{valign,top},ul li[MA.($p?"/$p":"")."/$_"},$_}grep-d,@f[$_*15..$ _*15+14]]}(0..@f/15)),hr,(open(F,$F)&&M@N=split/\t/;h3(a{href,$N[0]},$N[1]),p$N [2]}<F>)),hr,p(A."/$p?1=1"},Edit),end_html';s/M/map\{/g;s/A/a\{href,url/g;eval __END__ リンクを登録すると、登録したカテゴリのディレクトリ内に .7hoo ファイルを生成します。 例: Home / foo / bar だと、./foo/bar/.7hoo に記録される。 データ・ファイルが各ディレクトリ毎に散らばるのでテスト利用の場合は注意してください。 データファイルの掃除にはシェル等から > find ./target_dir -name ".7hoo" -exec rm {} \; http://medaka.5ch.net/test/read.cgi/php/1036141603/208
210: nobodyさん [sage] 03/12/10 15:33 ID:??? おつかれ〜 http://medaka.5ch.net/test/read.cgi/php/1036141603/210
211: 200 [sage] 03/12/11 21:24 ID:??? 連投でうざかったらすみません。200で作った1行掲示板を 普通の掲示板に変更してみました。 #!/usr/bin/perl $F='log.dat';$n='board.cgi';use CGI":all";*Q=*param;*f=*textfield;open F;@b[0.. 18]=<F>;close F;if(Q(1)&&Q(2)){@t=localtime;$_=Q(2);s/\r\n/\n/g;s/\r|\n/<br>/g; $a=(Q(3))?a({-href=>'mailto:'.Q(3)},Q(1)):Q(1);$_="[".++$t[4]."/$t[3] $t[2]:". sprintf("%02d",$t[1])."] $a".br.$_.hr.$/;open F,">$F";flock F,2;print F $_,@b;} print header(-charset=>Shift_JIS),"*けいじばん*",start_form(post,$n),"おなまえ" ,f(1),br,textarea(2,'',4,26),br,"めーる",f(3),submit('送信'),end_form,hr,$_,@b; とりあえず、おまじない程度にShift_JIS(NN4対策)、本文が改行可能(Macの 改行コードも対応)、メール欄追加、日付+時間表示などの機能を付加して ぴったり7行です。 //項目が全部ひらがななのは自サイトで使う用なので。苦笑 http://medaka.5ch.net/test/read.cgi/php/1036141603/211
212: 200 [sage] 03/12/11 21:51 ID:??? それと、2行目の$Fでログファイル名、$nで自ファイル名を変更可能。 3行目の先頭にある18を「最大ログ数にしたい数-2」に変更すれば 最大ログを設定できます。 http://medaka.5ch.net/test/read.cgi/php/1036141603/212
213: nobodyさん [sage] 03/12/12 02:52 ID:??? ● 最低限押さえるべきポイント for Perl ・識別子は全て一文字にする ・演算子の優先順位を把握して冗長な括弧を全て省く ・サブルーチンは頭の方で宣言して routine(); から括弧を省く ・ブロックの最後の文はセミコロンを省略できる ("main" ブロック然り) ● 基本縮めテクニック for Perl ・使用する関数に関してマニュアルを精読する :) ・bare word ([A-Za-z]\w*) を使ってクォートを省く ・長い名前の関数を複数回使うなら別名を作る (*P=*param;) ・特殊変数や暗黙の代入を積極的に使う ・(スカラー|リスト|ブール)コンテキストでの各挙動を意識する ● Tips for Perl ・同名のファイルハンドルを open し直すなら close は要らない (>>186 参照) ・最も短くかける無限ループは "{ ... ;redo}" ● 「使える」Web プログラムを目指す人に ・XSS 脆弱性に配慮する ・文字コードに依存する定数は外部へ追い出す ・「想定外の入力」でどのように誤作動するか確認する ・多機能より堅牢を Tips を充実させたいところ。 http://medaka.5ch.net/test/read.cgi/php/1036141603/213
214: nobodyさん [] 03/12/12 19:15 ID:O0tbE8Vp Gj and thankU>213 僕もTipsをまとめようかなと思ってました。 7行スクリプト向けのTipsと実用的なTipsを混同すると、誤解する人が出てこないかな? との杞憂もあり。パターン言語で、このTipsはどういった時に使えるとか、 Tipsが使える場合の背景や制約等を細かく書こうと思ってたんだけど。(現在作業中断中 indexだけでも書き出してみるかな。 paddingテクニック for perl - ファイルハンドルの直前で改行すると 1 byte diet 出来る。(open後等) - 正規表現内で改行する場合は x を付ける。 - 変数名はprefix($@%)と名前の間にスペース/改行を含んでも良い。 基本縮めテクニック for perl - and or && || の使い分け。場合によっては前後の()を省略できる。 - コード全体を圧縮 $_='...';s/xxx/zzz/g;eval # 事例: DeCSS, 7Hoo - There'sMoreThanOneWayToDoIt 既に書かかれたコードに捕らわれず、異なるアプローチで書き起こす事も忘れずに。 Common Tips for perl - $foo ||= 10; # foo が 空もしくは0 なら 10 を代入。 縮めTips for CGI.pm - use CGI":all"; で main:: にインポート。 - 別名が付けられている関数は短い方を利用。 -- start_form -> startform, end_form -> endform - 環境変数を所得する関数が準備されている。 -- $ENV{'PATH_INFO'} -> path_info, referer 等。 - 独自tagを出力する関数を作る。 事例 >>122 7rss.cgi - 自分自身のURL -> url, self_url - 他。 大抵の機能はモジュールで提供してくれてるが、VERSIONの違いには注意。 http://medaka.5ch.net/test/read.cgi/php/1036141603/214
215: PATH_INFO 内での '..' [] 03/12/12 19:52 ID:O0tbE8Vp >>186 読んで思い出した。 PATH_INFO に .. が現れるのってどういった場合なんでしょう? 親ディレクトリより上を参照出来る危険があるのかなと思ったけど。 QUERY_STRINGからなら勿論チェックが必要ですが。 PATH_INFOの場合CGI自体が呼ばれない様な気がする。 以下のようなリクエストを試してみました ttp://www.example.com/bar.cgi/../ ttp://www.example.com/~foo/bar.cgi/../ ttp://www.example.com/~foo/bar.cgi/../~foo/bar.cgi bar.cgi/../ とすると、 サーバーは bar.cgi のあるディレクトリの indexを返してくる様なんだけど。 これって、サーバーの実装に依存するのかな?apache,IIS他幾つかのサイトで確認。 流石にDocumentRootより上を参照しようとするとBad Requestになるけど。 今、丁度7行HTTPdを公開しようと調整していたので、自分でも調べるつもりですが もし、詳しく知ってる方いたらフォローお願いします。m(_ _)m http://medaka.5ch.net/test/read.cgi/php/1036141603/215
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 237 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
アボンOFF
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.016s