是否可以使用服务器端包含来访问服务器外的文件?
如果没有其他选项可以做什么?
答案 0 :(得分: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);
?>
也是如此
如果要获取文件的“实际”内容,则需要在其他服务器上设置排序代理。 (您无法在服务器上执行此操作,因为这将是服务器端脚本工作方式的安全漏洞。)
<?php
// Read the requested file out
readfile($_GET['file']);
这将为您提供您请求的任何文件的内容:
http://test.com/handler.php?file=handler.php
但是,如果其他人发现它,那可能会很危险。
答案 1 :(得分:3)
您没有提到服务器软件,但我会假设Apache,其中SSI由mod_include模块提供。 include 元素不允许远程文件。但是,您有 exec ,它允许执行任何外部工具;您可以使用它来调用 wget 或您选择的任何其他命令。
然而,它可能并不那么复杂。如果可以在本地系统中安装远程目录,则可以创建普通符号链接并使用常规 include 。
或者,正如已经建议的那样,PHP非常简单易用。
答案 2 :(得分:1)
你可以在php中执行类似file_get_contents()或fopen()的操作,例如。
<?php
echo file_get_contents('http://www.example.com/include');
?>
答案 3 :(得分:0)
是的,nginx的服务器端包含可以使用任何完整的URL,例如:
<!--# include virtual="http://www.stackoverflow.com/" -->