2

是否可以使用服务器端包含来访问服务器外部的文件?

如果不是,还有哪些其他选择可以做到这一点?

4

4 回答 4

3

使用cURL获取域外的数据。如果您想执行收到的数据,请继续执行eval()。但是,请注意,这将获得页面的“输出”。这意味着如果它是一个像“.php”页面这样的执行页面,您将获得由于处理它而出现的数据。

<?php
// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);

// grab URL and pass it to the browser
curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);
?>

对于file_get_contents(), 和fopen()

如果您想获取文件的“实际”内容,则需要在另一台服务器上设置各种代理。(您不能在您的服务器上执行此操作,因为那样会成为服务器端脚本工作方式的安全漏洞)。

<?php

// Read the requested file out
readfile($_GET['file']);

这将为您提供您请求的任何文件的内容:

http://test.com/handler.php?file=handler.php

但是,如果其他人发现它,那可能会很危险。

于 2009-08-10T15:29:37.673 回答
3

您没有提到服务器软件,但我假设 Apache,其中 SSI 由mod_include模块提供。include元素不允许远程文件。但是,您有exec,它允许执行任何外部工具;您可以使用它来调用wget或您选择的任何其他命令。

但是,它可能没有那么复杂。如果您可以在本地系统中挂载远程目录,则可以创建一个普通的符号链接并使用常规的 include

或者,如前所述,PHP 使用起来非常简单。

于 2009-08-10T20:39:38.033 回答
1

您可以在 php 中执行类似 file_get_contents() 或 fopen() 的操作,例如

<?php
    echo file_get_contents('http://www.example.com/include');
?>
于 2009-08-10T15:29:12.700 回答
0

是的,nginx 的服务器端包含可以使用任何完整的 url,例如:

<!--# include virtual="http://www.stackoverflow.com/" -->
于 2009-08-10T15:40:39.790 回答