Выполнить код PHP, возвращенный запросом cURL - PullRequest
1 голос
/ 09 декабря 2010

Я пытаюсь выполнить код, возвращаемый запросом cURL.

Следующий код запрашивает страницу на моем веб-сервере:

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://web.com/foo.php");
curl_setopt ($ch, CURLOPT_HEADER, 0);
$res = curl_exec ($ch);
curl_close ($ch);
echo $res;

Я бы хотел сделать это, только изменив код в foo.php. Я попытался вернуть PHP-код как результат в foo.php с помощью команды eval (), но, похоже, он не работает.

Есть идеи?

РЕДАКТИРОВАТЬ : Ребята, я делаю это не для публичного сайта. Это для частного проекта, я буду единственным пользователем. Я знаю, что это огромная проблема безопасности, я бы никогда не сделал что-то подобное в Интернете.

Ответы [ 3 ]

2 голосов
/ 09 декабря 2010

Отказ от ответственности: это ужасная идея для безопасности, и вы не должны этого делать.

Это сказал

  • убедитесь, что опция allow_url_fopen разрешена в вашем php.ini, или установите ее, используя ini_set
  • гарантирует, что web.com действительно возвращает PHP-код, а не выполняет PHP-код и возвращает выходные данные - это не даст вам ничего полезного для запуска (если код PHP не генерирует другой php-код в качестве вывода, но тогда вы действительно слишком далеко зашли в кроличью нору)
  • тогда просто include "http://web.com/foo.php"

Теперь, повторюсь, не делайте этого, если вы действительно не уверены в себе, или вам действительно не нравится взломать ваш сайт.

1 голос
/ 09 декабря 2010

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : ЭТО УЖАСНАЯ ИДЕЯ.Я НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ, ЧТО ВЫ ИСПОЛЬЗУЕТЕ НЕКОТОРЫЙ ДРУГОЙ ПОДХОД.

Я собираюсь догадаться, что файл вашего сервера интерпретируется сервером, на котором они работают, поэтому вы получите ответ синтаксического анализа PHP.Попробуйте переименовать их во что-то еще, например .phtml.Или выключите PHP на удаленном сервере.Тогда это должно быть просто вопросом:

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://web.com/foo.phtml");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec ($ch);
curl_close ($ch);

$parsed = eval($res);

// echo or do whatever with $parsed

Но, как я сказал в своем заявлении об отказе от ответственности, и все комментирующие, отвечая на этот вопрос, сказали: «Это риск безопасности, и даже за его пределами есть все видыподводные камни.Если вы уточните, почему вы хотите это сделать, мы, вероятно, найдем лучшее решение, которое не заставит Джона Скита плакать.

1 голос
/ 09 декабря 2010

Обратите внимание, что eval не требуется ведущий <?php для работы. Альтернативой eval может быть запись кода в файл, а затем включение указанного файла.

Кроме того, убедитесь, что для параметра CURLOPT_RETURNTRANSFER установлено значение true, в противном случае вы можете просто отобразить код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...