1 名前:nobodyさん [02/11/01 18:06 ID:umVq3FGM] ・7行×79文字 ・Perl どうぞ。
263 名前:nobodyさん mailto:sage [04/03/01 02:53 ID:???] >>262 >>1 一応こういうルールでやってます。 横79文字ってのは80文字-改行1文字ね。
264 名前:nobodyさん mailto:sage [04/03/03 04:38 ID:???] 新しいお題目なんだけど 七行ハーボット ってどう? 最低限、カウンタ・人工無能・ミニゲームつきって事で。
265 名前:nobodyさん mailto:sage [04/03/03 14:35 ID:???] >>264 _でしょ
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);
267 名前:nobodyさん mailto:sage [04/03/04 21:42 ID:???] >>266 初級者お断りとは言わないし、むしろどんどんコードを書き込んでほしい けれど、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行、ぐらいのサイズ から載せてくれたら、スレの住人がよってたかって縮めるんじゃないかな。
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 さんのにただ付け足した感じです。 それでも、たった一日でものすごい勉強になりました。
269 名前:nobodyさん mailto:sage [04/03/06 00:53 ID:???] >>261 オベンキョになります。
270 名前:nobodyさん mailto: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 に行動のリストをそれぞれ用意 しておけば、「誰々が何処で何々」のようなランダム文を表示します。
271 名前:nobodyさん mailto: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>
272 名前:7rwcntr mailto: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
273 名前:7rwcntr mailto: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 一つに統合。 ・重複カウント防止。(一時間以内と直前)
274 名前:7wiki mailto: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/」に対応。
275 名前:7uploader mailto: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) ・縮め。
276 名前:7Hoo mailto: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
277 名前:SevenLines の中の人 mailto:sage [04/03/14 15:52 ID:???] >>274-276 の三つ、問題無いようでしたらサイトに載せます。 7uploader と 7Hoo は仕様や出力を随分いぢってしまったので、 軌道修正もお願いします。(w >原作者殿 作業用のアップローダ用意しましたので、ファイルの受け渡しに ご利用下さい。 cm.xrea.cc/upload.cgi TODO: 7rwcntr > telnetd > Unit7 > Store7 > 7vote telnetd と accesslog.cgi は 202 さんと 266 さんに掲載許可を 頂け次第サイトに載せようと思ってますので、適用ライセンス等 ご連絡下されば幸いです。
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パラメータ ・・・ ログ取得時の絞込みキーワード(省略すると全件取得) (例) hoge.com/7accesslog.cgi?1&20040301&20040331&MSIE この例では、2004年3月1日〜2004年3月31日までの「MSIE」を含むログがダウンロードされます。
279 名前:7accesslog mailto: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 引数を省略可能に ・パラメータをクエリ渡しから引数渡しへ (例) hoge.com/7accesslog.cgi?1+20040301+20040331+MSIE%205 hoge.com/7accesslog.cgi?1+20040301
280 名前:266 mailto:sage [04/03/16 18:36 ID:???] >7accesslog for で $f..$t ってやると、月や年をまたいだ時、 無駄なファイルオープン(できないやつ)が多発するので そこをなんとかしたいです・・・。 ヘタレな私にはいい方法が思いつきませんが。
281 名前:nobodyさん mailto:sage [04/03/16 22:51 ID:???] >>280 ・効率的な生成アルゴリズムを Web や本から探す。 ・思いつくまま色々書いて試す。 ・文字数を食っている機能を捨てる。 ・緩めのルール (shebang 無し 7 行 & モジュール可) で挑戦する。 とにかく足掻いて形にするのが大事。
282 名前:nobodyさん mailto:sage [04/03/16 23:11 ID:???] >>277 202です。 ライセンスとかようわからないですが、telnetdとStore7はほかのと同じようにして置いていただければ結構です。
283 名前:266 mailto: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無し七行になっちゃいました。
284 名前:nobodyさん mailto: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 に変更。
285 名前:nobodyさん mailto: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行。
286 名前:nobodyさん mailto:sage [04/03/17 15:03 ID:???] >>285 コードそのまま。$a, $f, $t に数字以外の文字が 含まれない事を保障する為。 まぁここはチェック飛ばしても穴にはならんかな。
287 名前:nobodyさん mailto: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バイト
288 名前:nobodyさん mailto: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))
289 名前:nobodyさん mailto: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を追加
290 名前:nobodyさん mailto: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"}
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 のツールがあるなら、閲覧モードは不要だったりして・・・。
292 名前:SevenLines の中の人 mailto:sage [04/03/23 12:22 ID:???] 7wiki (>>274 ) 、7Hoo (>>276 ) 、7accesslog (>>291 ) を載せました。 README の変更等ありましたらココかアップローダにお願いします。
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: ・セキュリティ対策 ・ディレクトリ移動 ・ファイル削除くらいはできた方がいいかも とりあえずたたき台ってことで。
294 名前:nobodyさん mailto: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}
295 名前:nobodyさん mailto: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} 環境によって改行コードが変わってしまうバグを修正。結構ギリギリ。
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文字ほどハミ出た。
297 名前:nobodyさん mailto: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
298 名前:nobodyさん mailto: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
299 名前:nobodyさん mailto: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
300 名前:7telnetd mailto: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}
301 名前:クダランけど mailto:sage [04/03/25 11:06 ID:???] ■ 7jump.cgi(ime.nuクローン) ttp://hoge.com/7jump.cgi/www.2ch.net/ スキーマ指定可能 ttp://hoge.com/7jump.cgi/www.2ch.net/ 省略時はhttp:// #! perl use CGI":all";charset$c='EUC-JP';$_=path_info;s|^/||;s/\"/"/g;s/\'/?/g ;s/</</g;s/>/>/g;s/&(?![\#0-9a-zA-Z]+;?)/&/g;$_="$_ "if!/:/;($m ,$a)=<DATA>;put header,start_html(-title=>"7jump",encoding,$c,lang,ja),p(strong (a{href,$_},$_).br.$m),hr,address($a),end_html; __DATA__ 別のサイトにジャンプしようとしています。宜しければ上記のリンクをクリックしてください Powered by WebProg
302 名前:実体参照忘れてたスマソ mailto:sage [04/03/25 11:08 ID:???] #! perl use CGI":all";charset$c='EUC-JP';$_=path_info;s|^/||;s/\"/"/g;s/\'/'/g ;s/</</g;s/>/>/g;s/&(?![\#0-9a-zA-Z]+;?)/&/g;$_="$_ "if!/:/;($m ,$a)=<DATA>;put header,start_html(-title=>"7jump",encoding,$c,lang,ja),p(strong (a{href,$_},$_).br.$m),hr,address($a),end_html; __DATA__ 別のサイトにジャンプしようとしています。宜しければ上記のリンクをクリックしてください Powered by WebProg
303 名前:nobodyさん mailto:sage [04/03/25 11:55 ID:???] use CGI":all";charset$c='EUC-JP';$_=path_info;/:/?s|^/||:($_="http:/$_");put header,start_html(-Title,"7jump",encoding,$c,lang,ja),p(strong(a{href,$_}, escapeHTML$_).br.<DATA>),hr,address(<DATA>),end_html
304 名前:nobodyさん mailto:sage [04/03/29 10:25 ID:???] 巻き戻り分。 304 :7uploader :04/03/25 21:16 ID:??? use CGI":all";$CGI::POST_MAX=1<<20;$/=\4096;chdir D;sub v{open(F,pop)?binmode F :die}if(($f=upload 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 [map{td[a({href,"?d=$_"},$_),''.localtime+(stat)[9],(-s>>10 ).KB]}@f]),end_html) ・ファイルサイズを KB で表示。
305 名前:Unit7.pm mailto:sage [04/03/29 10:31 ID:???] #!perl if(!caller){my$p=pop;eval"use $p;1"?new$p->run:die$@}package Unit7;sub p{print" @_\n"}sub new{bless{},shift}sub run{$N=$O=0;for(grep/^test/,keys%{ref($s=shift) ."::"}){$T=$n=$o=0;$N++;set_up$s;$s->$_();tear_down$s;$n-$o||$O++;$T||p"$N) $S" ;print"$o/$n ok\n"}p$N-$O?("Run: $N, Failures:",$N-$O):"OK ($N tests)"}*set_up= *tear_down=sub{};sub assert{($s,$f,$m)=@_;($S)=(caller 1)[3]=~/\w+$/g;$n++;$o++ ,return if$f;$T++||p"$N) $S";print"\t$m\n"}$VERSION=1.00 ・出力フォーマットの変更 ・簡易 TestRunner.pl を内包 (> perl ./Unit7.pm My::TestCase::Class)
306 名前:Store7.pm mailto:sage [04/03/29 14:12 ID:???] package Store7;use Symbol;sub E{$_=pop;s/['\\]/\\$&/g;"'$_'"}sub D{local$_=ref( my$f=pop);/SCALAR/?E$$f:/ARRAY/?"[".join(',',map{D($_)}@$f)."]":/HASH/?"{".join (',',map{E($_),D($f->{$_})}keys%$f)."}":E$f}$O='{open($f=gensym,$m.pop)||die if $m="';$E='local$/;(eval<$f>';$P='print$f D pop;1';$F='eval{flock$f';$L='lock_'; use base Exporter;$C=',close$f';$G='{$f=pop;';$M='}sub ';@EXPORT=($S='store',$R ='retrieve');@EXPORT_OK=($S.'_fd',"fd_$R",$L.$S,$L.$R);eval qq/sub $R$O<";$E$C )[0]$M$L$R$O<";$F,1};$E$C)[0]$M\fd_$R$G$E)[0]$M$S$O>";$P$C$M$L$S$O>";$F,2};$P$C $M$S\_fd$G$P}/;$VERSION=1.00 ・store_fd 、lock_store 、fd_retrieve 、lock_retrieve 実装 >>260 s/['\\]/\\$&/g でマズい例ってどんなのでしょう?
307 名前:nobodyさん mailto:sage [04/04/16 12:15 ID:???] >>209 までに出たものの追加分 # 7wiki.cgi >243 >244 >251 >253 >254 >255 >256 >274 # 7wiki.cgi 用 RSS出力 >230 # 7ch >231 # 動作確認用ファイル生成 4 7blosxom >233 # telnetd >299 >300 # 7uploader.cgi >245 >251 >275 >304 # 7hoo (PerlHoo) >257 >276 >>209 以降に出た分 # 掲示板(4) >211 >212 # 7memo >216 >218 >219 >224 # Unit7 >220 >221 >222 >305 # ライセンスについて >246 >247 >248 # 7vote >249 # Store7 >258 >259 >260 >261 >306 # 7accesslog >266 >267 >268 >278 >279 >280 >283 >284 >285 >286 >287 >290 >291 # 7rwcntr >270 >271 >272 >273 # 7tsview >288 >289 # 7editor >293 >294 >295 >296 >297 >298 # 7jump >301 >302 >303
308 名前:SevenLines の中の人 mailto:sage [04/04/16 12:18 ID:???] ダメ出しが無いようなので 7telnetd (>>300 ) と Unit7 (>>305 ) を載せました。 (個人的な)TODO: 7ch と 7thread の転載体裁整え > Store7 > 7vote 128 氏もライセンス GPL にしちゃっていいんでしょか? ご自身のサイトをお持ちでそちらで公開されるなら、SevenLines から リンクさせてもらいますよと言ってみるテスト。
309 名前:Store7.pm mailto:sage [04/04/19 14:35 ID:???] 縮め。 package Store7;use base Exporter;use Symbol;sub E{$_=pop;s/['\\]/\\$&/g;"'$_'"} @EXPORT=($S=store,$R=retrieve);$L=lock_;@EXPORT_OK=($S.'_fd',"fd_$R",$L.$S,$L.$ R);sub D{local($_,$")=(ref(my$f=pop),',');/^S/?E$$f:/^A/?"[@{[map{D($_)}@$f]}]" :/^H/?"{@{[map{E($_),D($f->{$_})}keys%$f]}}":E$f}$M='}sub ';$P='print$f D pop;1 ';($E,$C,$F,$G)=qw|local$/;(eval<$f> ,close$f eval{flock$f {$f=pop;|;$O='{open( $f=gensym,$m.pop)||die if$m="';eval qq/sub $R$O<";$E$C)[0]$M$L$R$O<";$F,1};$E$C )[0]$M fd_$R$G$E)[0]$M$S$O>";$P$C$M$L$S$O>";$F,2};$P$C$M$S\_fd$G$P}/;$VERSION=1
310 名前:SevenLines の中の人 mailto:sage [04/04/21 09:33 ID:???] 7ch と 7thread を GPL でパッケージング & Store7 を載せました。 README の変更等ありましたら作業用 uploader の方へお願いします。
311 名前:おうら [04/05/12 22:12 ID:3q/C0Ti+] リファーを残さずにリダイレクト。JavaScript Off でも動作可能なコード #! /bin/ksh # リダイレクト if [ "$QUERY_STRING" ]; then echo "Pragma: no-cache Refresh: 0; URL=QUERY_STRING\n"; exit; fi # エラー出力 echo "Content-Type: text/html\nPragma: no-cache\n\n<html><head> </head><body>\nリンク先を指定して下さい\n</body></html>" リファーについて参考にしたページ ttp://www.teria.com/~koseki/memo/referrer/
312 名前:おうら mailto:sage [04/05/12 22:16 ID:???] うぐぅ。上のコード URL=QUERY_STIRNG に $ が抜けてました。 URL=$QUERY_STRING と見て下さい。
313 名前:7vote mailto:sage [04/05/12 22:40 ID:???] 仕様変更無しでザッと縮め。 use CGI":all";*P=*param;charset$c='EUC-JP';chdir V;($F)=P(f)=~/^(\d+)$/;if(open F,"+<$F"){eval{flock F,2};$t=<F>;/\t/and$D{$`}=$'+0while<F>;($n=P(n))?$D{$n}||= 1:($v=P(v))&&$D{$v}++,seek(F,0,0),print F"$t\n",map"$_\t$D{$_}\n",keys%D if request_method=~PO}$L{$K[$i++]}=$_ for radio_group(v,[@K=sort{$D{$b}<=>$D{$a}} keys%D]);put header,start_html(-Title,$t,encoding,$c,lang,ja),h1($t),startform, table({},Tr[map{td["$L{$_}($D{$_})",hr{width,$D{$_}}]}@K]),hr,p(textfield(n), hidden(f,$F),submit),endform,end_html ・hr のグラフは微妙。 ・既に存在する選択肢への投票は、選択肢自体をクリックできた方がより直感的か?
314 名前:nobodyさん mailto:sage [04/05/15 10:22 ID:???] open(IN, $ARGV[0].".txt");@lines = <IN>;close(IN); foreach $line (@lines) {if( $line =~ / [a-z0-9]{32}/ ){$hash .= $line;}} open(OUT, ">hash".$ARGV[0].".txt"); print OUT $hash;close(OUT); WinnyBBS の内容を全部コピペ。テキストファイルに保存。 ↓ その中からハッシュを摘出。テキストファイルに出力。
315 名前:nobodyさん mailto:sage [04/05/15 14:15 ID:???] >>314 perl -ne "/ [0-9a-z]{32}/ && print" in.txt > out.txt grep " [0-9a-z]\{32\}" in.txt > out.txt
316 名前:nobodyさん [04/06/11 10:54 ID:iPrFu4uN] # 最近、下がり気味なので保守ついでに package BEncode7;use base Exporter;@EXPORT=qw/bencode bdecode/;sub bencode($){ my$i=pop;ref$i eq'HASH'?"d@{[join('',map{bencode($_).bencode($i->{$_})}keys%$i) ]}e":ref$i eq'ARRAY'?"l@{[join('',map{bencode($_)}@$i)]}e":$i=~/^([+-]?\d+)$/? "i${i}e":length($i).":$i"}sub bdecode{local$_=pop;(/^d(.+)e$/s)?{bdecode($1)}:( /^l(.+)e$/s)?[bdecode("$1")]:(s/^i?([+-]?\d+)e//)?(int("$1"),bdecode($_)):( /^(\d+)/&&s/\d+\:(.{$1})//s)?("$1",bdecode($_)):undef}7 Convert::BEncodeの7行版。bittorrent等で使われているフォーマット。
317 名前:nobodyさん mailto:sage [04/06/13 17:48 ID:???] >>316 それだとテスト (001_basic.t) 通らないから、 オリジナルからザックリ縮め直してみたよ。 package Bencode7;use strict;use bytes;use base"Exporter";*bencode=*E=sub{no locale;my$i=pop;ref$i eq"HASH"?join("","d",map(E($_).E($i->{$_}),sort keys%$i), "e"):ref$i eq"ARRAY"?join("","l",map(E($_),@$i),"e"):$i=~/^\d+$/?"i${i}e": length($i).":$i"};sub D{my$c=pop;my$i=shift@{$c};$i=~/d/?do{my%h;while(($i= shift@{$c})ne"e"){unshift@{$c},$i;my$k=D($c);$h{$k}=D($c)}\%h}:$i=~/l/?do{my@l; while(($i=shift@{$c})ne"e"){unshift@{$c},$i;push@l,D($c)}\@l}:$i=~/i/?do{my$n; $n.=$i while($i=shift@{$c})ne"e";$n}:$i=~/\d/?do{my$n="";do{$n.=$i}while($i= shift@{$c})=~/\d/;my$l="";$l.=shift@{$c}for 1..$n;$l}:$c}sub bdecode{D[pop=~ /./gs]}our($VERSION,@EXPORT_OK)=qw(0.01 bencode bdecode)
318 名前:nobodyさん [04/07/14 16:53 ID:I7yo4p0b] お題。 ttp://www.webclap.com/ 6行くらいにはなると思う。
319 名前:nobodyさん mailto:age [04/07/14 23:00 ID:???] ム板より pc5.2ch.net/test/read.cgi/tech/1051703369/699-700 こういうのはperlとかのが得意そうだったので。
320 名前:nobodyさん mailto:sage [04/07/15 21:20 ID:???] while($act ne "ガッ"){ print "ぬるぽ\n"; $act = <STDIN>; chomp($act); } print "撃退\n"; sleep(1);
321 名前:nobodyさん mailto:sage [04/07/24 18:39 ID:???] これってphpじゃだめなん?
322 名前:nobodyさん mailto:sage [04/07/24 18:52 ID:???] >>321 個人的には WebPlog らしいお題なら言語は何でも いいと思うけど。てかこんなんはやった者勝ちかと。
323 名前:nobodyさん mailto:sage [04/07/24 20:08 ID:???] とりあえずPHP5+SQLiteな一行掲示板。フォーム部分は分離させた。 <form action=bbs.php method=post>名前:<input type=text name=n>一言:<input type=t ext name=t size=60><input type=submit value=送信></form> <? $d=sqlite_open('l');$n=$_POST['n'];if(!@sqlite_query($d,'SELECT * FROM b;')){ sqlite_query($d,'CREATE TABLE b(n,t,d);');}$t=$_POST['t'];$z=date("Y/m/d H:i:s") ;if($n!=''&&$t!=''){$s="INSERT INTO b(n,t,d) VALUES(\"$n\",\"$t\",\"$z\");";sqli te_query($d,$s);}print "<hr>";$r=sqlite_query($d,"SELECT * FROM b ORDER BY d DES C");$c=0;while(($a=sqlite_fetch_array($r))&&$c<50){print htmlspecialchars($a['n' ]).":".htmlspecialchars($a['t'])."[".$a['d']."]<br><hr>\n";$c++;}sqlite_close($ d); ?> DBファイルとテーブル勝手に作る方式。新着順、50件まで(ただしDBからは消してない)。 読みにくいけどSQLiteの使い方の勉強に…ならんか。
324 名前:nobodyさん mailto:sage [04/07/24 20:14 ID:???] >>318 ちなみにそれ、アクセス解析機能もつけるのか?
325 名前:nobodyさん mailto:sage [04/07/25 13:12 ID:???] >>323 GJ!
326 名前:nobodyさん mailto:sage [04/07/26 14:27 ID:???] 人ほとんどいないなここ(´・ω・`) Web拍手PHP版(記録側)。例によってフォームは分離。 <form method="post" action="webclap.php" target="clap"> <input type="hidden" name="m" value="c">ついでに一言。 <input type="text" name="t" size=40> <input type="submit" value="拍手を送る"></form> <? if($_POST['m']=='c'){$n=file("l");$d=date("Ymd");$h=date("H");$b=split(",",$n [0]);$a=file("t");echo $a[array_rand($a)];if($b[0]!=$d){$i=0;$x="$d,1,";while($i ++<24){if($i==$h+1)$x.="1,";else$x.="0,";}array_unshift($n,"$x\n");}else{$b[1]++ ;$b[$h+2]++;$x="";$i=-1;while($i++<count($b)-2)$x.="$b[$i],";$n[0]="$x\n";if(cou nt($n)>14)array_pop($n);}$f=fopen("l","w");while(count($n)>0)fputs($f,array_shif t($n));fclose($f);$t=$_POST['t'];if($t!=""){$m=file("m");$f=fopen("m","w");array _unshift($m,"$d,$t\n");if(count($m)>200)array_pop($m);while(count($m)>0)fputs($f ,array_shift($m));fclose($f);}} ?> ごめん、8行になってしまた。取得ログは14日分で1時間単位ごとの記録アリ、 一言メッセージは200件まで保存。動かす前にl,m,tとそれぞれ空ファイル作ってくだされ。 tには拍手ボタン押した後に表示するHTMLを一行で叩き込んで。 複数行にするとランダムでどの行か選んで表示します。一行の長さの制限はわからん。 だれか7行に縮めてくれ。俺はもうだめだ(´Д⊂
327 名前:nobodyさん mailto:age [04/07/26 20:37 ID:???] ためしにkaiseki.php作ったら12行になったΛ||Λダメポ 活気ないのでage
328 名前:7clap mailto:sage [04/07/26 23:10 ID:???] オリジナルから仕様を極力変えない方向で10行。 #!/usr/local/bin/perl use CGI":all";charset$c=Shift_JIS;param(k,$k=1+param k);($w=escapeHTML(param w) )=~s/\x0D\x0A|[\x0A\x0D]/br/eg;sub d{($h,$d,$m,$y)=(localtime(time-86400*pop))[ 2..5];$g=($y+1900).sprintf"%02d"x2,$m+1,$d}($C,$M,$L,$T,$I,$S,$E,@M)=<DATA>; open L,">$L";eval{flock L,2};open C;d>(@c=<C>)[-1]?(@c<14||shift@c,@l=((0)x25, "\n")):(($g,@l)=split/<>/,pop@c);$l[$h+1]++;$l[0]++;open C,">$C";print C@c,join "<>",$g,@l;d(14);open M;@m=grep$g<=$_,<M>;open M,">$M";print M@m,""ne$w&&d."<>$ h<>$w<>\n";put header,start_html(-Title,$T,lang,ja,encoding,$c),($k<10?(p($M[ rand@M]),startform,p(hidden(k),submit$S),p($I,br,textfield w,'',50,50),endform) :p$E),end_html;__END__ ./log.dat ./mes.dat ./lock.dat web拍手送信完了 ついでに一言あればどうぞ (拍手だけでも送れます) もっと送る 沢山の拍手を有り難うございました! 拍手が送信されました。ありがとうございました! 拍手が送信されました。ありがとうございますた! 拍手が送信されました。ありがとさ〜ん!
329 名前:nobodyさん mailto:sage [04/07/29 22:33 ID:???] >>323 >>326 PHPって関数名の途中に空白文字入っても動くの?
330 名前:nobodyさん mailto:sage [04/07/30 11:49 ID:???] >>329 行末改行は79文字で切ったものなんで、動かす場合は繋げて。
331 名前:nobodyさん mailto:sage [04/07/30 14:27 ID:???] あぁ、「そのまま動く」ってのが明文化されてないわけね…。 >>330 「560byte」プログラミングじゃなくて「7行」なので、79文字 一杯々々使いたかったら、コードの順番入れ替えたりして 調整してね。
332 名前:nobodyさん mailto:sage [04/07/30 23:12 ID:???] あと2chの仕様だが、コード中に半角スペースが2コ以上連続する時は 半角スペースを に置換する 行の最後に半角スペースが付くので、実行する時には注意する
333 名前:nobodyさん mailto:あ [04/08/04 20:11 ID:???] age
334 名前:7clap mailto:sage [04/08/06 15:30 ID:???] あと一行半。 #!/usr/local/bin/perl use CGI":all";charset$c=Shift_JIS;param(k,$k=1+param k);($w=escapeHTML(param w) )=~tr/\x0A\x0D//d;($C,$M,$L,$E,@M)=<DATA>;open L;eval{flock L,2};@l=((0)x26," ");sub d{($s,$m,$h,$d,$m,$y)=localtime(time-pop);$l[0]=($y+1900).sprintf"%02d"x 2,$m+1,$d}open C;d>(@c=<C>)[-1]?@c<14||shift@c:(@l=split/<>/,pop@c);$l[$_]++for $h+2,1;open C,">$C";print C@c,join"<>",@l;d 1209600;open M;@m=grep$l[0]<=$_,<M> ;open M,">$M";print M@m,""ne$w&&d."<>$h<>$w<>\n";put header,start_html(lang,ja, encoding,$c),$k<10?(p($M[rand@M]),startform,p(hidden(k),submit Clap),p(Comment, textfield w),endform):p$E,end_html;__END__ ./log.dat ./mes.dat >./lock.dat 沢山の拍手を有り難うございました! 拍手が送信されました。ありがとうございました! 拍手が送信されました。ありがとうございますた! 拍手が送信されました。ありがとさ〜ん!
335 名前:nobodyさん mailto:sage [04/08/07 07:38 ID:???] >319 全然要求満たしてないけど、叩き台に。 C/C++用、inputは余計なコード書いてないヘッダファイルのみ #!/usr/bin/perl -Pn /^namespace\s*(\w+)/ && ($ns=$1); /\#include\s*[<"](.+)[">]/ && push(@inc, $1); /^class\s+(\w+)\s*\:?/ && push(@cls, $1); /(([\w\s\*]+)(\w+)\s*\((.+)\))/ && push(@memf, $1); # メンバ関数 /(([\w\s\*]+)(\w+));/ && push(@memv, $1); # メンバ変数 END{ print join("\n", $., $ns, "@inc","@cls","@memf", "@memv"),"\n" } JAVAはリフレクションがあるし、classファイルのフォーマットも公開されてるので 別のアプローチでやってみると面白いかも知れない。(javapやClassBrowserが既にあるけど)
336 名前:nobodyさん mailto:あ [04/08/11 09:29 ID:???] age
337 名前:nobodyさん [04/09/18 22:44:55 ID:9YaH2aKo] age
338 名前:nobodyさん mailto:sage [04/09/18 22:53:04 ID:???] >>335 使い方がわからない。。。。
339 名前:nobodyさん [04/09/20 13:46:08 ID:k3h/6iWb] スクリプト -> 335.pl /* C++のヘッダファイル foo.h */ #include <iostream> #include <stdlib.h> #include "common.h" using namespace std; namespace test{ class FooTest: public Test { int total; public: Test(); ~Test(); int foo(void); int bar(int n, int m); }; // End of class FooTest }; // End of namespace test 実行方法 $ perl -Pn 335.pl < foo.h または、 $ ./335.pl < foo.h 18 test iostream stdlib.h common.h FooTest int foo(void) int bar(int n, int m) using namespace std int total 行数, namespace, includeファイル, メンバ関数, 変数の順に出力
340 名前:nobodyさん mailto:sage [04/09/20 14:43:21 ID:???] 何故わざわざ WebProg 板で? と思いつつ縮め。 #!/usr/bin/perl -n $n=$1if/^namespace\s*(\w+)/;/#include\s*[<"](.+)[">]/&&push@i,$1;/^class\s+(\w+ )\s*\:?/x&&push@c,$1;/\s*([\w\s\*]+\w\s*\(.+\))/&&push@f,$1;/\s*([\w\s\*]+\w);/ &&push@v,$1;END{print join"\n",$.,$n,"@i","@c","@f","@v",''}
341 名前:nobodyさん mailto:sage [04/09/21 17:50:57 ID:???] <html> <head> <title>あ</title> </head> <body> </body> </html>
342 名前:nobodyさん mailto:釣られてみるsage [04/09/21 17:58:26 ID:???] それはマークアップ言語という(ry
343 名前:nobodyさん [04/10/03 15:30:49 ID:qw0lrubh] Store7の圧縮してない奴ないですか? > 作者
344 名前:nobodyさん mailto:sage [04/10/03 17:06:58 ID:???] >>343 自分で展開していかないと面白味が分からないと思うなぁ、コレ。 cm.xrea.cc/upload.cgi?d=1096790671.tgz
345 名前:nobodyさん mailto:sage [04/10/03 20:29:26 ID:???] >>344 ありがとう いや,実は>>258 なんだけど機能強化されてるのでこっちを使おうかと思ってね
346 名前:nobodyさん mailto:age [04/12/12 03:10:20 ID:???] あげ
347 名前:nobodyさん mailto:sage [04/12/16 18:47:01 ID:???] internet.watch.impress.co.jp/cda/news/2004/12/16/5820.html
348 名前:nobodyさん mailto:sage [04/12/17 09:19:09 ID:???] >>347 Perlのmolester-minの方はライブラリ使わず9行。(詰めれば6,7行以内に収まりそう。 ansuz.sooke.bc.ca/software/molester/
349 名前:nobodyさん mailto:sage [04/12/17 14:50:07 ID:???] >>348 定数をハードコーディングして可搬性を激しく落としてでも Socket.pm を使わない選択は漢だなぁ。(w 80桁ギリギリまで詰めるよう整形したら既にシェバング無し 七行達成してるし、あと 40 byte ほど縮めたらいい感じかな。 $/=$_;$,=shift;$w=$a=shift;sub g{open(F,$4)&&t($2,$a,"e$4",<F>);close F}socket S,2,1,6;$k{+shift}=1;bind S,&a;sub e{open F,">$4";print F$';close F}sub h{t($2, $_,id)for keys%k}sub i{$k{$2}=1}sub f{t($_,$2,$4)for keys%k}sub a{$w=~/:/;pack 'CxnC4x8',2,$',split'\.',$`}sub t{socket X,2,1,6;$w=shift;$k{$w}=(connect X,&a) ?print X"$, $_[0] $_[1]/".pop:$/;close X}for(listen S,5;$SIG{ALRM}=sub{}; m!^(.*?) (.*?) ([e-i])([^/]*)/!s&&$,eq$1&&&$3){alarm 9;(accept(C,S),alarm 0)? read C,$_,1e6:($_="$, $a f".shift);close C}
350 名前:nobodyさん mailto:sage [04/12/17 21:57:04 ID:???] >>349 正規表現による暗黙の代入とグローバル特殊変数を使った引数渡しは使えそうだ。 PythonのTinyP2PがXMLRPC等のライブラリを使っているので、 動機のひとつにライブラリなしバージョンを作ろう、ってのがあったみたい。 サイトを良く読むとblogとかにその辺の事情も書いてる様です。 他の言語では、Java(16行), Ruby(6行)版も投稿されてます。 ttp://developers.slashdot.org/comments.pl?sid=132907&cid=11103175 ttp://developers.slashdot.org/comments.pl?sid=132907&cid=11097812
351 名前:nobodyさん mailto:sage [04/12/24 21:39:51 ID:???] ほす
352 名前:nobodyさん [05/01/30 23:39:07 ID:cEoW2dZ/] >>341-342 そういえば、昔、5kっていう5KBにHTMLページを収めるってなコンテストがあったなぁ。 www.the5k.org/ 5Kといい、7Lといい、こういうの好きなんだわ漏れ。 7行といえば560バイトでWebPage作るってのはどう? ちょっと擦違いスマソ
353 名前:nobodyさん mailto:sage [05/01/31 00:37:15 ID:???] >>352 「どう?」じゃなくて、作って晒せば? こういうのはやったもん勝ち。 面白いと思わせる事ができれば挑戦者も出てくるんじゃない? ただスレのルール的に、「560 byte」でなく、1 行は 79 byte + 改行、 7 行以内でそのまま使える、って条件を満たしてないと個人的には 受け入れ難いなぁ。
354 名前:nobodyさん mailto:age [05/01/31 14:38:02 ID:???] <? echo 'PHPもまぜてくれ'; ?>
355 名前:nobodyさん mailto:sage [05/02/06 00:29:37 ID:???] じゃぁ、phpで7行wiki <? require("Text/Wiki.php");require("Cache/Lite.php");$c=&new Cache_Lite(); $s=$_SERVER[PHP_SELF];$g=$_GET;$b=&$_POST[b];$n=$g[n]?$g[n]:"FrontPage";$b&& $c->save($b,$n)&&header("Location: $s?n=$n");($b=$c->get($n))||$g[c]=e; $h="<h1>$n</h1>";if($g[c]==e)$h.="<form method=post action='?n=$n'>". "<textarea name=b rows=30 cols=80>$b</textarea><input type=submit>"; else{$w=&new Text_Wiki;$w->setRenderConf(xhtml,wikilink,new_url,"?n=%s"); $h.=$w->transform($b,xhtml)."<hr><a href='?c=e&n=$n'>e";}?><html><body><?=$h?> PEAR::Text_Wikiが必要。Cache_LiteはPEARにデフォルトで入ってる気がする。 あとshort_open_tag=Onでよろしく。 整形ルールは ttp://wiki.ciaweb.net/yawiki/index.php?area=Text_Wiki&page=SamplePage 日本語のwikinameは使えなかったりする。これはText_Wikiが対応していないせい。
356 名前:nobodyさん [2005/04/24(日) 00:09:53 ID:s2OIHVmv] 保守あげ
357 名前:nobodyさん [2005/04/26(火) 00:51:58 ID:UrRypboo] >>355 ちょっとずるい気がする
358 名前:nobodyさん mailto:sage [2005/04/26(火) 17:50:19 ID:???] どの辺が? タグを閉じていないあたり?
359 名前:nobodyさん mailto:sage [2005/04/27(水) 02:12:54 ID:???] >>358 ライブラリ使い過ぎると面白さ半減ってことだろ。
360 名前:nobodyさん [2005/04/27(水) 03:24:58 ID:0BxullHs] モジュール/ライブラリに関して >>46 , >>135 >>136 , >>174 >>175 cm.xrea.cc/techinfo.cgi の 0.1. ライブラリ及びモジュールの利用 >>355 requireって () 省略できるはず。
361 名前:nobodyさん mailto:sage [2005/04/27(水) 07:43:42 ID:???] >>355 まぁでも、7行で基本機能を備えたwikiが使えるなら実世界でも結構有用じゃないか。 Text_Wikiの機能のデモにはなるでしょ。 むしろwiki技術関連スレ向きとは思うが。 向こうにも一応アンカー張ってあるね。
362 名前:nobodyさん mailto:sage [2005/04/28(木) 12:12:12 ID:???] 流れを無視して、7vote が 7 行に収まったのでパッケージング。 #!perl use CGI":all";charset$c='UTF-8';${$_}=param$_ for f,n,v;$f=~s/\W//g;open F,"+<$ f"if chdir V;eval{flock F,2};$t=<F>;/\t/and$D{$`}+=$' for<F>;seek F,0,0;$n?$D{$ n}||=1:$v&&$D{$v}++,print F$t,map"$_\t$D{$_}\n",keys%D if$n||$v;$L{$K[$i++]}=$_ for radio_group(v,[@K=sort{$D{$b}<=>$D{$a}}keys%D]);put header,start_html(-lang ,ja,encoding,$c,-Title,$t),h1($t),startform,table({},Tr[map{td["$L{$_}($D{$_})" ,hr{width,$D{$_}}]}@K]),hr,p(textfield(n),hidden(f,$F),submit),endform,end_html UTF-8 になったのがちょっと悔しい。 ファイル名は \w+ にしました。
363 名前:nobodyさん mailto:hg [2005/11/07(月) 20:21:27 ID:???] 半年ぶりフォーーーーーーーーーーーーーーーーーーーーーー
364 名前:nobodyさん [2005/11/23(水) 11:59:34 ID:8dGTpf7c] 良スレあげ
365 名前:nobodyさん mailto:sage [2006/01/21(土) 13:50:12 ID:???] #!/usr/bin/perl my@d=([qw/@ A B C D E F G H I J K L M/],[qw/☆ △ ■/]); my$c='Shift_JIS';my$l='ja';use CGI':standard';my@r=(0)x@d; print header(-charset=>$c),start_html(-encoding=>$c,-lang=>$l),start_form, (map{my$i=$_;ul li[(map{$r[$i]+=param($_);$_.textfield -name=>$_}@{$d[$i]}), "計 $r[$i]"]}0..$#d),ul(li"$r[1]÷$r[0]=".eval{$r[1]/$r[0]}),submit,end_form, end_html;
366 名前:nobodyさん [2006/01/21(土) 23:54:14 ID:e+ke+qvM] なぜ丸付き数字と図形なのかわからんけど面白いですね。 どういうときに使えるだろう・・・。と考えてしまう
367 名前:クロエ mailto:sage [2006/01/22(日) 02:56:50 ID:???] tool-6.net/?0001 イメージ的には、こんな感じなんですが…。【1】,「@〜Mまで入力した数値を総計。」 【2】,「A+B+Cに入力した数値を総計。」 【3】,「【2】÷【1】×100」っていう演算プログラムなんですが…。
368 名前:365 mailto:sage [2006/01/22(日) 10:02:46 ID:???] >>367 仕様変更は34,000円からになっておりますw 話の流れがわからない人はpc8.2ch.net/test/read.cgi/tech/1134327348/756- >>365 はかなりゆとりがあったので7Excelにしてみた。 スタイルシートを別ファイルにしてもいいならまだまだいけそうだ。 #!/usr/bin/perl @x='A'..'G';@y=1..10;$c='Shift_JIS';use CGI':all';@r=(0)x(@x+1);print header( -charset=>$c),start_html(-encoding=>$c,-lang=>'ja',-head=>style({-type=> 'text/css'},'table{border-collapse:collapse}input,th{width:50px}td{text-align: right}td,th{border:1px solid gray}')),start_form,table(Tr(map th($_),'',@x,''), (map{$i=$_;$s=0;Tr td[$_,(map{$p=param"$i$x[$_]";$s+=$p;$r[$_]+=$p;textfield "$i$x[$_]"}0..$#x),($r[-1]+=$s,$s)[1]]}@y),Tr td['',@r]),submit,end_form,end_html
369 名前:365 mailto:sage [2006/01/22(日) 16:39:32 ID:???] use Storable;$f='file';$s=8;$c='Shift_JIS';%p=qw/-1 〇 0 _ 1 ●/;@m=map([map 0 ,0..$s+2],0..$s+2);($x,$y)=map param($_)%($s+1),qw/x y/;$r=1;use CGI':all';sub f2{my($w,$y,$x,$c)=@_;$u=1;if(0>$r*$m[$y][$x]){$c++;$m[$y][$x]*=$u=f2($w,$y+$w ->[0],$x+$w->[1],$c)}elsif(0<$c&&0<$r*$m[$y][$x]){$u*=-1}$u}sub r{if($y&&$x&&! $m[$y][$x]){for(0..7){$i=$_*atan2 1,1;$l=[map int(sprintf'%f',$_*sqrt 2),sin$i, cos$i];$z++if 0>f2$l,$y+$l->[0],$x+$l->[1]}if($z){$m[$y][$x]=$r;$r*=-1}}}$m[$s/ 2+(0<($_&2))][$s/2+(0<($_&1))]=$_%3?1:-1 for 0..3;($r,@m)=@{retrieve$f}if-s$f;r ;store[$r,@m],$f;print header(-charset=>$c),start_html(-encoding=>$c,-lang=> 'ja'),table(Tr[map{$i=$_;td[map a({-href=>"o.cgi?y=$i&x=$_"},$p{$m[$i][$_]}),1 ..$s]}1..$s]),$p{$r},end_html; 7オセロ? o.cgiで保存。 同じディレクトリに記録用ファイルの "file" を作成。 要 Storable.pm (Active Perl なら最初から入っているはず) リセットは手動で "file" を空にするw 7行に収まると思ったけど見込みが甘かった。
370 名前:クロエ mailto:sage [2006/01/23(月) 02:25:04 ID:???] >>365 本当にありがとうございます。設置の仕方が分かりませんorz orz orz 今日6時間くらい、CGIについて解説してあるサイトを隅から隅まで見ましたが、収穫なしですwww ばかん ばかん 俺のばかん テキストエディタ?を使うんですか?
371 名前:nobodyさん mailto:sage [2006/01/23(月) 03:02:02 ID:???] >>370 CGI設置について質問 【Part2】 pc8.2ch.net/test/read.cgi/php/1104624784/ だがどのみち使いこなせないと見た
372 名前:クロエ mailto:sage [2006/01/23(月) 16:06:04 ID:???] >>365 氏 本当にありがとうございます。 2chでこんな優しい人初めてだ。 勉強してきますた。 鯖にアップロードして、パーミッションを755にするだけでおKですか?
373 名前:nobodyさん mailto:sage [2006/01/23(月) 16:30:08 ID:???] >>372 やってから聞いてる?
374 名前:クロエ mailto:sage [2006/01/23(月) 18:13:14 ID:???] 372であってますか?
375 名前:nobodyさん mailto:sage [2006/01/23(月) 18:19:38 ID:???] >>374 鯖によるから合ってるとか間違ってるとか言えん。 とにかくやって、エラーが出たらまた聞いてくれよ。 何かやるたびに聞かれたんじゃ迷惑だし、そもそもスレ違い。
376 名前:nobodyさん mailto:sage [2006/01/23(月) 19:29:44 ID:???] ($f,$s,$r,@p)=qw/file 8 1 _ ● 〇/;use Storable;use CGI':all';sub f{$u=1;my($y ,$x,$c)=@_;if(0>($t=$r*$m[$y][$x])){$m[$y][$x]*=f($y+$p,$x+$n,1)}elsif($c&$t){ $u=-1;$z++}$u}$$_=param($_)%($s+1)for qw/x y/;@m=map[(0)x$s+1],0..$s+1;map$m[$s /2+$_/2][$s/2+$_%2]=$_%3?1:-1,0..3;($r,@m)=@{retrieve$f}if-s$f;$o=\$m[$y][$x]; if($y&&$x&&!$$o){for(0..7){($p,$n)=map sprintf('%.f',$_),sin($i=$_*0.78),cos$i; f$y+$p,$x+$n}$$o=$r,$r*=-1 if$z}store[$r,@m],$f;charset '';print header,$p[$r], table Tr[map{$i=$_;td[map a({href,"?y=$i&x=$_"},$p[$m[$i][$_]]),1..$s]}1..$s] 昨日の続きで7オセロ! モジュール詳しくないからやらないけどモジュール*だけ*で構成なんてのも面白そうだ。
377 名前:nobodyさん mailto:sage [2006/01/23(月) 19:31:49 ID:???] >>374 質問するならまず68,000円のサポートチケットを購入してからにしてくださいw
378 名前:376 mailto:sage [2006/01/23(月) 21:15:02 ID:???] ($f,$s,$r,@p)=qw/file 8 1 _ ● 〇/;use Storable;use CGI':all';sub f{$u=1;my($y ,$x,$c)=@_;if(0>($t=$r*$m[$y][$x])){$m[$y][$x]*=f($y+$p,$x+$n,1)}elsif($c&$t){ $u=-1;$z++}$u}$$_=param($_)%($s+1)for qw/x y/;@m=map[(0)x($s+1)],0..$s+1;map$m[ $s/2+$_/2][$s/2+$_%2]=$_%3?1:-1,0..3;($r,@m)=@{retrieve$f}if-s$f;$o=\$m[$y][$x] ;if($y&&$x&&!$$o){for(0..7){($p,$n)=map sprintf('%.f',$_),sin($i=$_*0.78),cos$i ;f$y+$p,$x+$n}$$o=$r,$r*=-1 if$z}store[$r,@m],$f;charset '';print header,$p[$r] ,table Tr[map{$i=$_;td[map a({href,"?y=$i&x=$_"},$p[$m[$i][$_]]),1..$s]}1..$s] 括弧はずしすぎでバグっていたので修正 ファイル名省略すると Lynx じゃ動かないね。
379 名前:nobodyさん mailto:sage [2006/01/23(月) 21:31:39 ID:???] >>378 パスできない仕様はどうかと。 ファイルに記録するより Cookie にでも持たせた方がいいんじゃない? 参考に C の6行オセロを Perl に移植してみた。 オリジナルより数 byte 大きい。 ;-) #!/usr/local/bin/perl sub K{$m[$p]||do{for(@m[0..7]){$v=$p+$_;$v+=$_ while$m[$v]==9-$t;if($v-$p-$_&&$ m[$v]==$t&&($a=$s=$v=$p,$d)){{$m[$v]=$t;$m[$v+=$_]-$t&&redo}}}}}@m[40,41,49,50, 0..7]=(3,6,6,3,-10..-8,-1,1,8..10);$s=$t=3;@c=(qw(・ ○ ●),$/);while($s-1){$_% 9?K$p=$_:($m[$_]=9),print$c[$m[$_]/3]for 9..81;$a?($a=$d=$p=9):$s?($s=0,print "pass\n"):++$s;K$p+=$t-6?(($p,$_)=<>=~/\d/g,$_*9):1until$a-9;$t=9-$t;$a=$d=0}
380 名前:nobodyさん mailto:sage [2006/01/23(月) 22:25:29 ID:???] >>379 できませんよ><
381 名前:nobodyさん mailto:sage [2006/01/24(火) 00:41:03 ID:???] @x='A'..'G';@y=1..10;@s=qw/合計 平均/;use CGI':all';charset '';print header, style({type,'text/css'},'table{border-collapse:collapse}td,input{text-align: right;width:70px}td,th{border:1px solid gray}'),start_form,table(Tr[th(['',@x, @s]),(map{$i=$_;$s=0;$n=0;td[$_,(map{$p=param"$x[$_]$i";($t=$s)==($s+=$p)||$n++ ;($t=$r[$_])==($r[$_]+=$p)||$v[$_]++;textfield"$x[$_]$i"}0..$#x),($r[@x]+=$s,$s ,eval{$s/$n})[1,2]]}@y),td([$s[0],@r,'']),td[$s[1],map($v[$_]?sprintf('%.3f',( $c++,($t=$r[$_]/$v[$_]),$v+=$t)[1]):'',0..@x),eval{$v/$c}]]),submit,end_form; >>368 がいまいち糞コードになりきれていなかったので平均の計算も追加。おやすみ〜 ノシ
382 名前:378 mailto:sage [2006/01/24(火) 00:44:20 ID:???] >>379 >パスできない仕様はどうかと。 あまり細かいこと考えていないのでw 今日はもう寝ますがなんかすごそうなので明日動かしてみます。
383 名前:nobodyさん mailto:sage [2006/01/25(水) 22:05:38 ID:???] >>379 昨日見てみましたがこれをCGI化するのは行数的にちょっと無理じゃないですかねぇ。 でも面白かったです。
384 名前:nobodyさん mailto:sage [2006/01/25(水) 22:06:31 ID:???] 初回起動時からの累計と過去1週間の日別カウンタ。 設定を変えれば一日の時間別みたいな使い方もできる。 ($f,$l,$z)=qw{./counter.dat 7 5};use CGI':all';sub d{sprintf '%d年%02d月%02d日(%s)',1900+$_[5],1+$_[4],$_[3],(qw/日 月 火 水 木 金 土/)[$_[6 ]]}sub n{sprintf"%0${z}d回",shift}$n=time;$d=24*60*60;$p=$n-$n%$d;if(open F, "+<$f"){eval{flock F,2};($s,@d)=map[split/\s+/],<F>;$s->[0]||=$n;$s->[1]++;$p== $d[0][0]?$d[0][1]++:unshift@d,[$p,1];$n-=$d*$l;seek F,0,0;printf F"%d\t%010d\n" ,@$_ for@d=($s,grep$n<$_->[0],splice@d,0,$l);truncate F,tell F;close F}charset '';print header,ul map{li b(n$_->[1]),d localtime$_->[0]}@d
385 名前:nobodyさん mailto:sage [2006/01/25(水) 22:08:08 ID:???] 7CMS このスレで作った >>365 >>378 >>381 >>384 をモジュール化して一元管理する。 サードパーティー製品でもCGI.pmを使ったものなら大丈夫かも。 >>137 >>274 は一応動いた。 使い方は全部同じディレクトリに入れればいいだけだから。 use CGI':all';$d=param '*';@r=[$0=~/([^\\\/]+)$/,'START'];$p=$`;for$n(<*>){if($r [0][0]ne$n&&$n=~/\.cgi$/){$r='';chdir$p;open F,$n;read F,$c,-s F;tie*G=*STDOUT, 'main';eval"package C$`;$c";untie*G;$r=~s/^.+?(\r?\n){2}//s;$r=~s/(<a\s.*?\?)(. *?>)/$1*=$d&$2/gisx;$r=~s!(?=</for)!hidden -name,'*',-value,$d!egi;push@r,[ $n,$r.$@]}}AUTOLOAD{ref(shift)?($r.=join'',@_):bless[]}charset '';put header, table Tr td{style=>'vertical-align:top;text-align:left;border:1px solid gray'}, [ul(li[map a({href,"?*=$_"},$d==$_?b($r[$_][0]):$r[$_][0]),0..$#r]),$r[$d][1]]
386 名前:nobodyさん mailto:age [2006/01/26(木) 18:42:38 ID:???] hage
387 名前:nobodyさん mailto:sage [2006/01/26(木) 21:31:03 ID:???] 7メル ($p,$t,$s)=('/usr/sbin/sendmail','mail@example.com','メールフォームから');use CGI':all';$$_=param $_ for qw/f m/;($f)=$f=~/^([\w.-]{1,64}\@[\w.-]{1,128})$/i; ($m=substr$m,0,2**16)=~tr/\0/ /;$m=~s/\r\n?/\n/g;$m=~s/^\.$/../gm;charset '';put header,startform,'あなたのメールアドレス',textfield(-name,'f'),br,'メッセージ', br,textarea(-name,'m',-rows,10,-cols,60),br,submit,endform;if($f&&$m&&open M, "| $p -t"){print(M join"\n",'Content-Transfer-Encoding: 8bit',"Reply-To: <$f>", "To: <$t>","Subject: $s",'',$m,'')&&put '管理者へ送信しました。';close M}
388 名前:nobodyさん mailto:sage [2006/01/26(木) 21:31:54 ID:???] 7カレ @c=([('silver')x 7],[('red',('black')x 5,'blue')],'lavender');use CGI':all';$s= 24*60*60;@t=localtime($t=time);@r=td{align=>'right',bgcolor=>$c[2]},font{color =>$c[1][$t[6]]},b $t[3];@t1=localtime($i=$t-$s);while($t[4]==$t1[4]||$t1[6]<6){ unshift@r,td{align=>'right'},font{color=>$c[$t[4]==$t1[4]][$t1[6]]},$t1[3];@t1= localtime($i-=$s)}@t2=localtime($i=$t+$s);while($t[4]==$t2[4]||0<$t2[6]){push@r ,td{align=>'right'},font{color=>$c[$t[4]==$t2[4]][$t2[6]]},$t2[3];@t2=localtime ($i+=$s)}charset '';put header,table Tr[map join('',@r[7*$_..7*($_+1)-1]),0..$#r]
389 名前:nobodyさん mailto:age [2006/01/26(木) 21:32:37 ID:???] 何でもいいからボケッと見てないでおまいらも参加しる!
390 名前:nobodyさん [2006/01/27(金) 16:58:32 ID:KYetQvuJ] require "cgi-lib.pl"; &ReadParse;if($ENV{'REQUEST_METHOD'} eq 'POST'){if ($in{'imagefile'}) {open(WRITEFILE,'>', "datafile");binmode(WRITEFILE);print WRITEFILE $in{'imagefile'};close(WRITEFILE);}} 7うp掲示板 これ以上はムリポ
391 名前:nobodyさん mailto:sage [2006/01/27(金) 22:17:22 ID:???] >>390 安全を保ちつつ複数ファイルに対応しる!
392 名前:nobodyさん mailto:sage [2006/01/27(金) 22:18:05 ID:???] 7ナビ 同一階層以下のHTMLにリンクを貼る。携帯用サイトマップみたいなもん。 $d='./';$e='s?html?';$n=10;@l=(['prev',-1],['next',1]);use CGI':all';sub r{my( $d,$e)=@_;map{if(-d){r($_,$e)}elsif(/\.$e$/&&$p<=$c++&&$c<=$p+$n&&open F,$_){-B ||read F,$h,2**16;close F;$h=~/>\s*([^<>]*?)\s*<\/ti/is;[$_,$1||$_]}else{()}} <$d/*>}$p+=param 'p';($d)=$d=~/(.+?)[\\\/]*$/;@r=r$d,$e;if($p<0){$p=$c-$c%$n;$c =0;@r=r$d,$e}elsif(!@r){$p=0;$c=0;@r=r$d,$e}charset '';put header,dl dt(map a({ href=>"?p=".($p+$n*$_->[1])},$_->[0]),@l),dd{style=>'margin:0px'},join"\n",ol({ start=>1+$p},li[map a({href=>$_->[0]},$_->[1]),@r]),p"$c files"
393 名前:nobodyさん mailto:sage [2006/01/27(金) 22:19:01 ID:???] 7 httpd これはCGIじゃないよ。 起動でlistenと127.0.0.1/index.html で表示。 Options Indexes があるはずも無いのでファイル名まで指定。 if(!grep(/^SERVER/i,keys%ENV)&&socket(S,2,1,0)&&setsockopt(S,65535,4,pack'l',1) &&bind(S,pack'S n a4 x8',2,80)&&listen S,1){select+(select(S),$|=1)[0];while( accept C,S){select+(select(C),$|=1)[0];@r=unpack"C*",getpeername C;if(recv(C,$d ,8192,0)&&$d=~/^GET ([\x21-\x7e]{1,256}) H/ and$p=join'/',map{s/\.+/./g;$_}grep length,split/[\\\/]+/,$1){print C 'HTTP/1.0 ',do{$n="\r\n\r\n";if(open F,"./$p" ){binmode F;read F,$b,-s F;close F;"200$n$b"}else{"404${n}Not Found\n"}};undef $b}close C;printf"$d%d.%d.%d.%d:%d\n%s\n",@r[4..7],256*$r[2]+$r[3],'-'x 64}}
394 名前:nobodyさん mailto:age [2006/01/30(月) 04:20:47 ID:???] みんながんがれ!!
395 名前:nobodyさん mailto:sage [2006/02/10(金) 18:36:50 ID:???] うぅ、ここPerl限定なのか… PHPスレ欲しいな。
396 名前:nobodyさん mailto:sage [2006/02/10(金) 18:41:19 ID:???] phpもOKみたいだぞ。
397 名前:クロエ [2006/02/12(日) 00:31:01 ID:VpXKciXc] >>368 365だと367の最後の×100が反映されないんですが…。せんせぇ、お願いします。
398 名前:nobodyさん [2006/02/15(水) 07:50:04 ID:Q8DDLS00] てめえらどうした!? 探求心はつきたか?
399 名前:nobodyさん [2006/02/19(日) 19:16:08 ID:YpSh6qb6] 昔作った今月のカレンダー表示スクリプト。 ($$,$:,$;,$=)=(localtime)[3..6];printf"%2d%s",$_,++$=%7?$":$/for(print($;+ 1900,'/',$:+1,"/$$\n",$"x(($=-=$$-1)%7*3))..28+($:-1?3-$:%7%2:!($;%4)))
400 名前:nobodyさん [2006/02/28(火) 10:19:55 ID:5vE9CKm+] #!/usr/bin/perl if($ENV{'REQUEST_METHOD'}eq'POST'){read(STDIN,$b,$ENV{'CONTENT_LENGTH'}); foreach(split(/&/,$b)){($c,$d)=split(/=/,$_);$d=~tr/+/ /; $d=~s/%([a-f\d]{2})/pack('H2',$1)/egi;$form{$c}=$d}open(F,'>>z.txt'); print F "$form{y}\n";close F}print"Content-type:text/html\n\n<html> <form action=x.cgi method=post><input type=text name=y><input type=submit> </form><br><br>";open(F,'z.txt');while(<F>){print "$_<br>\n"}print'</html>';
401 名前:nobodyさん [2006/03/10(金) 16:20:32 ID:OL3a1OF8] 在庫から 7wikimini ドゾ。 YukiWikiMini の7行版みたいな感じです。 実行するにはWという名前のフォルダが必要です。 use CGI":all";charset$c=Shift_JIS;*i=*param;$f=FrontPage;$i=Index;$u=Update;$F= i(P)||$f;sub e{a{href,"?E=1&P=".pop},@_}sub l($){a{href,"?P=@_"},@_}chdir W;$E= i E;$U=$F eq$u;$I=$F eq$i;$,=$/;if($_=i T){open F,">$F";print F$_}$H=$I+$U;$t=$ H?join$/,map{localtime((stat)[9]).$_}sort{$U&&-M$a<=>-M$b}<*>:($/=!open F)||$E? <F>:escapeHTML<F>;$E||$t=~s/([A-Z][a-z]+){2,}/-f$&?l$&:$&.e"?",$&/eg;put header ,start_html(-title=>$F,lang,ja,encoding,$c),l$f,$H?():e(Edit,$F),l$i,l$u,h1($F) ,$E?startform.hidden(P).textarea(T,$t,20,80).submit.endform:pre($t),$P,end_html ページ削除機能が実装されてないので、もうちょっと改良が必要っす。
402 名前:nobodyさん mailto:sage [2006/03/10(金) 18:39:49 ID:???] おまいら、このスレ出ている7行プログラムを、 インデント付けて整形するプログラムをどうか7行以内で書いてもらえませんか。
403 名前:nobodyさん mailto:sage [2006/03/10(金) 20:42:29 ID:???] >>402 モジュールの力を借りずに Perl の構文解析器を七行で書くのは 絶望的だし、この手のコードは多分に恣意的なインデントや桁揃え をしないと読み易くもならない。 ので、手っ取り早く「バラし」て流れを読みたいのなら、これで充分。 perl -MO=Deparse script.in > script.out もちろんチャレンジ精神を否定しているのではないよ。:o)
404 名前:nobodyさん mailto:sage [2006/03/11(土) 14:32:34 ID:???] >>402 ム板の7行スレの方であったかもしれぬ。なかったかもしれぬ。
405 名前:nobodyさん mailto:sage [2006/03/11(土) 17:24:08 ID:???] >>404 あったよ。Part 2 の 105,129,135,162,163,169,170 辺り。 …まぁ、通ってきた道なわけですよ。
406 名前:nobodyさん mailto:sage [2006/03/12(日) 19:32:59 ID:???] <?php $s=(int)$_GET['s'];$d=array_map('intval',explode(' ', $_GET['d']));$n= count($d);$m=max($d);$r=imagecreate($s,$s);imagecolorallocate($r,255,255,255); $c=imagecolorallocate($r,128,128,128);$h=$s/2;for($i=0;$i<$n;$i++){$a=pi()*(2* $i/$n-1/2);$t=$h*$d[$i]/$m;$p1[]=$h*(1+cos($a));$p1[]=$h*(1+sin($a));$p2[]=$h+ $t*cos($a);$p2[]=$h+$t*sin($a);imageline($r,$h,$h,$p1[$i*2],$p1[$i*2+1],$c);} imagepolygon($r,$p1,$n,$c);imagepolygon($r,$p2,$n,imagecolorallocate($r,0,0,255 ));header('Content-Type: image/gif');imagegif($r);?> これはあまり安全じゃないよ。 フォーム作るゆとりなかったからアドレスバーの数字を直接いじってみて〜 127.0.0.1/r.php?s=200&d=5+6+9+8+3+7+2
407 名前:nobodyさん mailto:sage [2006/03/14(火) 00:29:05 ID:???] そのうち7行山田ウイルスとか出てきそうな予感
408 名前:nobodyさん mailto:sage [2006/03/15(水) 00:31:04 ID:???] 7行Webサーバができるなら山田もいけそうだな
409 名前:nobodyさん mailto:sage [2006/03/26(日) 01:13:16 ID:???] 7行OS
410 名前:nobodyさん [2006/03/32(土) 00:29:48 ID:WFUzL8FS] あれ、7行WEBサーバってなかったっけ?
411 名前:nobodyさん mailto:sage [2006/06/12(月) 12:59:18 ID:???] 過疎スレになっちゃったな。
412 名前:nobodyさん [2006/06/12(月) 21:26:04 ID:NzZJH7e1] 先日、会社でちょっとした7行ゲームを作ったんだけど、 社内でやっちまったんで、持ち出せないんだよな。 7行といっても7分で出来るわけじゃないんだよな。
413 名前:nobodyさん [2006/07/23(日) 02:39:55 ID:8Se2GPZR] 七行Blog
414 名前:nobodyさん mailto:sage [2006/07/27(木) 16:06:23 ID:???] >>412 そんならカキコすんな なんていってほしいわけ?
415 名前:nobodyさん mailto:sage [2006/07/31(月) 00:02:46 ID:???] うpキボンヌ
416 名前: ◆GodofTripY mailto:sage [2006/08/01(火) 01:25:49 ID:???] ($name, $tripkey) = split(/\#(.+)/, $form{'name'}); if($tripkey){ $salt = substr($tripkey.'H.', 1, 2); $salt =~ tr/\x3A-\x40\x5B-\x60\x00-\x2D\x7B-\xFF/A-Ga-f./; $salt =~ s/[^\.-z]/\./g; $trip = '◆'. substr(crypt($tripkey, $salt), -10);} print "$name$trip"; 2chトリップ判定。
417 名前:nobodyさん mailto:sage [2006/08/01(火) 02:06:48 ID:???] >>416 気持ちはわかるがそれはwebprogではない
418 名前:nobodyさん mailto:sage [2006/08/01(火) 03:23:08 ID:???] >>416 どこかで見た事があるんだが^^
419 名前:nobodyさん mailto:sage [2006/08/01(火) 04:17:36 ID:???] >>416 2chってcrypt()なんだね
420 名前:nobodyさん [2006/10/13(金) 18:11:25 ID:UA0b1MaA] 6行RSSリーダー 設置して.cgi?以降にfeedのURLを入力 モジュールてんこ盛りなのでもっと短く書けるはず use LWP::Simple;use CGI":all";use XML::RSS;$h = new CGI;$r = new XML::RSS; $r->parse(get("$ENV{'QUERY_STRING'}"));%c = %{$r->{'channel'}}; print $h->header.'<a href="'.$c{'link'}.'">'.$c{'title'}. "</a><br>$c{'description'}<br>";print "<ul>";for $item (@{$r->{'items'}}){ print '<a href="'.$item->{'link'}.'">'.$item->{'title'}. "</a><br>$item->{'description'}<br>";}print "</ul>".$h->end_html;
421 名前:sage mailto:sage [2006/10/13(金) 18:14:55 ID:???] test
422 名前:nobodyさん [2006/10/13(金) 18:17:21 ID:yRLkeiwT] >>421 まさか7行で2chに書き込めるスクリプトを?!
423 名前:nobodyさん mailto:sage [2006/10/13(金) 22:26:56 ID:???] 7行も要らんけどな
424 名前:nobodyさん mailto:sage [2006/10/13(金) 23:51:02 ID:???] 書き込みのモジュールなんてあった??<<Perl脳
425 名前:nobodyさん mailto:sage [2006/10/14(土) 00:15:13 ID:???] 書き込みっつーかPOSTするだけだろ
426 名前:nobodyさん mailto:sage [2006/10/14(土) 00:45:55 ID:???] >>425 単にPOSTするだけって単にPOSTしただけじゃread.cgiに弾かれる
427 名前:nobodyさん mailto:sage [2006/10/14(土) 01:32:50 ID:???] 私はPHPならなんとか作れそうだが、それ以前に2chの仕様を勉強しなくちゃだな。
428 名前:nobodyさん mailto:sage [2006/10/14(土) 01:42:28 ID:???] POST先はbbs.cgiだけどな
429 名前:nobodyさん mailto:sage [2006/10/14(土) 02:59:59 ID:???] >>428 それすら知らなかった漏れは百回くらい正規表現の勉強でもしましょうか?
430 名前:nobodyさん mailto:sage [2006/10/14(土) 06:34:52 ID:???] >>420 縮めた。 #!/usr/bin/perl use LWP::Simple;use XML::RSS;$r=new XML::RSS;parse$r get$ENV{QUERY_STRING};use CGI":all";%c=%{$r->{channel}};put header,a({href,$c{link}},$c{title}),br,$c{$d= description},br,ul(li[map a({href,$_->{link}},$_->{title}).br.$_->{$d}.br,@{$r ->{items}}]),end_html
431 名前:nobodyさん mailto:sage [2006/10/14(土) 14:05:08 ID:???] >>430 sugeeeeeeeeeeeeeeeeeeeeee 問題無く動いた
432 名前:nobodyさん mailto:sage [2006/10/14(土) 15:01:38 ID:???] >>430 からもうちょい縮めた上で HTML がまともになるよう追加。 #!/usr/bin/perl use CGI":all";use LWP::Simple;use XML::RSS;$r=new XML::RSS;sub A{a{href,$_[0]-> {link}},$_[0]->{title}}charset$C="UTF-8";parse$r get pop;%c=%{$$r{channel}};put header,start_html(-encoding,$C,lang,ja),h1(A\%c),p($c{$d=description}),ul(li[ map A($_).br.$$_{$d},@{$$r{items}}]),end_html 二行半も空いてるけど付け加える機能を思いつかず。
433 名前:nobodyさん mailto:sage [2006/10/14(土) 15:13:56 ID:???] >>432 未読管理機能なんかオススメ 二行半でやる方法は思い浮かばないorz むしろ、どういう過程を経て効率的なソースが引けるようになったのかの方に興味あり苦笑 どこか参考にしたサイトとかあります?
434 名前:nobodyさん mailto:sage [2006/10/15(日) 11:53:37 ID:???] >>433 > 未読管理機能 ほい。新着タイトルを太字表示。 #!/usr/bin/perl use CGI":all";use LWP::Simple;use XML::RSS;$r=new XML::RSS;dbmopen%n,"7rssrdr", 420;charset$C="UTF-8";sub A{($t,$l)=@$_{"title","link"};a{href,$l},$n{$l}++?$t: b$t}parse$r get pop;%c=%{$$r{channel}};put header,start_html(-encoding,$C,lang, ja),h1(A$_=\%c),p($c{$d=description}),ul(li[map A.br.$$_{$d},@{$$r{items}}]), end_html > どこか参考にしたサイトとかあります? 駱駝本とか perldoc とか。冗談でも何でもなく。 この遊びのノウハウなら cm.xrea.cc/techinfo.cgi に。
435 名前:nobodyさん mailto:sage [2006/10/16(月) 01:39:15 ID:???] >>434 >駱駝本とか perldoc とか。 さもありなんというか結局質の高い基本が一番役にたつんだろうな
436 名前:aaz mailto:aaz@aaz.com [2006/11/05(日) 22:18:14 ID:???] fitaly.com/board/wordperfect/posts/362.html
437 名前:nobodyさん mailto:sage [2007/05/08(火) 22:55:38 ID:???] ほす
438 名前:nobodyさん mailto:sage [2007/12/01(土) 02:02:19 ID:???] 月次移動可能なカレンダー。c.phpで保存。 <?php $a=q("Y-m-t","$_GET[y]-1");$d=explode("-",$a);$y="<a href=?y=";$v=$d[0]; $w=$d[1];$z="</tr><tr>";$m="$v-$w";$p=q("Y-m",$w-1,1,$v);$n=q("Y-m",$w+1,1,$v) ;echo"<html>$y$p><</a>$m$y$n>></a> $y c.php>now</a><table border=1><tr>$z";$f= q("w","$m-1");for($i=-6-$f;$i<$d[2]-q("w",$a)+7;$i++){echo($i<1-$f)?"<th>".q( "D",$w,$i,$v)."</th>":(($i<1||$i>$d[2])?"<td></td>":"<td>$i</td>");if(($i+$f)% 7==0)echo$z;}echo"</tr></table></html>";function q($x,$w,$i=0,$v=0){return($i) ?date($x,mktime(0,0,0,$w,$i,$v)):date($x,strtotime($w));}?>
439 名前:nobodyさん mailto:sage [2007/12/06(木) 09:44:33 ID:???] >>438 「now」も要らんと思う。 <?php list($v,$w,$d)=explode("-",$a=q("$_GET[y]-1","Y-m-t"));$f=q("$v-$w-1","w" );echo$l="<a href=?y=",q($w-1,"Y-m",1,$v),"><</a>$v-$w$l",q($w+1,"Y-m",1,$v) ,">></a> $l>now</a><table><tr>";for($i=-6-$f;$i<$d-q($a,"w")+7;){echo$i<1-$f ?"<th>".q($w,"D",$i,$v)."</th>":"<td>".(($i<1||$i>$d)?"":$i)."</td>";if(($i++ + $f)%7==0)echo"</tr><tr>";}function q($w,$x,$i=0,$v=0){return date($x,$i?mktime( 0,0,0,$w,$i,$v):strtotime($w));}?></tr></table> PHPは不得手なんで、これよりもっと縮む筈。
440 名前:438 mailto:sage [2007/12/08(土) 01:17:01 ID:???] >>439 凄いですね。いろんなことができるんだ、と感心しきり。 少しだけ縮めた。 <?php list($v,$w,$d)=explode("-",$a=q("$_GET[y]-1","Y-m-t"));$f=q("$v-$w-1","w" );echo$l="<a href=?y=",q($w-1,"Y-m",1),"><</a>$v-$w$l",q($w+1,"Y-m",1),">></a> $l>now</a><table><tr>";for($i=-6-$f;$i<$d-q($a,"w")+7;){echo$i<1-$f?"<th>".q($w ,"D",$i)."</th>":"<td>".($i<1||$i>$d?"":$i)."</td>";if(($f+$i++)%7==0)echo"</tr ><tr>";}function q($w,$x,$i=0){global$v;return date($x,$i?mktime(0,0,0,$w,$i,$v ):strtotime($w));}?></tr></table>
441 名前:438 mailto:sage [2007/12/08(土) 02:02:58 ID:???] 手抜きバージョン。取り合えず表示されるみたいなので… <?php function q($w,$x,$i=0){global$v;return date($x,$i?mktime(0,0,0,$w,$i,$v): strtotime($w));}list($v,$w,$d)=explode("-",$a=q("$_GET[y]-1","Y-m-t"));echo$l=" <a href=?y=",q($w-1,"Y-m",1),"><</a>$v-$w$l",q($w+1,"Y-m",1),">></a> $l>now</a> <table><tr>";for($i=-6-$f=q("$v-$w-1","w");$i<32;){echo$i<1-$f?"<th>".q($w,"D", $i)."</th>":"<td>".($i<1||$i>$d?"":$i)."</td>";if(($f+$i++)%7==0)echo"</tr><tr> ";}?></tr></table>
442 名前:438 mailto:sage [2007/12/08(土) 02:37:04 ID:???] HTMLダメダメの超手抜きバージョン。無理やり5行にしてみた。 <?php list($v,$w,$d)=explode("-",q("$_GET[y]-1","Y-m-t"));echo$l="<a href=?y=", q($w-1,"Y-m",1),"><</a>$v-$w$l",q($w+1,"Y-m",1),">></a> $l>now</a><table>";for( $i=-6-$f=q("$v-$w-1","w");$i<32;){echo$i<1-$f?"<th>".q($w,"D",$i)."</th>":"<td> ".($i<1||$i>$d?"":$i)."</td>";if(($f+$i++)%7==0)echo"</tr><tr>";}function q($w, $x,$i=0){global$v;return date($x,$i?mktime(0,0,0,$w,$i,$v):strtotime($w));}?>
443 名前:nobodyさん mailto:sage [2007/12/08(土) 22:33:30 ID:???] 閉じタグ無しでいいなら <?php function q($w,$i=1,$x="Y-m"){global$v;return date($x,$i?mktime(0,0,0,$w, $i,$v):strtotime($w));}list($v,$w,$d)=explode("-",q("$_GET[y]-1",0,"Y-m-t")); echo$l="<a href=?y=",q($w-1),"><</a>$v-$w$l",q($w+1),">></a> $l>now</a><table>" ;for($i=-6-$f=q("$v-$w-1",0,"w");$i<32;){echo"<td>",($i<1-$f?q($w,$i,"D"):($i<1 ||$i>$d?"":$i)),($f+$i++)%7?"":"<tr>";}
444 名前:nobodyさん mailto:円柱都市age [2008/02/14(木) 04:21:18 ID:???] >>334 3年越しの7clap. #!/usr/bin/perl use CGI":all";charset$c=Shift_JIS;sub d{($m,$m,$h,$d,$m,$y)=localtime(time-pop); $l[0]=(190001+$y*100+$m)*100+$d}param(K,$k=1+param K);($w=escapeHTML(param W))=~ y/\0- / /s;($C,$M,$L,$E,@M)=<DATA>;open L;flock L,2;open C;@l=d>(@c=<C>)[-1]?(d, (0)x25,$/):split/<>/,pop@c;@c<14||shift@c;$l[$_]++for$h+2,1;open C,">$C";print C @c,join"<>",@l;d 1209600;open M;@m=grep$l[0]<=$_,<M>;open M,">$M";print M@m,""ne $w&&d."<>$h<>$w<>\n";put header,start_html(-encoding,$c,lang,ja),$k<10?($M[rand@ M],startform,p(hidden(K),Comment,textfield(W),submit Clap),endform):p$E,end_html __DATA__ log.dat mes.dat >lock.dat 沢山の拍手を有り難うございました! 拍手が送信されました。ありがとうございました! 拍手が送信されました。ありがとうございますた! 拍手が送信されました。ありがとさ〜ん! ・flock非保護。
445 名前:nobodyさん mailto:ルルイエage [2008/02/16(土) 22:06:19 ID:???] >>327 7kaiseki.cgi #!/usr/bin/perl use CGI":all";charset$c=Shift_JIS;($P,$C,$M)=<DATA>;($p=param P).$/ne$P&¨sub l{(sort@_)[-1]/10||1}sub d{@p=localtime time-86400*pop;$g=(190001+$p[5]*100+$p[4 ])*100+$p[3]}open C;%c=map{/<>/;$`,$'}<C>;($l,@l)=$c{$q=param(T)||d}=~/\d+/g;put header,start_html(-encoding,$c,lang,ja),h1($q),table((map{Tr td[$z++.':00',$_+0, "/"x($_/l@l)]}@l[0..23]),Tr td[Total,$l+0,""]),h1(Mes),dl(map{s/<>$//;/<>/;$`!=$ z&&dt($z=$`.':00'),dd$'}grep{s/$q<>//}open(M),<M>),h1(Past14day),table(map{Tr td [a({href,"?P=$p&T=".d$x++},$g),$_,"/"x($_/l@s)]}@s=map{$c{d$_}+0}0..13),end_html __DATA__ password log.dat mes.dat ・HTML適当。 ・ファイルロックなし。 ・DATAの1行目にパスワードを設定、「?P=password」でリクエスト。
446 名前:nobodyさん mailto:sage [2009/10/15(木) 22:52:19 ID:???] 最終カキコ一年前なのになんで落ちないんだ?
447 名前:nobodyさん mailto:sage [2009/10/16(金) 18:37:54 ID:???] >>446 cos this thread is very good! don't you think so?