绕过allow_url_include = 0错误

时间:2012-11-07 20:15:25

标签: php

我正在尝试从网址中包含一个文件,但是我收到了以下错误。

Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in /Applications/MAMP/htdocs/diningtime/testsite/salims/index1.php on line 58

Warning: include(http://localhost/diningtime/templates/100/index.php): failed to open stream: no suitable wrapper could be found in /Applications/MAMP/htdocs/diningtime/testsite/salims/index1.php on line 58

Warning: include(): Failed opening 'http://localhost/diningtime/templates/100/index.php' for inclusion (include_path='.:/Applications/MAMP/bin/php/php5.4.4/lib/php') in /Applications/MAMP/htdocs/diningtime/testsite/salims/index1.php on line 58
Test

只是想知道是否还有这个?

我的PHP包含代码

<?php include "$location/index.php"; ?>

感谢您对此的帮助。

2 个答案:

答案 0 :(得分:20)

您正在使用包含路径的完整URL,这告诉PHP尝试执行HTTP请求以获取该文件。这是你如何做到这一点。除非...100/index.php输出PHP代码,否则您将获得一些HTML或其他任何包含结果,而不是文件中的php代码。记住 - 您通过URL获取,这意味着它是一个HTTP请求,这意味着Web服务器将执行该脚本并提供其输出,而不是简单地提供其源代码。

网络服务器无法告诉该脚本的HTTP请求是来自同一服务器上另一个PHP脚本的包含调用。它可能很容易被一些隐藏在俄罗斯的黑客想要窃取你的源代码。您是否希望您的源代码对这样的世界可见?

对于本地文件,您永远不应该使用完整的网址。这是非常低效的,不会做你想要的。为什么不简单地拥有

include('/path/to/templates/100/index.php');

相反,这将是一个本地文件专用请求,不包括HTTP阶段?

答案 1 :(得分:1)

我遇到了类似的问题。

考虑到'Marc B'的帖子,很明显使用绝对URL并不是一个好主意,即使可以将php.ini编辑为'ficuscr'状态。我不确定这种解决方法是否适用于您的具体情况,因为它仍然需要根据文件夹结构中的位置调整每个页面,但如果像我一样,您的内容中包含大量内容,则会使事情变得更简单网站。

<?php $root="../";?>
<?php include($root . 'folder-A/file_to_be_included_1.php');?>
<?php include($root . 'folder-A/file_to_be_included_2.php');?>
<?php include($root . 'folder-B/file_to_be_included_3.php');?>
<?php include($root . 'folder-B/file_to_be_included_4.php');?>
<?php include($root . 'folder-B/sub-folder/file_to_be_included_5.php');?>

对我来说,这意味着如果我将页面移动到文件夹结构中的另一个位置,例如在其当前位置的子文件夹中,我需要做的就是将<?php $root="../";?>修改为{{1例如