【问题标题】:PHP - can go to a file but not directoryPHP - 可以转到文件但不能转到目录
【发布时间】:2016-01-24 03:28:38
【问题描述】:

目前以下代码成功打开secure.html

include("../../secure.html");

但是,以下显示 404 错误:

include("../../secure");

需要注意的是secure.html文件和/secure目录不在public_html,而是在root...

我做错了什么??

更新:我想显示目录中的所有文件(就像 apache 在没有索引文件时所做的那样......)

【问题讨论】:

  • 从根目录提供绝对路径而不是相对路径。
  • @sandeepsure 你能详细说明一下吗?我是 PHP 新手
  • linux 绝对路径的示例可以这样:'/var/www/html/file.php',对于 windows 'C:\\wamp\www\file.php'。打开命令行,将文件拖入其中,会显示文件的绝对路径。
  • @ArekGorecki 我没有对服务器的物理访问权限...会是root/secure吗?

标签: php redirect directory include


【解决方案1】:

关于“包含”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(): 并从 Stack https://stackoverflow.com/a/2692368/ 上的此答案中提取

foreach (scandir(dirname(__FILE__)) as $filename) {
    $path = dirname(__FILE__) . '/' . $filename;
    if (is_file($path)) {
        require $path;
    }
}

我不知道您的最终目标是什么,如果是要包含该文件夹中的所有文件或索引文件,请使用 include("../../secure");


参考资料:


在您的系统上设置错误报告以捕获和显示应该会给您带来类似于:

警告:include(/home/user/htdocs/folder):无法打开流:第 x 行的 /home/user/htdocs/other_folder/file.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/"); 不起作用;它必须是一个文件名。

参考:

【讨论】:

    【解决方案2】:

    我认为这里的问题是,在第二行中,如果我错了,请纠正我,您尝试包含整个目录(即它的所有文件)。然而,这不是 PHP 所理解的。它所理解的是,您尝试包含两个名为“secure”的目录的文件,只是“secure”,没有扩展名,我假设两个目录后面没有这样的文件,这就是你得到 404 的原因。注意这些文件不需要有扩展名,这就是为什么你可以包含一个没有扩展名的文件。如果您想要包含名为“安全”的目录中的所有文件,我认为检查此线程会有所帮助: How to include() all PHP files from a directory?
    如果您想要做的不是我描述的,请提供更多信息!希望它有所帮助!

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 2012-07-12
      • 2014-05-17
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多