执行cURL查询返回的PHP代码

时间:2010-12-09 01:11:32

标签: php curl

我正在尝试执行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中的代码来实现。 我尝试使用eval()命令在foo.php中返回PHP代码,但它似乎不起作用。

有什么想法吗?

编辑:伙计们,我不是这样做的公共网站。这是一个私人项目,我将是唯一的用户。我知道这是一个巨大的安全问题,我永远不会做这样的事情会在互联网上生活。

3 个答案:

答案 0 :(得分:2)

免责声明:这对安全性来说是一个糟糕的想法,你不应该这样做。

那说

  • 确保您的php.ini中允许使用allow_url_fopen选项,或使用ini_set
  • 进行设置
  • 确保web.com实际上返回PHP代码,而不是执行 PHP代码并返回输出 - 这不会给你任何有用的东西(除非PHP代码生成其他 php代码作为输出,但是你真的在兔子洞里走得太远了)
  • 然后只是include "http://web.com/foo.php"

现在,重申一下,除非你对自己非常肯定,否则不要这样做,或者你真的想让你的网站被黑了。

答案 1 :(得分:1)

请注意,eval不需要前导<?phpeval的替代方法是将代码写入文件,然后包含所述文件。

另外,请确保将CURLOPT_RETURNTRANSFER选项设置为true,否则,您可能只显示代码。

答案 2 :(得分:1)

免责声明:这是一个令人难以置信的想法。我强烈建议您使用其他方法。

我猜你的服务器正在解释服务器的文件,所以你得到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

但正如我在我的免责声明中所说的那样,每个评论回答这个问题的人都说过......这是一种安全风险,甚至超出了各种各样的问题。如果你详细说明你为什么要这样做,我们可能会找到一个更好的解决方案,不会让Jon Skeet哭。