なるほど、クソコーダーとしてかかねばならぬ。
説明文を追加したが、同僚に殴られないためにはマネしない方が良いです。
*** ver 7
<?php
eval($argv[0]);
- ただし、ファイル名は
while(!@strstr($l.=[ズン,ドコ][rand()%2],ズンズンズンズンドコ));@die($l.キ・ヨ・シ!);
にすること。 - ファイルシステムや、ファイラなどによっては利用文字種で作れないかも
- そんなファイル名のファイルは以下のスクリプトで作成できる(OSXで確認)
<?php
file_put_contents('while(!@strstr($l.=[ズン,ドコ][rand()%2],ズンズンズンズンドコ));@die($l.キ・ヨ・シ!);', '<?php eval($argv[0]);');
- 果てしの無い「もう
php -r
でいいじゃねーか」感 - 他所でみた
strtr
を使うものを越える方法がイマイチおもいつかなく(<?php while(!@strstr($l.=rand()%2,"00001"))?><?=@strtr($l.キ・ヨ・シ!,[ズン,ドコ]);
)、そろそろネタ切れです。 - 以下のようにbase64をつかえばもっと扱いやすい(?)ですね…(だからなんだ)
<?php
eval(base64_decode($argv[0]));
- ファイル名は「d2hpbGUoIUBzdHJzdHIoJGwuPVvjgrrjg7Ms44OJ44KzXVtyYW5kKCklMl0s44K644Oz44K644Oz44K644Oz44K644Oz44OJ44KzKSk7QGRpZSgkbC7jgq3jg7vjg6jjg7vjgrfvvIEpOyAg」にしてください
- こういうコードを書くと致命的なセキュリティホールをつくりがちなので、勿論マネしてはいけません。
*** ver 6
<?php
while(!@strstr($l.=[ズン,ドコ][rand()%2],ズンズンズンズンドコ))?><?=$l?>キ・ヨ・シ!
- ループ抜けにつかわなくなったので、dieが不要に
- 最後はテンプレートエンジンとしてのPHP力を発揮
- (依然と長さの比較がわかりづらくなるので、
<?php
の後に改行を入れているが、空白でOK)
*** ver 5
<?php
while(!@strstr($l.=[ズン,ドコ][rand()%2],ズンズンズンズンドコ));@die($l.キ・ヨ・シ!);
-
strstr
の引数の式で代入と判定で十分だったな…ループが終わったらdie
-
while
に文({}
)が必要ない場合は省略できる(ただし、;
が必要) -
strstr
と代入が一文になったので、@
が一個へらせた
*** ver 4
<?php
while(@$l.=[ズン,ドコ][rand()%2])@strstr($l,ズンズンズンズンドコ)?@die($l.キ・ヨ・シ!):0;
- 二値なら、奇数判定でよかった。
*** ver 3
積極的にエラーを握りつぶして行くスタイルでなぐられ度アップ❤
<?php
while(@$l.=[ズン,ドコ][rand(0,1)])@strstr($l,ズンズンズンズンドコ)?@die($l.キ・ヨ・シ!):0;
- ベアワード("でくくられておらず、定数になっていない文字)は、エラーにはなるが表記通りの値として判定される、
@
一個あれば"
二個いらないのだ!
*** ver 2
1文字削れた
<?php
while(@$l.=['ズン','ドコ'][rand(0,1)])strstr($l,'ズンズンズンズンドコ')?die($l.'キ・ヨ・シ!'):0;
- if文もカッコが多い
if()
三項演算子なら?:
ですむ
*** ver 1
<?php
while(@$l.=['ズン','ドコ'][rand(0,1)])if(strstr($l,'ズンズンズンズンドコ'))die($l.'キ・ヨ・シ!');
-
while
やif
の{}
は一文しかないときは省略できる -
$l='';
よりも@
一文字のほうが少ない(未定義変数にいきなり値をいれるとエラーになるが、@で握りつぶせる) -
[...][...]
は5.5>=phpから -
die
は引数に文字列が来た時、それを出力しながら終了する
あるいは
<?php
$l='';
while($l.=['ズン','ドコ'][rand(0,1)])
if(strstr($l,'ズンズンズンズンドコ'))
die($l.'キ・ヨ・シ!');
(PHP7.0.3)
富豪手法です。
mt?うまいのかそれ?