服务器端包含

时间:2009-08-10 15:26:01

标签: html text-files ssi

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

如果没有其他选项可以做什么?

4 个答案:

答案 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);
?>

file_get_contents()fopen()

也是如此

如果要获取文件的“实际”内容,则需要在其他服务器上设置排序代理。 (您无法在服务器上执行此操作,因为这将是服务器端脚本工作方式的安全漏洞。)

<?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/" -->