通过allow_url_include = 0在服务器配置中禁用包装器

时间:2011-07-31 03:18:56

标签: php javascript ajax

我正在尝试通过AJAX调用来检索网页内容。我在页面包装器中有一系列链接。当我单击链接时,它会加载一个JavaScript函数,该函数从php脚本中检索页面内容。在这种情况下,我正在我的localhost上进行开发,但在生产中,脚本将与执行AJAX调用的文件位于同一个根文件夹和域中。我使用响应作为div的内容。内容不仅仅是PHP,我的意思是,它是由php生成的,它有HTML个元素,如div和spans。它基本上是开始和结束身体标签之间的东西。因此,我不确定我是否可以使用json_encode

而不是div中的内容加载,我收到以下错误:

  

警告:require_once()[function.require-once]:http:// wrapper is   通过allow_url_include = 0

在服务器配置中禁用

在阅读allow_url_include后,似乎默认情况下通常会禁用此功能。我假设此功能允许一些严重的站点攻击。是这样的吗?如果是这样,我如何从其他文件中检索内容?

我尝试使用JQuery加载函数:

$('#content').load('pages/test_page.php');

但结果完全相同。

这让我疯了! TIA。

编辑:我想我可能已经发现了问题; php正在检索内容的AJAX文件正在使用require_once。它需要的文件位于同一个根文件夹中的同一台服务器上,但它是一个目录。但是,这会产生一个新问题:我正在获取内容,但并不完全。例如,在文件中我有:

Title:  <?php echo $details['title']; ?>

我只收到第一个字母,这适用于我php的其他echo内容。

3 个答案:

答案 0 :(得分:9)

allow_url_include仅影响include()require(),您仍然可以使用PEAR HTTP_Request2模块或curl函数来获取网页。

include()用于远程网页被视为“不良做法”,可能会带来安全风险。例如,如果您使用include($var);并且某些攻击者设法将$ var替换为http://hacksite.tld他/她可以“注入”代码......

答案 1 :(得分:1)

不用担心,只需使用file_get_contents()然后使用您检索到的内容在文档中写入新文件,然后include文件中的文件。您现在包含的文件已准备好进行所需的任何更改,使用cssjavascript等。这基本上就是包装器所做的。

答案 2 :(得分:-1)

这是因为您使用的是完整网址。 请尝试以下方法:

$('#content').load('test_page.php');