七行プログラミング (452レス)
七行プログラミング http://medaka.5ch.net/test/read.cgi/php/1036141603/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
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
216: nobodyさん [sage] 03/12/13 16:17 ID:??? ご自由に編集して下さい。(´ω` http://cm.xrea.cc/techinfo.cgi #--- 7memo.cgi --- #!/usr/local/bin/perl chdir"D";use CGI":all";charset$c='EUC-JP';($_)=path_info=~m|[^/]+|g;s/^\s+|[<>| ]|\s+$//g;tr/\x00-\x1F.\x7F/./;$F=length>2?escape CGI$_:Top;open F,($m=param w) ?">$F":$F;flock F,2;$/='';print F$m||=<F>;sub U($){unescape CGI@_}opendir D,'.' ;put header,start_html(-title=>U$F,lang,ja,encoding,$c),ul(map{li"".localtime(( stat)[9]),a{href,url."/$_"},U$_}sort grep!/^\./,readdir D),h1(U$F),startform(0, url."/$F"),p(textarea(w,$m,25,70),submit),endform,end_html __END__ 7wiki を参考に色々いぢってみました。 http://medaka.5ch.net/test/read.cgi/php/1036141603/216
217: nobodyさん [sage] 03/12/15 02:27 ID:??? >>215 /foo%5C..%5C..%5Cbar なんてのをそのまま Win 鯖で食うとヤバいかと。 http://medaka.5ch.net/test/read.cgi/php/1036141603/217
218: 7memo [sage] 03/12/15 13:08 ID:??? ちょぼちょぼいぢり。 #!/usr/local/bin/perl use CGI":all";sub d{chomp($_=<DATA>);$_}sub U($){unescape CGI@_}chdir d;charset $c=d;$s=d;$_=path_info=~m|[^/]+|?$&:d;s/^\s+|\.+|\s+$/./g;$_=escape CGI$_;-d&& die;open F,($m=param w)?">$_":$_;eval{flock F,2};$/='';print F$m||=<F>;opendir D,'.';put header,start_html(-title=>U$F,lang,ja,encoding,$c),h1(U$F),startform( 0,url."/$F"),p(textarea(w,$m,20,70),submit$s),endform,ul(map{li"".localtime(( stat)[9]),a{href,url."/$_"},U$_}sort grep!/^\./,readdir D),end_html __DATA__ data_dir EUC-JP save memo Top Page Title http://medaka.5ch.net/test/read.cgi/php/1036141603/218
219: nobodyさん [sage] 03/12/15 13:18 ID:??? >>218 s/\$F/\$_/g; _| ̄|○ http://medaka.5ch.net/test/read.cgi/php/1036141603/219
220: Unit7.pm [] 03/12/15 17:14 ID:zoqm3JaO #!/usr/bin/perl package Unit7;sub new{bless{},pop}*set_up=*tear_down=sub{};sub p{printf@_}sub assert{my($s,$f,$m)=@_;++$s->{n};$f?++$s->{o}:p"%s:%d\t$m\n",(caller)[1,2]}sub run{$s=shift;$N=$O=0;for(grep/^test/,keys%{ref($s)."::"}){$s->{n}=$s->{o}=0;$N ++;set_up$s;$s->$_;tear_down$s;p"$N ) $s->{o}/$s->{n}\t$_\n";$s->{n}-$s->{o} or $O++}p"\nRun $N Tests. $O success.\n"}7 __END__ $s ... $self $N ... test* メソッドの数 $o ... 成功したテストの数 $n ... サブテストの数 $o ... 成功したサブテストの数 Test::Unit::TestCase 相当のモジュールです。 メソッド名 set_up, tear_down, assert は、オリジナルのTest-Unitを意識してそのままにしています。 名前を併せたらTestRunner.pl で実行できるかな?と互換性を期待したけど、無理だった。 http://medaka.5ch.net/test/read.cgi/php/1036141603/220
221: nobodyさん [] 03/12/15 17:21 ID:zoqm3JaO >>220 の使い方です。 - assert(bool, [message]) - set_up, tear_down は、他のTestUnit framework と同等。 - test runner は付いてないので、自分で実行しないといけない。->run; new MyTest->run; {package MyTest; use base qw/Unit7/; sub new { shift()->SUPER::new(@_) } sub set_up { my($self)=@_; $self->{val} = 0 } sub tear_down { my($self)=@_; undef $self->{val} } sub test_foo { my($self)=@_; $self->assert(defined $self->{val}, "defined val"); $self->assert(!$self->{val}, "! val"); $self->assert(0==$self->{val}, "0 == val"); $self->assert('0' eq $self->{val}, "'0' eq val"); } sub test_bar { my($self)=@_; $self->{val} = 1000; $self->assert(1000 < $self->{val}, "1000 < val"); # failure $self->assert(1000 <= $self->{val}, "1000 <= val"); $self->assert(1000 == $self->{val}, "1000 == val"); $self->assert(1000 > $self->{val}, "1000 > val"); # failure $self->assert(1000 <= $self->{val}, "1000 >= val"); } } http://medaka.5ch.net/test/read.cgi/php/1036141603/221
222: nobodyさん [] 03/12/15 18:50 ID:zoqm3JaO >>220.diff - $o ... 成功したテストの数 + $O ... 成功したテストの数 >>221 の捕捉。 基底クラスを Test::Unit::TestCase に変更するとTestRunner.pl でも実行できます。 でも、Test::Unit::TestCase => Unit7の互換はなし。 >>216 ありがとう。早速使わせてもらってます。 >>218 ()や{}の末尾では、引数の型宣言なしに弧省略出来たと思う。 nice tricky closure. FP的なアプローチってコードの短縮に貢献出来るテクニック多いよね。 >>217 Windows 環境の事すっかり忘れてた。 でも、エンコードしなきゃ大丈夫じゃない? %5C http://medaka.5ch.net/test/read.cgi/php/1036141603/222
223: nobodyさん [sage] 03/12/16 04:29 ID:??? >>222 PATH_INFO の挙動調べてみました。確認ブラウザは IE 6.0.2800.1106 、Mozilla 1.5 、Opera 7.23 ・AN HTTPD 1.42k ピリオド直後の \ は / に変換され、パスとして最適化される。 より上位のディレクトリを指す事はできない。 /foo/bar../baz は 404 。/foo/bar.../baz は 403 。 環境変数 PATH_INFO には URI-unescape 済みの値が入っている。 ・Apache 1.3.29 on FreeBSD \ はそのまま渡され、パスとして最適化される。 より上位のディレクトリを指す事はできない。 /foo/bar../baz はそのまま渡される。 環境変数 PATH_INFO には URI-unescape 済みの値が入っている。 IIS は周りに無いので未調査。 http://medaka.5ch.net/test/read.cgi/php/1036141603/223
224: 7memo [sage] 03/12/16 14:56 ID:??? これで一旦完成。 #!/usr/local/bin/perl use CGI":all";sub U{unescape CGI@_}chomp(($d,$c,$s,$q,$_,@w)=<DATA>);chdir$d;$_ =$&if path_info=~m|[^/]+|;tr/\x00- \x7F/ /s;$_=escape CGI$_;-d&¨$/='';open F,($w=param w)?">$_":$_;eval{flock F,2};print F$w||=<F>;opendir D,'.';charset$c ;put header,start_html(-title=>U($_),style=>$s,lang,ja,encoding,$c),ul(map{li"" .localtime((stat)[9]),a{href,url."/$_"},U$_}sort grep!/^\./,readdir D),h1(U$_), startform(0,url."/$_"),p(textarea(w,$w,@w),submit$q),'</form>',end_html __DATA__ data_dir EUC-JP http://example.com/path/to/your.css save Default Page Title 20 70 http://medaka.5ch.net/test/read.cgi/php/1036141603/224
225: nobodyさん [sage] 03/12/20 01:06 ID:??? >>224 お疲れ様です。 使いやすいしいい感じ。 http://medaka.5ch.net/test/read.cgi/php/1036141603/225
226: ?O?????|?X [] 03/12/28 16:50 ID:7YW8A3U6 c http://medaka.5ch.net/test/read.cgi/php/1036141603/226
227: ?O?????|?X [] 03/12/28 21:24 ID:7YW/F4a6 b http://medaka.5ch.net/test/read.cgi/php/1036141603/227
228: ?O?????|?X [] 03/12/30 16:01 ID:2yZZI8A2 ccv http://medaka.5ch.net/test/read.cgi/php/1036141603/228
229: nobodyさん [ ] 04/01/02 08:14 ID:??? (・Д・) http://medaka.5ch.net/test/read.cgi/php/1036141603/229
230: nobodyさん [sage] 04/01/18 12:18 ID:??? テクニックメモを基に既存プログラムのメンテ中。 ・CGI.pm は最新版縛りで。 ・日本語が通るように。 ・改めて調べたら Win32 でもグロブ使えたのでそのように。 ・XSS 脆弱性や open に渡す値の再確認。 7rss を RSS 0.91 仕様にしてみるテスト。 #!perl -w use CGI qw/:all channel link language description item textinput name/;charset $C='EUC-JP';$w='7wiki';url=~m|[^/]+$|;$p=$`;sub e{title($d=pop),description($d) ,link pop}put header('text/xml'),join"\n",'<?xml version="1.0" encoding="'.$C. '"?>','<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.'. 'dtd">','<rss version="0.91">',channel(e("$p$w.cgi",$w),language(ja),(map{item e"$p$w.cgi/$_",$_}sort{-M$a<=>-M$b}grep/^([A-Z][a-z]+){2,}$/&-f,<*>)[0..9], textinput(title($w),link($p.'7search.cgi'),name S)),'</rss>' http://medaka.5ch.net/test/read.cgi/php/1036141603/230
231: 7ch.cgi [sage] 04/01/18 14:25 ID:??? #!/usr/bin/perl use CGI":all";charset$C=Shift_JIS;open F,'+<F';[<F>];seek F,0,2;*i=*param;s!> ;(\d+)!a{href,"#R$1"},$&!egx,s!https?://.+!a{href,$&},$&!eg,s/\n/br/eg,($n=i(N) ||'nobodyさん')=~s/#.+/crypt$1,'◆'/e,eval{flock F,2},print F dt(++$.,':'.b(a{ name,"R$.",i(M)&&(href,'mailto:'.i M)},$n),':'.localtime),dd($_.p),"\n"if$_= escapeHTML i T;seek F,0,0;*x=*textfield;put$/=header,start_html(-style=>{code=> <DATA>},Title=>'7ch',encoding,$C,lang,ja),dl(<F>),hr,startform,p(submit('書き'. '込む'),' 名前:',x(N),' E-mail:',x(M),br,textarea T,'',6,70),endform,end_html __DATA__ b { color:#080 } body { background:#fff } http://medaka.5ch.net/test/read.cgi/php/1036141603/231
232: nobodyさん [] 04/01/18 20:09 ID:Hq0k6H3L CCC http://medaka.5ch.net/test/read.cgi/php/1036141603/232
233: 7blosxom [sage] 04/01/19 14:33 ID:??? http://cm.xrea.cc/prog/7blosxom.shtml 仕様は >>182 辺りに。 テストファイル生成スクリプトも更新。 @c=('a'..'z','A'..'F');$t=time;$i=24;sub u{$t-=9**5;utime$t,$t,pop}sub j{join"" ,@c[$_[0]..$_[0]+2]}while($i){open(T,'>'.($f=j(--$i).'.txt'))||die$!;print T j( $i),"\n",j($i+3),"\n",j($i+6);close T;$t-=8**7if$i==13;u($f)||die$!}@f=sort <*.txt>;$t=(stat$f[0])[9]-9**7;for(@f){open(S,$_)||die$!;s/(\w+)/uc($1).++$i/e; open(D,">$_")||die$!;print D map uc,<S>;close D;u($_)||die$!} http://medaka.5ch.net/test/read.cgi/php/1036141603/233
234: nobodyさん [] 04/01/20 15:14 ID:F518czSp 激しく板違いなんですけど for(@LOG){ my($no,$dammy)=split(/<>/,$_); for(@LOG){ my($no2,$dammy)=split(/<>/,$_); if($no eq "$no2"){ print "LOG"; for(@LOG){ my($no3,$dammy)=split(/<>/,$_); if($no2 eq "$no3"){ print "LOG"; } } } } } を一回のforルーチンで済ますことってできますか? http://medaka.5ch.net/test/read.cgi/php/1036141603/234
235: 234 [age] 04/01/20 15:22 ID:??? for(@LOG){ my($dammy,$no)=split(/<>/,$_); for(@LOG){ my($dammy,$no2,$no3)=split(/<>/,$_); if($no eq "$no3"){ print "LOG"; for(@LOG){ my($dammy,$no4,$no5)=split(/<>/,$_); if($no2 eq "$no5"){ print "LOG"; } } } } } 間違えました。訂正しまつでつ。 http://medaka.5ch.net/test/read.cgi/php/1036141603/235
236: 234 [age] 04/01/20 15:25 ID:??? ついでに2回のforルーチンでもいいです。 http://medaka.5ch.net/test/read.cgi/php/1036141603/236
237: nobodyさん [sage] 04/01/20 16:52 ID:??? >>234 コードを短くしたいという意図はわかるけど、 実用的なプログラムでは、ここに挙がっている様なテクニックは、 なるべく使わない方が良いよ。 http://medaka.5ch.net/test/read.cgi/php/1036141603/237
238: nobodyさん [sage] 04/02/01 15:24 ID:??? #!/usr/bin/perl require 'bbs.pl'; bbsmain(); 3行で掲示板作ったぞ http://medaka.5ch.net/test/read.cgi/php/1036141603/238
239: nobodyさん [sage] 04/02/01 22:12 ID:??? >>238 モジュール/ライブラリに関して >>46, >>135 >>136, >>174 >>175 http://medaka.5ch.net/test/read.cgi/php/1036141603/239
240: nobodyさん [sage] 04/02/12 06:42 ID:??? 転載 #!/usr/bin/perl -w # 526-byte qrpff, Keith Winstein and Marc Horowitz <sipb-iap-dvd@mit.edu> # MPEG 2 PS VOB file on stdin -> descrambled output on stdout # arguments: title key bytes in least to most-significant order $_='while(read+STDIN,$_,2048){$a=29;$c=142;if((@a=unx"C*",$_)[20]&48){$h=5; $_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$d= unxV,xb25,$_;$b=73;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d>>8^($f=($t=255)&($d >>12^$d>>4^$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9 ,$_=(map{$_%16or$t^=$c^=($m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t ^=(72,@z=(64,72,$a^=12*($_%16-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271)) [$_]^(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval http://medaka.5ch.net/test/read.cgi/php/1036141603/240
241: nobodyさん [sage] 04/02/12 06:51 ID:??? >>240 それがそもそもの始まりだったりする。 http://pc3.2ch.net/tech/kako/984/984182993.html http://medaka.5ch.net/test/read.cgi/php/1036141603/241
242: nobodyさん [] 04/02/16 23:08 ID:j3AvJVjF 保守age。ついでに、あまり役に立ちそうにないTip 配列と配列サイズを同時に宣言 my $length_of_array = my @array = (1, 2, 3, 4, 5); http://medaka.5ch.net/test/read.cgi/php/1036141603/242
243: 7wiki [] 04/02/18 20:32 ID:b6u9ly2x * Added 空投稿でPage削除 * Diet evalの{}外してみた。-1 byte #!/usr/bin/perl -w use CGI":all";charset$c='EUC-JP';$w='\b(([A-Z][a-z]+){2,})';$f=script_name;$/=( );($p)=(path_info||FrontPage)=~/$w/;($m=param z)||unlink$p;if(open F,$m?">$p":$ p){eval flock F,2;print F$m||=<F>}$_=pre(escapeHTML$m).hr.ul map{li"".localtime ((stat)[9]),$_}sort{-M$a<=>-M$b}grep/^$w$/&-f,<*>;s|$w|(!-f$1&&$1).a{href,"$f/$ 1"},-f$1?$1:"?"|eg;put header,start_html(-title=>$p,encoding,$c,lang,ja),h1($p) ,startform(0,"$f/$p"),p(textarea(z,$m,6,60),br,submit),endform,hr,$_,end_html http://medaka.5ch.net/test/read.cgi/php/1036141603/243
244: nobodyさん [sage] 04/02/19 09:30 ID:??? >>243 eval の {} は外せないですよ。 eval flock F,2; だと flock() の戻り値から成る文字列を eval する事に。 unlink の問題はあっちでも指摘されてますが。:o) http://medaka.5ch.net/test/read.cgi/php/1036141603/244
245: 7uploader [sage] 04/02/19 11:44 ID:??? 順番的には先に telnetd を何とかしたいけど、検証が大変なので後回し。 #!/usr/bin/perl use CGI":all";sub v{open(F,pop)||die;binmode F}$CGI::POST_MAX=1024000;$/=\4096; chdir D;%f=map{$_,[a({href,"?d=$_"},$_),-s,''.localtime((stat)[9])]}@f=sort{-M$ a<=>-M$b}<*>;$f{$f=upload f}or$f&&do{v">$f";print F$_ while<$f>;close F};$f{$F= param d}?(v($F),put header(-type=>'application/octet-stream',Content_length,-s $F,attachment,$F),<F>):put(header,start_html,start_multipart_form,filefield(f), submit,endform,hr,table({border,1},Tr[th([qw/name size date/]),map{td$f{$_}}@f] ),end_html) ・windows 対応。 ・既存ファイルへの上書きを防止。但し upload 後自力 reload が必要に。 ファイル名は連番や時刻等にする方が安心且つ楽かな。 http://medaka.5ch.net/test/read.cgi/php/1036141603/245
246: nobodyさん [] 04/02/19 20:30 ID:mWwpYaYp >>244 あ、なるほど。それではevalの意味がなくなってしまう。 一応、事前に実験したんですが、検証方法が間違ってました。m(_ _) フォローありがとうございます。 > unlink の問題はあっちでも指摘されてますが。:o) あぁ、やってしまったぁ。試してくれた方ありがとう&&すみません。 ひとまず >>243は無効って事で、代案考えます。 ところで、ライセンスや掲載許可みたいな事を尋ねられたのだけど、 wiki, や blosxom, はオリジナルと同じ GPL って事でいいかな? 実際、7wikiはYukiWiki, 7blosxomは初期のblosxomを参考にしたので。 http://medaka.5ch.net/test/read.cgi/php/1036141603/246
247: SevenLines の中の人 [sage] 04/02/19 21:28 ID:??? >>246 ライセンスやら何やらは原作者に尋ねるのがスジですが、初出が 2ch だけに連絡取り辛いですな。各スレで直接呼びかけるしか無いかも。 SevenLines で保守している作品については、各原作者と配布形態等を 逐一取り決めてはいないので、建前上あのような断り書きの縛りにして います。拙作のは全部修正 BSD ライセンスで、アーカイヴにライセンス 文書も同梱してます。 ニーズがあるなら専用ドメイン取って、転送メールアドレスの提供ぐらいは しますよん。:) >各原作者殿 http://medaka.5ch.net/test/read.cgi/php/1036141603/247
248: nobodyさん [] 04/02/20 22:48 ID:g/Yl/nab # 重要な事を書き忘れました。 246==7wiki, 7files, 7search, 7rss, 7blosxom, 7Unit, 7uploader, 7hoo 原作です。 (当然だけど、オリジナルではなくこのスレの7行版の方の、です) 掲載許可に関しては、手間のかからない方法で「連絡不要」って事でいいかな? 連絡先作って貰っても、どれほど需要があるかは自分にもわからないので。 ライセンスについては、 #!/usr/bin/perl -w -- "License: http://www.gnu.org/licenses/gpl.txt" で、どぉでしょう?GPL以外でもいいけど http://medaka.5ch.net/test/read.cgi/php/1036141603/248
249: 246 [] 04/02/22 02:18 ID:Sgt6pnb3 >ライセンスの件 ... 自分が叩き台を出したとは言え、成果物はこのスレで参加者皆のものなので 出来れば他の方の意見も伺っておきたいのですが。特に異論がなければ、 >>248通り連絡不要/GPLという事にしたいと思います。 # もしくは、保守して下さってるサイトの管理者さんにお任せ。m(_ _ # 7vote use CGI':all';$p=POST;*P=*param;charset$c='EUC-JP';chdir V;($F)=P(f)=~/^(\d+)$/ ;if(open F,"+<$F"){eval{flock F,2};$t=<F>;while(<F>){if(/^(.+)\t(\d+)$/){$D{$1} =$2}}if(request_method==$p){($n=P(n))?$D{$n}||=1:($v=P(v))?$D{$v}++:0;seek F,0, 0;print F join("\n",$t,map{"$_\t$D{$_}"}keys%D)}}for(radio_group(v,[@K=sort{$D{ $b}<=>$D{$a}}keys%D])){$L{$K[$i++]}=$_}put header,start_html(title=>$t,encoding ,$c,lang,ja),h1($t),startform($p),table({},Tr[map{td["$L{$_}($D{$_})",hr{width =>$D{$_}}]}@K]),hr,textfield(n),hidden(f,$F,force=>1),submit,endform,end_html 設定方法 1) ディレクトリV を作る。 mkdir V;chdir V 2) 題名を書いたファイルを作る。echo "What is your native language" > 00001 # ファイル名は番号で。 3) chmod 0666 00001 # 必要に応じてパーミッションの設定 ./7vote.cgi?f=00001 # ブラウザからアクセス http://medaka.5ch.net/test/read.cgi/php/1036141603/249
250: SevenLines の中の人 [sage] 04/02/22 20:17 ID:??? とりあえず 7wiki, 7files, 7search, 7rss, 7blosxom を GPL で パッケージングしときました。README やライセンス文書の 和訳同梱までは手が回らなかったので、その辺はご希望が あれば追々。 あー、ココに載せるにゃデカ目のファイルのやり取り用に 7uploader 改良して設置しますかのぅ(笑)。 7Unit, 7uploader, 7hoo もその内転載させてもらいますね。 http://medaka.5ch.net/test/read.cgi/php/1036141603/250
251: nobodyさん [sage] 04/02/22 23:23 ID:??? 7wiki と 7uploader 。どちらも shebang 無し七行ルールじゃないと辛いですな。 use CGI":all";charset$c='EUC-JP';$w='\b(([A-Z][a-z]+){2,})';$f=script_name;$/=( );($p)=(path_info||FrontPage)=~/$w/;if(open F,($m=param z)?">$p":$p){eval{flock F,2};print F$m||=<F>;close F}param(d)eq"D"&&unlink$p;$_=pre(escapeHTML$m).hr.ul map{li"".localtime((stat)[9]),$_}sort{-M$a<=>-M$b}grep/^$w$/&-f,<*>;s|$w|(!-f$1 &&$1).a{href,"$f/$1"},-f$1?$1:"?"|eg;put header,start_html(-title=>$p,encoding, $c,lang,ja),h1($p),startform(0,"$f/$p"),p(textarea(z,$m,6,60),br,map{submit d,$ _}Write,Delete),endform,hr,$_,end_html ・削除機能の実装案。 use CGI":all";$CGI::POST_MAX=1024000;$/=\4096;sub v{open(F,pop)||die;binmode F} chdir D;if($f=upload f){$f=~/\.\w+$/;v">".time.$&;print F$_ while<$f>;close F}$ i++<20?push@f,$_:unlink for sort{-M$a<=>-M$b}<*>;($_=param d)?(v($_),put header (-Content_length=>-s,attachment,$_,Type,'application/octet-stream'),<F>):put( header,start_html,start_multipart_form,filefield(f),submit,endform,hr,table({ border,1},Tr[th([qw/name date size/]),map{td([a({href,"?d=$_"},$_),''.localtime ((stat)[9]),-s])}@f]),end_html) ・ファイル名を time に。 ・最大保存数を設定可能に。 http://medaka.5ch.net/test/read.cgi/php/1036141603/251
252: nobodyさん [sage] 04/02/23 22:42 ID:??? 7wikiがすこし結城さんとかにとりあげられて話題になってるんですね。 http://medaka.5ch.net/test/read.cgi/php/1036141603/252
253: nobodyさん [sage] 04/02/24 00:00 ID:??? >>251 7wiki 修正。 s/param(d)eq"D"/param(d)=~D/; s/Delete/Del/; http://medaka.5ch.net/test/read.cgi/php/1036141603/253
254: nobodyさん [sage] 04/02/24 10:13 ID:??? >>250 ありがとうございます。7voteもついでによろしく。 7hooがまだ8行なのを先に何とかしたいけど、他のドキュメント類も暇みて整理してみます。 # 7wiki 削除機能案 B ... POSTで空投稿のときページ削除 use CGI":all";charset$c='EUC-JP';$w='\b(([A-Z][a-z]+){2,})';$f=script_name;$/=( );($p)=(path_info||FrontPage)=~$w;unlink$p if!($m=param z)&&request_method=~/PO ST/x;(open F,$m?">$p":$p)&&eval{flock F,2},print F$m||=<F>;$_=pre(escapeHTML$m) .hr.ul map{li"".localtime((stat)[9]),$_}sort{-M$a<=>-M$b}grep/^$w$/&-f,<*>;s |$w|(!-f$1&&$1).a{href,"$f/$1"},-f$1?$1:"?"|eg;put header,start_html(-title=>$p ,encoding,$c,lang,ja),h1($p),startform(POST,"$f/$p"),p(textarea(z,$m,6,60),br, submit),endform,hr,$_,end_html 後、削れそうなとこといったら、charset'utf-8'にしてencodingはデフォルトにする 位かな。不便になるけど。それでもShebang込7行はちょっと難しそぉ。 http://medaka.5ch.net/test/read.cgi/php/1036141603/254
255: nobodyさん [sage] 04/02/24 12:35 ID:??? >>254 こっちの方がシンプルですな。微妙に縮め。 use CGI":all";charset$c="EUC-JP";$w='\b(([A-Z][a-z]+){2,})';$f=script_name;$/=( );($p)=(path_info||FrontPage)=~/$w/;request_method=~PO&!($m=param z)&&unlink$p; open(F,$m?">$p":$p),eval{flock F,2},print F$m||=<F>;$_=pre(escapeHTML$m).hr.ul map{li"".localtime((stat)[9]),$_}sort{-M$a<=>-M$b}grep/^$w$/&-f,<*>;s|$w|(!-f$1 &&$1).a{href,"$f/$1"},-f$1?$1:"?"|eg;put header,start_html(-title=>$p,lang,ja, encoding,$c),h1($p),startform(0,"$f/$p"),p(textarea(z,$m,6,60),br,submit), endform,hr,$_,end_html http://medaka.5ch.net/test/read.cgi/php/1036141603/255
256: nobodyさん [sage] 04/02/24 13:06 ID:??? charset "utf-8"; にしても XML 宣言の encoding は iso-8859-1 のままなので、 start_html の encoding は外せませんな…。(CGI.pm v3.04) iso-8859-1 && en-US なら楽勝。 use CGI":all";$w='\b(([A-Z][a-z]+){2,})';$f=script_name;$/=();($p)=(path_info|| FrontPage)=~/$w/;request_method=~PO&!($m=param z)&&unlink$p;open(F,$m?">$p":$p) ,eval{flockF,2},print F$m||=<F>;$_=pre(escapeHTML$m).hr.ul map{li"".localtime(( stat)[9]),$_}sort{-M$a<=>-M$b}grep/^$w$/&-f,<*>;s|$w|(!-f$1&&$1).a{href,"$f/$1" },-f$1?$1:"?"|eg;put header,start_html(-title=>$p),h1($p),startform(0,"$f/$p"), p(textarea(z,$m,6,60),br,submit),endform,hr,$_,end_html http://medaka.5ch.net/test/read.cgi/php/1036141603/256
257: 7Hoo [sage] 04/02/24 22:23 ID:??? use CGI":all";charset$c="EUC-JP";($p=path_info||Home)=~s!^/+|/+$!!g;chdir("./". $p)||die;$F='.7hoo';if(@p=map{param$_}U,T,D){s/\s/ /g for@p;open F,">>$F";eval{ flock F,2};$"="\t";print F"@p\n"}put header,start_html(-encoding=>$c,lang,ja, Title,"7Hoo"),p(join" / ",map{a{href,url.($i.="/$_")},$_}split"/",$p),hr,ul(li[ map{a{href,url."/$p/$_"},$_}grep-d,<*>]),open(F)&&hr.dl(map{@N=split/\t/;dt(a{ href,$N[0]},b$N[1]),dd$N[2]}<F>),hr,startform(0,url."/$p"),p((map{textfield( /(.)/,$_,40),br}Url,Title),textarea(D,"",3,40,1),br,submit,),endform,end_html ・l10n 。 ・Home ディレクトリをスクリプトと同階層に用意。 ・カテゴリの table をやめて ul 一つに。 ・リンクリストを dl に。 ・登録フォームを常に表示。 http://medaka.5ch.net/test/read.cgi/php/1036141603/257
258: Store7.pm [] 04/02/27 22:01 ID:xssKWf0b package Store7;sub E{$_=shift;s/\\/\\\\/g;s/'/\\'/g;$_}@ISA='Exporter';@EXPORT= @EXPORT_OK=qw/store retrieve/;sub store{open my$o,">$_[1]";print$o ''.d($_[0]); }sub retrieve{do$_[0]}sub d{my$f=shift;my$e=ref$f;$e eq'SCALAR'?"'".E($$f)."'": $e eq'ARRAY'?'['.join(',',map{d($_)}@$f).']':$e eq'HASH'?'{'.join(',',map{my$k= $_;$_="'".E($k)."'=>".d($f->{$k})}keys%$f).'}':"'".E($f)."'"};use Exporter;1 なんとか5行でStorable.pmと同じ使い方です(storeとretrieveだけ)。 store( \%hashとか\@array, 'data.txt' ); $hash_ref = retrieve('data.txt'); http://medaka.5ch.net/test/read.cgi/php/1036141603/258
259: nobodyさん [] 04/02/27 23:21 ID:aqbVKltF 無造作に縮めてみる。 package Store7;@ISA=Exporter;@EXPORT=@EXPORT_OK=qw/store retrieve/;use Exporter ;sub E{$_=pop;s/(\\|')/\\$1/g;$_}sub d{my$e=ref(my$f=pop);$e eq 'SCALAR'?"'".E$ $f."'":$e eq 'ARRAY'?'['.join(',',map{d$_}@$f).']':$e eq 'HASH'?'{'.join(',', map{"'".E($_)."'=>".d($f->{$_})}keys%$f).'}':"'".E($f)."'"}sub store{open my$o, ">$_[1]";print$o d($_[0])}sub retrieve{do$_[0]} http://medaka.5ch.net/test/read.cgi/php/1036141603/259
260: 258 [] 04/02/28 13:00 ID:GPwfHIuc >>259 \->\\したあと、'->\'しなければいけないので、s/(\\|')/\\$1/g;はマズイっぽいです。 http://medaka.5ch.net/test/read.cgi/php/1036141603/260
261: nobodyさん [sage] 04/02/29 22:04 ID:??? package Store7;use base Exporter;@EXPORT=qw/store retrieve/;sub retrieve{do$_[0 ]}sub E{$_=pop;s/\\/\\\\/g;s/'/\\'/g;"'$_'"}sub d{my$e=ref(my$f=pop);"SCALAR"eq $e?E$$f:"ARRAY"eq$e?"[".join(',',map{d($_)}@$f)."]":"HASH"eq$e?"{".join(',',map {E($_),d($f->{$_})}keys%$f)."}":E$f}local*F;sub store{open F,">".pop;print F d pop;close F}1 ・明示的に close しないとバッファに溜まったデータが print されない為、 store 直後に retrieve できない。 ・Perl 5.005_03 では do pop が出来なかったので、do $_[0] のままに。 http://medaka.5ch.net/test/read.cgi/php/1036141603/261
262: nobodyさん [sage] 04/02/29 23:12 ID:??? 改行しなければいいんでねーの? http://medaka.5ch.net/test/read.cgi/php/1036141603/262
263: nobodyさん [sage] 04/03/01 02:53 ID:??? >>262 >>1 一応こういうルールでやってます。 横79文字ってのは80文字-改行1文字ね。 http://medaka.5ch.net/test/read.cgi/php/1036141603/263
264: nobodyさん [sage] 04/03/03 04:38 ID:??? 新しいお題目なんだけど 七行ハーボット ってどう? 最低限、カウンタ・人工無能・ミニゲームつきって事で。 http://medaka.5ch.net/test/read.cgi/php/1036141603/264
265: nobodyさん [sage] 04/03/03 14:35 ID:??? >>264 ?でしょ http://medaka.5ch.net/test/read.cgi/php/1036141603/265
266: nobody [] 04/03/04 17:41 ID:yJd59Upc accesslog.cgi - 7行アクセス解析。 SSIで埋め込むことで記録。例:<!--#exec cgi="accesslog.cgi"--> データを見るときは http://○○/accesslog.cgi?20040304&MSIE 6 みたいにパラメータ’日付 & 検索文字列(省略可))を渡して呼び出します。 正直perl歴はまだ半年で、テクニック的なものは使えないのでこの程度です。 #! /usr/bin/perl sub z{local(*z)=$_[0];$z=~s/^(\d)$/0$1/;}print"Content-Type:text/plain\n\n";%e= %ENV;$q=$e{'QUERY_STRING'};($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;z(*m);z( *d);z(*h);z(*n);z(*s);if(!$q){open(F,">>$y$m$d.txt");print F "$h$n$s<>$e{'REMOTE_ADDR'}<>$e{'HTTP_USER_AGENT'}<>$e{'HTTP_REFERER'}\n";}else{ ($p,$k)=split(/&/,$q);open(F,"$p.txt");while(<F>){$c++;if($_=~/$k/){print;$t++; }}print"\n全$c件/ヒット$t件\n";}close(F); http://medaka.5ch.net/test/read.cgi/php/1036141603/266
267: nobodyさん [sage] 04/03/04 21:42 ID:??? >>266 初級者お断りとは言わないし、むしろどんどんコードを書き込んでほしい けれど、http://cm.xrea.cc/techinfo.cgi は一通り読んでほしいな。 ハッシュキーのクォート、ブロック末のセミコロン、関数の括弧、暗黙の 代入が行われる変数 etc etc... 文法的に省略可能な部分が沢山残って いるのはちょっとねぇ。 print"Content-Type: text/plain\n\n";if(($_,$k)=split/&/,$ENV{QUERY_STRING}){/^ \d{8}$/x&&open F,"$_.txt";($k?/\Q$k/:1)&&($t++,print)while<F>;print"\n全$.件/". "ヒット$t件"}else{s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m =~s/^\d$/0$&/;open F,">>$y$m$d.txt";print F join('<>',"$h$n$s",@ENV{REMOTE_ADDR ,HTTP_USER_AGENT,HTTP_REFERER}),"\n"} Perl の習熟度に自信がないなら、自力で何とか10行、ぐらいのサイズ から載せてくれたら、スレの住人がよってたかって縮めるんじゃないかな。 http://medaka.5ch.net/test/read.cgi/php/1036141603/267
268: 266 [] 04/03/05 18:15 ID:EBEJkXEP しっかりと読みました。 >>267さんが短くしてくれたおかげで、妥協した機能がつけれました。 日付の範囲指定を可能にして、データをtab区切りで記録して ファイルを表示するのではなくCSV(TSV)としてDLするようにしてみました。 #! /usr/bin/perl print"Content-Disposition: attachment;filename=log.csv;\nContent-Type: text/t". "ab-separated-values\n\n";if(($f,$t,$k)=split/&/,$ENV{QUERY_STRING}){for($f...$ t){/^\d{8}$/x&&open F,"$_.txt";($k?/\Q$k/:1)&&(print)while<F>}}else{s/^\d$/0$&/ for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m=~s/^\d$/0$&/;open F,">>$y$m". "$d.txt";print F join("\t",$h,$n,$s,@ENV{REMOTE_ADDR,HTTP_USER_AGENT, HTTP_REFERER}),"\n"} >>267さんのにただ付け足した感じです。 それでも、たった一日でものすごい勉強になりました。 http://medaka.5ch.net/test/read.cgi/php/1036141603/268
269: nobodyさん [sage] 04/03/06 00:53 ID:??? >>261 オベンキョになります。 http://medaka.5ch.net/test/read.cgi/php/1036141603/269
270: nobodyさん [sage] 04/03/12 09:33 ID:??? 息抜きにテキストカウンタ。お題がお題なので、今日/昨日/総計のカウントと、 ランダムワード表示機能付けてまだ一行余ってるけど。 --- 7rwcntr.cgi --- #!/usr/bin/perl sub P{seek local*F=pop,0,0;print F@_}sub o{open(local*F,"+<@_")||die;eval{flock F,2};*F}sub j{(localtime((stat pop)[9]))[3]}$l=@l=<$_>,chomp($r.=$l[rand$l])for map{o$_}sort<?.dat>;$A=o"all.dat";$a=<$A>+1;j($T=o"tday.dat")==j($Y=o"yday.dat" )?do{P$t=<$T>+1,$T;$y=<$Y>}:do{P$y=<$T>,$Y;P$t=1,$T};P$a,$A;$s=@ARGV?javascript :plain;printf"Content-Type: text/$s\n\n".join('',<DATA>),$r,$a,$t,$y __END__ 空ファイル all.dat, tday.dat, yday.dat を予め用意。 ?.dat というファイルがあると、そのファイルから一行ランダムに選んで表示。 ?.dat が複数あった場合は、各ファイルからランダムに取り出して繋げて表示。 例えば 0.dat に人名、1.dat に場所、2.dat に行動のリストをそれぞれ用意 しておけば、「誰々が何処で何々」のようなランダム文を表示します。 http://medaka.5ch.net/test/read.cgi/php/1036141603/270
271: nobodyさん [sage] 04/03/12 09:36 ID:??? ● SSI での使用 __END__ トークン以下に %s<br />all:%06d today:%03d yesterday:%03d HTML ファイルの body 要素内に <!--#include virtual="/cgi-bin/7rwcntr.cgi"--> ● JavaScript 経由で CGI プログラムとして使用 __END__ トークン以下に function writeCount() { document.write("%s<br />all:%06d today:%03d yesterday:%03d"); } HTML ファイルの header 要素内に <script src="/cgi-bin/7rwcntr.cgi?1" type="text/javascript"></script> body 要素内に <script type="text/javascript"><!-- writeCount(); //--> </script> http://medaka.5ch.net/test/read.cgi/php/1036141603/271
272: 7rwcntr [sage] 04/03/12 11:11 ID:??? 日付切替部分修正。 sub P{seek local*F=pop,0,0;print F@_}sub o{open(local*F,"+<@_")||die;eval{flock F,2};*F}$l=@l=<$_>,chomp($r.=$l[rand$l])for map{o$_}sort<?.dat>;$T=o"tday.dat"; $Y=o"yday.dat";$A=o"all.dat";$a=<$A>+1;(localtime)[3]-(localtime((stat$Y)[9]))[ 3]?do{P$y=<$T>,$Y;P$t=1,$T}:do{P$t=<$T>+1,$T;$y=<$Y>};P$a,$A;$s=@ARGV? javascript:plain;printf"Content-Type: text/$s\n\n".join('',<DATA>),$r,$a,$t,$y http://medaka.5ch.net/test/read.cgi/php/1036141603/272
273: 7rwcntr [sage] 04/03/14 02:10 ID:??? sub o{open(F,"+<@_")?eval{flock F,2}:die;<F>}($a,$t,$y,$l)=split/\t/,o"cnt.dat" ;dbmopen%r,remote,420or die;if(time-$r{$r="@ENV{REMOTE_ADDR,HTTP_USER_AGENT}"}> 3600&&$r ne$l){$y=$t,$t=0if(localtime)[3]-(localtime((stat F)[9]))[3];seek F,0, 0;print F join"\t",++$a,++$t,$y,$r;eval{truncate F,tell F}}$r{$r}=time;chomp($w .=$l[rand(@l=o$_)])for sort<?.dat>;$/=@ARGV?javascript:plain;printf "Content-Type: text/$/\n\n".<DATA>,$w,$a,$t,$y ・カウンタファイル三つを cnt.dat 一つに統合。 ・重複カウント防止。(一時間以内と直前) http://medaka.5ch.net/test/read.cgi/php/1036141603/273
274: 7wiki [sage] 04/03/14 15:28 ID:??? use CGI":all";charset$c="EUC-JP";$w='\b(([A-Z][a-z]+){2,})';$f=script_name;$/=( );($p)=path_info=~/$w/;$p||=FrontPage;request_method=~PO&!($m=param z)&&unlink$ p;open F,$m?">$p":$p;eval{flock F,2};print F$m||=<F>;$_=pre(escapeHTML$m).hr.ul map{li"".localtime((stat)[9]),$_}sort{-M$a<=>-M$b}grep/^$w$/&-f,<*>;s|$w|(!-f$1 &&$1).a{href,"$f/$1"},-f _?$1:"?"|eg;put header,start_html(-title=>$p,encoding, $c,lang,ja),h1($p),startform(0,"$f/$p"),p(textarea(z,$m,6,60),br,submit), endform,hr,$_,end_html ・「〜/7wiki.cgi/」に対応。 http://medaka.5ch.net/test/read.cgi/php/1036141603/274
275: 7uploader [sage] 04/03/14 15:30 ID:??? use CGI":all";$CGI::POST_MAX=1024000;$/=\4096;chdir D;sub v{open(F,pop)?binmode F:die}if($f=upload f){$f=~/\.\w+$/;v">".time.$&;print F$_ while<$f>;close F}++$ i<51?push@f,$_:unlink for sort{$b<=>$a}<*>;($_=param d)?(v($_),put header(-type =>'application/octet-stream',Content_length,-s,attachment,$_),<F>):put(header, start_html,start_multipart_form,filefield(f),submit,endform,table({border,1},Tr [th([Name,Date,Size]),map{td[a({href,"?d=$_"},$_),''.localtime((stat)[9]),-s]} @f]),end_html) ・縮め。 http://medaka.5ch.net/test/read.cgi/php/1036141603/275
276: 7Hoo [sage] 04/03/14 15:31 ID:??? use CGI":all";charset$c="EUC-JP";($p=path_info||Home)=~s!^/+|/+$!!g;chdir"./$p" ||die;$F='.7hoo';s/\s/ /g for@p=map{param$_}U,T,D;open(F,">>$F"),eval{flock F,2 },$"="\t",print F"@p\n"if@p;sub A{a{href,url.pop},$_}sub e{escapeHTML@N[@_]}put header,start_html(-title=>"7Hoo",encoding,$c,lang,ja),p(join" / ",map{A$i.="/". $_}split"/",$p),ul(li[map{A"/$p/$_"}grep-d,<*>]),open(F)&&hr.dl(map{@N=split/\t /x;dt(a{href,$N[0]},b e 1),dd e 2}<F>),hr,startform(0,url."/$p"),p(join br,(map {textfield/(.)/,$_,40}Url,Title),textarea(D,"",3,40,1),submit),endform,end_html ・XSS 脆弱性の fix http://medaka.5ch.net/test/read.cgi/php/1036141603/276
277: SevenLines の中の人 [sage] 04/03/14 15:52 ID:??? >>274-276 の三つ、問題無いようでしたらサイトに載せます。 7uploader と 7Hoo は仕様や出力を随分いぢってしまったので、 軌道修正もお願いします。(w >原作者殿 作業用のアップローダ用意しましたので、ファイルの受け渡しに ご利用下さい。 http://cm.xrea.cc/upload.cgi TODO: 7rwcntr > telnetd > Unit7 > Store7 > 7vote telnetd と accesslog.cgi は 202 さんと 266 さんに掲載許可を 頂け次第サイトに載せようと思ってますので、適用ライセンス等 ご連絡下されば幸いです。 http://medaka.5ch.net/test/read.cgi/php/1036141603/277
278: 266 [] 04/03/15 14:12 ID:jJ3gsLA0 #! /usr/bin/perl sub r{$r=$_[0]?"tab-separated-values\nContent-Disposition: attachment;filenam". "e=log.csv":"plain";print"Content-Type: text/$r\n\n"}if(($a,$f,$t,$k)=split/&/, $ENV{QUERY_STRING}){r $a;for($f...$t){/^\d{8}$/x&&open F,"$_.txt";($k?/\Q$k/:1) &&(print)while<F>}}else{r;s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900; $m++;$m=~s/^\d$/0$&/;open F,">>$y$m$d.txt";print F join("\t",$h,$n,$s,@ENV{ REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"} >>266です。 >>268はアクセスログ記録モードで呼び出したときもCSVのダウンロードダイアログが出る という致命的なバグがありました。すみません。 バグ修正と、さらにパラメータで画面に表示/ダウンロードを選択できるようにしました。 また、REQUEST_URIも記録するようにしたので、サイト全体の解析にも使えるようになったと思います。 スクリプト名は他にあわせて、7accesslog.cgi と変更しようと思います。 こんなので掲載していただけるのであれば是非お願いします。 このスレのおかげで完成したと思っているので、私としては権利等の主張をする つもりはありませんのでGPLあたりの他のスクリプト同様のライセンスにしてください。 ■使用法 ・記録時はSSI等で呼び出します。>>271さんみたいにJavaScriptでも呼び出せそうな気はします。 ・表示およびダウンロード時はパラメータをつけて普通に呼び出します。 パラメータなし アクセスログを記録。 日付.txt に 時,分,秒,REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER を記録します。 パラメータあり アクセスログを表示/ダウンロード 第1パラメータ ・・・ 0:表示 1:ダウンロード 第2パラメータ ・・・ ログの取得開始日(yyyymmdd) 第3パラメータ ・・・ ログの取得終了日(yyyymmdd) 第4パラメータ ・・・ ログ取得時の絞込みキーワード(省略すると全件取得) (例) http://hoge.com/7accesslog.cgi?1&20040301&20040331&MSIE この例では、2004年3月1日〜2004年3月31日までの「MSIE」を含むログがダウンロードされます。 http://medaka.5ch.net/test/read.cgi/php/1036141603/278
279: 7accesslog [sage] 04/03/16 15:40 ID:??? ($a,$f,$t,$k)=@ARGV;print"Content-Type: text/",!$a?plain:"tab-separated-values Content-Disposition: attachment;filename=log.csv","\n\n";$k=~s/%([\da-f]{2})/ pack"H2",$1/egi;$f?do{/^\d{8}$/&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>) for$f..$t||$f}:do{s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m =~s/^\d$/0$&/;open F,">>$y$m$d.txt";print F join("\t",$h,$n,$s, @ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"} ・検索ワードを URI-unescape ・第 3 引数を省略可能に ・パラメータをクエリ渡しから引数渡しへ (例) http://hoge.com/7accesslog.cgi?1+20040301+20040331+MSIE%205 http://hoge.com/7accesslog.cgi?1+20040301 http://medaka.5ch.net/test/read.cgi/php/1036141603/279
280: 266 [sage] 04/03/16 18:36 ID:??? >7accesslog for で $f..$t ってやると、月や年をまたいだ時、 無駄なファイルオープン(できないやつ)が多発するので そこをなんとかしたいです・・・。 ヘタレな私にはいい方法が思いつきませんが。 http://medaka.5ch.net/test/read.cgi/php/1036141603/280
281: nobodyさん [sage] 04/03/16 22:51 ID:??? >>280 ・効率的な生成アルゴリズムを Web や本から探す。 ・思いつくまま色々書いて試す。 ・文字数を食っている機能を捨てる。 ・緩めのルール (shebang 無し 7 行 & モジュール可) で挑戦する。 とにかく足掻いて形にするのが大事。 http://medaka.5ch.net/test/read.cgi/php/1036141603/281
282: nobodyさん [sage] 04/03/16 23:11 ID:??? >>277 202です。 ライセンスとかようわからないですが、telnetdとStore7はほかのと同じようにして置いていただければ結構です。 http://medaka.5ch.net/test/read.cgi/php/1036141603/282
283: 266 [sage] 04/03/17 10:18 ID:??? ($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack"H2",$1/egi;$l=$f.($t?"-$t":"").($k ?"-$k":"");print"Content-Type: text/",$a?"tab-separated-values\nContent-Dispo". "sition: attachment;filename=log$l.csv":plain,"\n\n";$f?do{/^\d{4}(\d\d)(\d\d)$ /x&&$1*$2&&$1<13&&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t ||$f}:do{s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m=~s/^\d$/0 $&/x;open F,">>$y$m$d.txt";print F join("\t",$y,$m,$d,$h,$n,$s,@ENV{REQUEST_URI ,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"} ■記録時 ・ログファイルに日付も記録するよう変更。 (日付範囲を指定してログ表示した際に日付が無いとわけわからないため) ■閲覧時 ・ダウンロード時のファイル名に抽出条件を盛り込むよう変更。 ・1〜12月の1〜31日の間だけファイルオープンを試みるよう変更。 いろいろ増やしたらshebang無し七行になっちゃいました。 http://medaka.5ch.net/test/read.cgi/php/1036141603/283
284: nobodyさん [sage] 04/03/17 11:13 ID:??? トイレに行かせただけで動作未確認。 ($k=$ARGV[3])=~s/%([\da-f]{2})/pack"H2",$1/egi;/\D/&&die for($a,$f,$t)=@ARGV; print"Content-Type: text/",$a?"tab-separated-values\nContent-Disposition: atta" ."achment;filename=log$f".($t&&"-$t").($k&&"-$k").'.csv':plain,"\n\n";$f?do{/^. ...(..)(..)$/x&&$1*$2&&$1<13&&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1, <F>)for$f..$t||$f}:do{($d,$m,$y)=(localtime)[3,4,5];open F,sprintf">>%d%02d%02" ."d.txt",$y+1900,$m+1,$d;print F join("\t",''.localtime,@ENV{REQUEST_URI, REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"} ログの日付を scalar localtime に変更。 http://medaka.5ch.net/test/read.cgi/php/1036141603/284
285: nobodyさん [sage] 04/03/17 14:13 ID:??? ($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack"H2",$1/egi;print"Content-Type: ". "text/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=l". "og$f".($t&&"-$t").($k&&"-$k").'.csv':plain,"\n\n";$f?do{/^....(..)(..)$/&&$1* $2&&$1<13&&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$f}: do{($d,$m,$y)=(localtime)[3,4,5];open F,sprintf">>%d%02d%02d.txt",$y+1900,$m+1 ,$d;print F join("\t",''.localtime,@ENV{REQUEST_URI,REMOTE_ADDR, HTTP_USER_AGENT,HTTP_REFERER}),"\n"} >>284 1行目ってなんで変えたの?>>283の1行目で動くようなので戻すことで若干縮め。 あとattachmentのつづり直した。もう少しでshebang含7行。 http://medaka.5ch.net/test/read.cgi/php/1036141603/285
286: nobodyさん [sage] 04/03/17 15:03 ID:??? >>285 コードそのまま。$a, $f, $t に数字以外の文字が 含まれない事を保障する為。 まぁここはチェック飛ばしても穴にはならんかな。 http://medaka.5ch.net/test/read.cgi/php/1036141603/286
287: nobodyさん [sage] 04/03/17 17:14 ID:??? >>285 78文字+改行になってるよw さらに強引に短くしてみた。 変更点 pack"H2"→pack H2 DLファイル名→$f-$t-$k.log $1*$2→$1のみ判定 [3,4,5]→[3..5] #! perl ($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack H2,$1/egi;print"Content-Type: te". "xt/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=$f".($ t&&"-$t").($k&&"-$k").'.log':plain,"\n\n";$f?do{/^....(..)(..)$/&&$1&&$1<13&&$2 <32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$f}:do{($d,$m,$y)= (localtime)[3..5];open F,sprintf">>%d%02d%02d.txt",$y+1900,$m+1,$d;print F join ("\t",''.localtime,@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}), "\n"} あと5バイト http://medaka.5ch.net/test/read.cgi/php/1036141603/287
288: nobodyさん [sage] 04/03/17 17:15 ID:??? 汎用 TSV ヴューア #!/usr/local/bin/perl use CGI":all";charset$C='EUC-JP';*P=*param;($f=P(f))=~/[^\w*\-.?\[\\\]]/&¨$ w=P(w)||"\t";chomp(@l=map{open(_)?grep(/\Q$w/,<_>):()}grep/$f/o&&-f,<*>)if$f;%l =(f,"target file regex",w,"search word",o,"output file name");put(($o=P(o))?( "Content-Type: text/tab-separated-values\nContent-Disposition: attachment;file" ."name=$o\n\n",@l):(header,start_html(-title=>'7tsview',encoding,$C,lang,ja), table({border,1},Tr[map{td[split/\t/]}@l]),startform(0,url),p(map{$l{$_}, textfield($_,'',40).br}f,w,o),endform,end_html)) http://medaka.5ch.net/test/read.cgi/php/1036141603/288
289: nobodyさん [sage] 04/03/17 17:27 ID:??? use CGI":all";charset$C='EUC-JP';*P=*param;($f=P(f))=~/[^\w*\-.?\[\\\]]/&¨$ w=P(w)||"\t";chomp(@l=map{open(_)?grep(/\Q$w/,<_>):()}grep/$f/o&&-f,<*>)if$f;%l =(f,"target file regex",w,"search word",o,"output file name");put(($o=P(o))?( "Content-Type: text/tab-separated-values\nContent-Disposition: attachment;file" ."name=$o\n\n",@l):(header,start_html(-title=>'7tsview',encoding,$C,lang,ja), table({border,1},Tr[map{td[split/\t/]}@l]),startform(0,url),p(map{$l{$_}, textfield($_,'',40).br}f,w,o),submit(0,go),endform,end_html)) submitを追加 http://medaka.5ch.net/test/read.cgi/php/1036141603/289
290: nobodyさん [sage] 04/03/17 17:31 ID:??? 動作未確認。末尾に空フィールドができるけどゴメンして。 ($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack H2,$1/egi;print"Content-Type: te". "xt/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=$f".($ t&&"-$t").($k&&"-$k").'.log':plain,"\n\n";sub l{localtime}$f?do{/^....(..)(..)$ /x&$1<13&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$f}:do{ ($d,$m,$y)=(l)[3..5];open F,sprintf">>%d%02d%02d.txt",$y+1900,$m+1,$d;print F join"\t",''.l,@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER},"\n"} http://medaka.5ch.net/test/read.cgi/php/1036141603/290
291: 266 [] 04/03/18 14:52 ID:vM8w8oY1 #! /usr/bin/perl ($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack H2,$1/egi;print"Content-Type: te". "xt/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=$f".($ t&&"-$t").($k&&"-$k").'.log':plain,"\n\n";sub l{localtime}$f?do{/^....(..)(..)$ /x&$1*$2&$1<13&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$ f}:do{open F,sprintf">>%d%02d%02d.txt",(l)[5]+1900,(l)[4]+1,(l)[3];print F join ("\t",''.l,@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"} ・書き込み時のファイル名構築の際に関数lを使用するよう変更 ・0月も0日も除外するようあらためて変更 ・>>290さんの末尾の空フィールドができないよう変更 皆さんのおかげで再びshebang入り七行達成しました。 しかし、>>288-289のツールがあるなら、閲覧モードは不要だったりして・・・。 http://medaka.5ch.net/test/read.cgi/php/1036141603/291
292: SevenLines の中の人 [sage] 04/03/23 12:22 ID:??? 7wiki (>>274) 、7Hoo (>>276) 、7accesslog (>>291) を載せました。 README の変更等ありましたらココかアップローダにお願いします。 http://medaka.5ch.net/test/read.cgi/php/1036141603/292
293: nobodyさん [] 04/03/23 16:33 ID:C7ISjwar #! /usr/bin/perl use CGI":all";charset$c='EUC-JP';opendir(H,"./");$s='7editor';while($i=readdir H){$l.=li a {href,"$s.cgi?$i"},$i}if(request_method eq'POST'){$p=param(f);open( H,">$p");print H param(t);print"Location: $s.cgi?$p\n\n"}else{$q=$ARGV[0];if($q ){open H,$q;$f.=$_ while(<H>)}put header,start_html(-title=>$s,encoding,$c,lang ,ja),h1($s),ul($l),startform(post,"$s.cgi"),p(textfield f,$q),p(textarea t,$f,9 ,82),p(submit regist),endform,end_html} ●7editor.cgi サーバ上のファイルを直接編集できます。ファイル名欄を変えれば新規作成も可能です。 textareaのサイズは、一応七行プログラミングを組みやすいかと思われる82x9にしてみました。 ToDo: ・セキュリティ対策 ・ディレクトリ移動 ・ファイル削除くらいはできた方がいいかも とりあえずたたき台ってことで。 http://medaka.5ch.net/test/read.cgi/php/1036141603/293
294: nobodyさん [sage] 04/03/23 17:07 ID:??? 縮め&書き込み確認ダイアログ #! /usr/bin/perl use CGI":all";charset$c='EUC-JP';opendir H,"./";$s='7editor';while($i=readdir H ){$l.=li a{href,"$s.cgi?$i"},$i}if(request_method eq'POST'){$p=param(f);open H, ">$p";print H param(t);put"Location: $s.cgi?$p\n\n"}else{if(open H,$q=$ARGV[0]) {$f.=$_ while(<H>)}put header,start_html(-title=>$s,encoding,$c,lang,ja),h1($s) ,ul($l),startform(-onSubmit=>"return confirm('OK?')",post,"$s.cgi"),p(textfield f,$q),p(textarea t,$f,9,82),p(submit regist),endform,end_html} http://medaka.5ch.net/test/read.cgi/php/1036141603/294
295: nobodyさん [sage] 04/03/23 18:36 ID:??? #! /usr/bin/perl use CGI":all";charset$c='EUC-JP';*b=*param;opendir H,"./";while($i=readdir H){$ l.=li a{href,($s='7editor').".cgi?$i"},$i}if(request_method=~/POST/){open H,">" .($n=b F);$_=b T;s/[\r\n|\r[^\n]]/\n/g;print H;put redirect"$s.cgi?$n"}else{if( open H,$q=$ARGV[0]){$f.=$_ while<H>}put header,start_html(-title=>$s,encoding,$ c,lang,ja),h1($s),ul($l),startform(-onSubmit=>"return confirm('OK?')",,"$s.cgi" ),p(textfield F,$q),p(textarea T,$f,9,82),p(submit regist),endform,end_html} 環境によって改行コードが変わってしまうバグを修正。結構ギリギリ。 http://medaka.5ch.net/test/read.cgi/php/1036141603/295
296: nobodyさん [] 04/03/24 11:46 ID:/Yo7kiNa #! perl use CGI":all";charset$c='EUC-JP';opendir H,".".($d=path_info);while($_=readdir H){if(!/^\.+$/){$l.=li a{href,script_name."$d".(-d".$d/$_"?"/":"?").$_},$_}}if( request_method=~/P/){open H,">.$d/".($n=param F);$_=param T;s/\r\n|\r[^\n]/\n/g ;print H}if(open H,".$d/".($q=$ARGV[0])){$f.=$_ while<H>}put header,start_html( -title=>"7editor",encoding,$c,lang,ja),h1($d||"/"),ul($l),startform(-onSubmit=> "return confirm('OK?')"),p(textfield(F,$q),br,textarea(T,$f,9,82),br,submit),endform,end_html ディレクトリを移動できるように 「.」「..」は非表示 h1要素は現在位置を表示 スクリプト名は自由(7editorじゃなくても可)に でも14文字ほどハミ出た。 http://medaka.5ch.net/test/read.cgi/php/1036141603/296
297: nobodyさん [sage] 04/03/24 14:15 ID:??? use CGI":all";charset$c='EUC-JP';($d=path_info)=~s|/*$|/|;if(request_method=~PO ){open H,">.$d".($n=param F);$_=param T;s/\x0D\x0A/\n/g;tr/\r/\n/;print H}$/=() ,$f=<H>if open H,".$d".($q=pop);opendir H,".$d";$l.=li a{href,url.$d.(-d".$d$_" ?$_:"?$_")},$_ for grep!/^\.+$/,readdir H;put header,start_html(-encoding=>$c, lang,ja,Title,"7editor"),h1($d),ul($l),startform(-onSubmit=>"return confirm( 'OK?')"),p(textfield(F,$q),br,textarea(T,$f,9,82),br,submit),endform,end_html http://medaka.5ch.net/test/read.cgi/php/1036141603/297
298: nobodyさん [sage] 04/03/24 15:33 ID:??? ・.で画面リロード、..で親DIRへ移動 ・ディレクトリはお尻に「/」 use CGI":all";charset$c='EUC-JP';($d=path_info)=~s|/*$|/|;if(request_method=~PO ){open H,">.$d".($n=param F);$_=param T;s/\x0D\x0A/\n/g;tr/\r/\n/;print H}$/=() ,$f=<H>if open H,".$d".($q=pop);opendir H,".$d";$l.=li a{href,url.$d.(($h=-d".$ d$_")?$_:"?$_")},($_.($h&&"/"))for readdir H;put header,start_html(-encoding=>$ c,lang,ja,Title,"7editor"),h1($d),ul($l),startform(-onSubmit=>"return confirm( 'OK?')"),p(textfield(F,$q),br,textarea(T,$f,9,82),br,submit),endform,end_html http://medaka.5ch.net/test/read.cgi/php/1036141603/298
299: nobodyさん [sage] 04/03/24 20:28 ID:??? #!/usr/bin/perl use IO::Socket;$S=new IO::Socket::INET(Listen,1,LocalPort,1029,Reuse,1);sub p{ print@_}sub g($){($_=getc$C)eq pop}$n="\x0D\x0A";sub o{$c=pop;g"\x01"?($e=$c&2) :/\x22/?($c&1or$e=0):($c=1);p pack(C2,255,250+(4,2,2,4,3,2,1,4)[$c&1?$c:$c+4]), $_}{binmode($C=$S->accept);select$C;$e=1;$b='';p$p='$ ';{g"\xFF"?g"\xF7"?chop$b :/\xF8/?($b=''):/\xFB/?o 0:/\xFC/?o 1:/\xFD/?o 2:/\xFE/?o 3:0:/\x00/?do{$b=~s/[ $n]+\z//x;"exit"eq$b&&last;s/\s+\z/$n/for@o=`$b`;p$n,@o,$p;$b=''}:(/\x08/?chop$ b:($b.=$_),/[$n]/||$e&&p$_);redo}close$C;redo} ttp://www5e.biglobe.ne.jp/~aji/3min/53.html を読みながら色々 実装してみるも、>>207 に負けてる telnetd 。;) 動作確認: TeraTermPro → Win98SE (command.com + KI-Shell) TeraTermPro → FreeBSD 4-STABLE (tcsh) telnet(1) (line mode) → Win98SE (command.com + KI-Shell) telnet(1) (line mode) → FreeBSD 4-STABLE (tcsh) TODO: cd http://medaka.5ch.net/test/read.cgi/php/1036141603/299
300: 7telnetd [sage] 04/03/25 10:13 ID:??? cd 実装。 #!/usr/bin/perl use IO::Socket;$S=new IO::Socket::INET(Listen,1,LocalPort,1029,Reuse,1);sub p{ print$C @_}sub g($){($_=getc$C)eq pop}$n="\x0D\x0A";{binmode($C=$S->accept);$e= 1;$b='';p$p='$ ';{g"\xFF"?g"\xF7"?chop$b:/\xF8/?($b=''):/[\xFB-\xFE]/?do{$c=ord ()-251;g"\x01"?($e=$c&2):/\x22/?($c&1or$e=0):($c=1);p pack(C2,255,250+(4,2,2,4, 3,2,1,4)[$c&1?$c:$c+4]),$_}:0:/\x00/?(($_,$b)=$b,s/[$n]+\z//,/^exit$/&&last,p$n ,(/^cd\s+/?chdir$':map{s/\s+\z/$n/;$_}`$_`),$p):(/\x08/?chop$b:($b.=$_),/[$n]/ ||$e&&p$_);redo}close$C;redo} http://medaka.5ch.net/test/read.cgi/php/1036141603/300
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 152 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
アボンOFF
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s