Та дам!
Лайт прислал решение на 12 символов.
Сообщение от
l1ght
↑
а с:
$a=~"phpinfo";echo ~$a; phpinfo
$a="phpinfo";~~$a(); true
$a=~"phpinfo";~$a(); false
понял почему ?
Сообщение от
l1ght
↑
тип данных не меняется,синтаксис вроде позволяет,я это так и не вкурил
Сообщение от
l1ght
↑
все понял,
(~%8F%97%8F%96%91%99%90)() - 12 символов
Первоначально не поверил ему, поскольку этот вариант я проверял, минимум дважды, должен работать, но не работает.
Раскомментировал строку //$p='(~'.~'phpinfo'.')()';
работает.
.SpoilerTarget" type="button">Spoiler
Эту магию оставил на потом разбираться, сейчас больше интересует магия скобок.
Давайте добивать вместе.
Я когда экспериментировал, исходил из того, что запись
(здесь чего то) означает, что внутри скобок находится строка, сейчас не помню где, поищю, но скобки - это еще один способ записи строки, например конструкция (int)$var использует его.
В результате $a=~'phpinfo'; print ~$a; получается не строка, возможно константа.
А скобки принудительно заставляют воспринимать, как строку $a=~'phpinfo';(~$a)();
Есть еще вариант объяснения, что скобки это просто последовательность операций и в пользу этого говорят проверки
Код:
eval('print (3-2)()'.';'); - Function name must be a string
eval('print ("2"+"2")()'.';'); - Function name must be a string
eval('print (2*2)()'.';');- Function name must be a string
По крайней мере, это точно не преобразование в строку.
Кстати эта конструкция
работает только на семерке, а
в пятой ветке не работает.
==
PS
Лайт - красавчик.
#этапять
но поскольку отказался оформить пост, то #этаужечетыре и нет возможности закидать его репой (((.
==
PS2
Вот чем хорошо, когда команда ресерчит, вариантов набирается много и разных, и задание вроде бы простое, а превращается в нормальное, полноценное, интересное.