PHP -可以转到文件但不能转到目录


PHP - can go to a file but not directory

当前以下代码成功打开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文件从一个目录?
如果你想做的不是我描述的,请提供更多的信息!希望有帮助!