Это скрипт PHP.
<?php
eval(" echo 0?>');echo 1 ");
echo 2;
?>
Выход 0');echo 1 2
.
И кажется, что ?>
говорит eval
просто напечатать остальную часть строки. Это правильное поведение или кто-то может объяснить, почему это происходит?
?>
закрывает код PHP только внутри кода eval-ed, а остальное интерпретируется как HTML и просто отправляется в браузер. eval()
ожидает PHP и не нуждается в открытии <?php
, но ?>
заканчивает PHP. Думать о eval()
как виртуальная машина, она выполняет свой код независимо от PHP на странице, которая имеет eval()
, Так:
<?php // start executing PHP
// evaluate PHP independently, inside a function
// echo 0
eval(" echo 0
?> // end PHP execution
');echo 1 " // output as HTML
); // end the eval() function execution
echo 2; // since eval() is complete as a PHP function, continue PHP execution
?> // end PHP execution
Операторы, которые выполняются:
eval(" echo 0?>');echo 1 ");
echo 2;
Первый очень похож на выполнение этого кода PHP:
<?php
echo 0
?>
'); echo 1
И это четко печатает 0
с последующим '); echo 1
,
Затем выполняется второе утверждение, которое печатает 2
,