2010-11-05 72 views
2

为什么这项工作:PHP包括帮助

<?php include "includes/top_nav.php"; ?> 

?为什么这不是为我工作吗?作为所述in the documentation该服务器

http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

+0

您忘记了添加代码。 – zzzzBov 2010-11-05 16:27:43

+0

你忘了添加错误信息。 – 2010-11-05 16:28:18

+0

没有错误消息,第一个示例包含我期望它包含的html,第二个示例不包含我期望它包含的html。 – oshirowanen 2010-11-05 16:29:12

回答

2

我看到两个可能的原因。

首先,您的服务器可能未配置为允许URL文件访问。在这种情况下,错误将显示为“在服务器配置中禁用URL文件访问”

如果包含实际工作,但不包括您的期望,但这是一个完整的其他故事。在这种情况下,理解的关键是如何处理这样的请求。在执行你共享的脚本时,你的服务器会执行一个HTTP请求(对它自己)并要求输出top_nav.php。这是对服务器的一个全新的请求,所以关于请求的原始请求的细节不再起作用。

该请求将来自不同的IP地址(即您的服务器的地址,而不是原始客户端)的不同用户(即Apache),不同的Cookie,不同的$_GET数据和不包含$_POST数据。

因此,如果top_nav.php在渲染时以任何方式检查服务器变量,环境变量,PHP变量或任何其他运行时状态,则将失败。

+0

你说得对,allow_url_include被设置为Off。 – oshirowanen 2010-11-05 16:36:56

+0

@oshirowanen你最好保持关闭,愚蠢 – 2010-11-05 18:59:00

+0

为什么要保持关闭? – oshirowanen 2010-11-11 20:21:44

5

URL fopen封装可能是无效的,即使它的启用,它不与Windows上工作。

1

您需要启用URL fopen wrappers

<?php include "http://localhost/includes/top_nav.php"; ?> 
0

From PHP docs

如果“URL fopen封装”在 PHP(他们是在默认 配置)启用后,您可以指定 文件使用URL包括(通过 HTTP或其他支持的包装 - 请参阅 支持的协议/包装列表 获取协议列表)而不是 本地路径名。

你的服务器上的URL fopen包装的价值是什么?