なるほど、クソコーダーとしてかかねばならぬ。
説明文を追加したが、同僚に殴られないためにはマネしない方が良いです。
*** 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?うまいのかそれ?