2010-07-30 83 views
0

这似乎是世界上最基本的东西,但我不知道PHP。通过变量包含文件

我想在我的页面上包含一个文件,并且该文件的目录是在变量内指定的。

<?php 
    $pageGroup = 'news'; 
    $directory = 'http://localhost:8888/includes/'.$pageGroup.'/rightCol.html'; 
    include($directory); 
?> 

当我echo$directory的结果,我得到 “http://localhost:8888/includes/news/rightCol.html”,这是完全正确的。然而,当我尝试在该目录中包含文件时,什么也没有发生。我认为这与include语法有关。

任何建议表示赞赏。

+0

1.你想不包括文件,但URL 2 。转动错误显示/报告看看会发生什么 – 2010-07-30 13:27:13

回答

0

确保您已从php.ini打开allow_url_fopen设置。

话虽如此,有连接到安全风险,请参阅:

建议:

包含文件,不要使用完整的URL路径,只使用文件/文件夹路径。

例子:

include "/includes/news/rightCol.html"; // get from specified dir 
include "../rightCol.html"; // get from parent dir 
include "../../rightCol.html"; // get from parent parent dir 

要包含来自根目录的文件,你可能要使用前缀您的路径:

$_SERVER['DOCUMENT_ROOT']; 
+0

这段代码将会出现在几个不同的目录和子目录中的不同页面上......'/ includes/news/rightCol.html'总是会导航到PHP中的相同位置? – Squirkle 2010-07-30 13:31:31

+0

allow_url_include也必须打开。但它肯定是一个安全风险。并且包含具有变量名称的本地文件也可能是危险的。 – Krab 2010-07-30 13:32:17

+0

@Squirkle:它取决于你当前脚本的路径。您可以使用'../'指定最高级目录或使用绝对路径'$ _SERVER ['DOCUMENT_ROOT']。 /includes/news/rightCol.html;'。 – Sarfraz 2010-07-30 13:35:56

0

由于安全考虑,您不想包含http://资源。而不是你需要通过file_get_contents得到它的内容,但如果这是一个简单的页面元素,你可以使用包含没有完整的网址。

+0

如果我所在的页面是'http:// localhost:8888/news /'如何遍历'/ includes'?我明白,PHP不承认'/'回到网站根与HTML一样...... – Squirkle 2010-07-30 13:30:04

+0

fabrik:是的,你可以。见http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Krab 2010-07-30 13:30:07

+0

这是一个惊人的安全漏洞,正确:) – fabrik 2010-07-30 13:38:31