【问题标题】:require() fails even though file_exists() claims file is there即使有 file_exists() 声明文件,require() 也会失败
【发布时间】:2012-02-25 22:18:09
【问题描述】:

这是我的代码:

if (file_exists('config.php')) {
    require('config.php'); // This is line 38
}

以某种方式产生错误:

警告:require(config.php) [function.require]:打开流失败:第 38 行的 /path/name/file.php 中没有这样的文件或目录

这怎么可能?

更新:以下确实工作:

if (file_exists(getcwd(). '/config.php')) {
     require(getcwd(). '/config.php');
}

【问题讨论】:

  • 很奇怪。您可以在这些行之前尝试clearstatcache() 吗?
  • 似乎没有任何影响。请参阅我更新的问题。
  • is_readable() 怎么样? file_exists 在这种情况下并不是特别有用,因为您需要该文件实际上可以被您的脚本读取。把它想象成“银行金库里有钱吗?”之间的区别。和“我可以拿一些金库里的钱吗?”
  • 您在包含路径中缺少当前目录。

标签: php include


【解决方案1】:

尝试绝对路径。使用dirname(__FILE__)

require(dirname(__FILE__) . '/config.php');

【讨论】:

  • 或只是require( __DIR__ . '/config.php' );
  • @Igor __DIR__ 在 2012 年不是很可用
  • 是的,我刚刚添加了它,因为今天的答案对我仍然有用。
【解决方案2】:

PHP includerequire 的操作方式相同,并使用包含路径 (include)。因此将使用此路径来查找文件,如果您没有正确设置它,它将不会在当前目录中查找。

使用get include path 找出这个值。

【讨论】:

    【解决方案3】:

    尝试忽略包含路径:

    if (file_exists('config.php')) {
        require('./config.php'); // This is line 38
    }
    

    如果它有效,你就错过了。目录到包含路径中,您必须选择包含它或使用相对路径文件名

    您可以使用 php 配置指令更改您的 include_path(如果您可以更改 php 配置文件)或使用 get_include_path()set_include_path()文件/项目库

    例如:set_include_path('.'. PATH_SEPARATOR . get_include_path()); 在您的第一行 php 中(或在通用配置文件中);

    来源:

    【讨论】:

    • 感谢您和 Ed Heal 的解释。这就是正在发生的事情。
    猜你喜欢
    • 2015-03-12
    • 2012-05-13
    • 2021-05-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2012-03-01
    相关资源
    最近更新 更多