【问题标题】:Why does file_exists always return false?为什么 file_exists 总是返回 false?
【发布时间】:2013-03-23 14:05:45
【问题描述】:

当使用file_exists()时,它总是返回false。但该文件确实存在并且可以使用require 加载。这是我的代码:

// Creating dependency lists.
$data_dependency = array("mysql", "oracle", "postgresql", "sqlite", "access");

// Calling the dependecny files.
foreach ($data_dependency as $list) {
    $list = "class.data.$list.php";
    _system::debug("Calling required class $list ...");

    if (file_exists($list)) {
        include($list);
        _system::debug("Calling $list was successfull.");
    } else {
        _system::debug("Calling $list was failed. Now we close the system load.");
        exit("Calling $list was failed. Now we close the system load.");
    }
}

当我加载页面时,页面总是exit()。我认为原因是file_exists() 函数总是返回false。

【问题讨论】:

  • 尝试使用绝对路径。
  • 你说文件单数存在,但你正在寻找 5,如果任何一个不存在它就会退出
  • @Calum - 我尝试使用绝对路径,但仍然是错误的。
  • @Crisp - 但所有文件都存在于我的文件夹中。如果我不检查它并直接包含它,则所有文件都已正确加载。
  • 您是否检查了调试输出以查看它失败的原因?另外,您确定文件存在于 当前目录包含路径 中并且您有权访问它们吗?如果您从另一个目录包含此代码,则 当前目录 不是包含文件所在的目录

标签: php file-io


【解决方案1】:

此函数返回FALSE 用于由于安全模式限制而无法访问的文件。

在文件路径中使用 $_SERVER['DOCUMENT_ROOT'] 变量。

【讨论】:

    【解决方案2】:

    尝试使用相对路径ex : $_SERVER['DOCUMENT_ROOT'] 而不是绝对路径

    【讨论】:

      【解决方案3】:

      关于 file_exists() Php.net 声明

      对于由于安全模式限制而无法访问的文件,此函数返回 FALSE。但是,如果这些文件位于 safe_mode_include_dir 中,仍然可以包含这些文件。

      这可以解释包含有效而存在检查无效的事实。

      http://www.php.net/manual/en/function.file-exists.php

      【讨论】:

      • 我认为 safe_mode 是 PHP 5.4.0 中的 removed。我正在使用 PHP 5.4.7。
      【解决方案4】:

      您的 foreach 循环中的$list 可能设置不正确。你试过$list="class.data.".$list.".php"; 吗?

      【讨论】:

      • 所以你知道,PHP 用双引号计算变量。所以他$list的构造是对的
      • $list 构造是正确的。当我回显$list 时,输出将是“class.data.mysql.php”。
      猜你喜欢
      • 2012-02-23
      • 2016-09-02
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多