Вернуться на предыдущую страницу

Иногда может возникнуть случай, когда нам необходимо выполнить PHP код, который расположен на другом сервере. Для этого нам понадобиться...

Для начала понять, как вообще выполняется PHP код, который откуда-то приходит или находится в переменной... Давайте посмотрим на этот пример:

<?php
ini_set('display_errors',1);//отображаем ошибки
$code = '<?php
echo 123;
';
$code=str_ireplace(['<?','<?php'],'',$code);
function _readphp_eval($code) {
ob_start();
print eval("?>". $code);
$output = ob_get_contents();
ob_end_clean();
return $output;
}
print _readphp_eval($code);

Как Вы можете видеть, результатом исполнения данного кода будет «123», хотя этот код написан в переменной. Но выполниться он только в том случае, если в настройках php.ini (или в момент выполнения скрипта) включена поддержка функции eval.

Теперь, для того, чтобы пример оказался весьма реальным, мы можем сделать так:

  1. Расположить файл text.txt на каком-либо сервере с https.
  2. Взять его содержимое и выполнить на другом сервере...

Файл text.txt (может быть и PHP, но если PHP, то он, соответственно, должен отдать PHP код, который мы выполним...).

<?php echo 123456;//просто текстовый (неисполняемый) файл

Файл we-hawe-test.php: // PHP (исполняемый) файл

<?php
ini_set('display_errors',1);

$code=file_get_contents('https://dev2.inverser.pro/test.txt');
//var_dump($code);//string(20) "<?php echo 123456;"
/*$code = '<?php
echo 123;
';*/
//$code=str_ireplace(['<?','<?php'],'',$code);
function _readphp_eval($code) {
ob_start();
print eval("?>". $code);
$output = ob_get_contents();
ob_end_clean();
return $output;
}
print _readphp_eval($code);

Результат выполнения будет таким: 123456.