当前以下代码成功打开secure.html
:
include("../../secure.html");
但是,下面显示了一个404错误:
include("../../secure");
需要注意的是,secure.html
文件和/secure
目录不在public_html
中,而在root
…
我做错了什么?
更新:我想显示目录中的所有文件(如apache,如果没有索引文件…)
关于"include"的手册http://php.net/manual/en/function.include.php声明:
" include语句包含并计算指定的文件".
没有提到文件夹
在"安全"include("../../secure/");
的末尾添加/
,这将在技术上尝试查找索引文件,仍然不会工作,因为PHP的include()
需要一个特定的文件名。
但是,如果您想包含所有文件,例如扩展名为.html
的文件,您可以使用:
foreach (glob("../../*.html") as $filename)
{
include $filename;
}
为了包含给定文件夹中的所有文件,你可能会这样做:
foreach (glob("../../folder/*") as $filename)
{
include $filename;
}
或者使用scandir()
:并从堆栈上的这个答案中提取https://stackoverflow.com/a/2692368/
foreach (scandir(dirname(__FILE__)) as $filename) {
$path = dirname(__FILE__) . '/' . $filename;
if (is_file($path)) {
require $path;
}
}
我不知道你想要使用include("../../secure");
的最终目标是什么,如果它包含该文件夹中的所有文件,或者索引文件。
引用:
- http://php.net/manual/en/function.glob.php
- http://php.net/manual/en/function.scandir.php
在您的系统上设置错误报告以捕获和显示应该会抛出类似的内容:
警告:include(/home/user/htdocs/folder): failed to open stream:在/home/user/htdocs/other_folder/file.php中没有这样的文件或目录
- http://php.net/manual/en/function.error-reporting.php
脚注:
您可能还需要使用完整的系统路径。
即:
/var/user/home/htdocs/folder/file.xxx
在我的根目录下测试一个文件夹/文件证明是成功的:(在Linux机器上)
include("../../folder_in_root/index.html");
但不
include("../../folder_in_root");
和
include("../../folder_in_root/");
你也可以使用和定义一个常量(同样,如果你想包含那个文件夹的索引文件)
define("TEST", "../../folder_in_root/index.html");
include(TEST); // do not quote this
注意define("TEST", "../../folder_in_root/");
将不工作;必须是文件名
- http://php.net/manual/en/function.define.php
我认为这里的问题是,在第二行,纠正我,如果我错了,你试图包括整个目录(即。它的所有文件)。然而,这不是PHP所理解的。它所理解的是,你试图包括的文件是两个目录回命名为"安全",只是"安全",没有扩展,我假设没有这样的文件两个目录回来,这就是为什么你得到一个404。请注意,文件不一定要有扩展名,因此您可以包含一个没有扩展名的文件。如果你想要的是包含名为"安全"的目录内的所有文件,我认为这将是有帮助的检查这个线程:如何包括()所有的PHP文件从一个目录?
如果你想做的不是我描述的,请提供更多的信息!希望有帮助!