PHP 文件确实存在但不能 require_once()

Posted

技术标签:

【中文标题】PHP 文件确实存在但不能 require_once()【英文标题】:PHP file does exist but can't require_once() 【发布时间】:2014-06-20 03:42:54 【问题描述】:

所以最近我决定将位于每个页面顶部的 php 代码移动到它自己的 php 文件中。在尝试 require_once() 之前我做的第一件事是确保 php 可以读取文件,所以我做到了

<?php
    if(file_exists('Backend.php')) 
        echo 'File does exist';
    
?>

它回显出该文件完美地存在。现在每当我尝试:

<?php
    require('Backend.php') or die('Could not load Backend.');
?>

我得到错误:

 'Warning: require(1): failed to open stream: No such file or directory in
  C:\Users\Owner\Dropbox\PotateOS\index.php on line 2

  Fatal error: require(): Failed opening required '1'(include_path='.;C:\xampp\php\PEAR;C:\Users\Owner\Dropbox\PotateOS') in C:\Users\Owner\Dropbox\PotateOS\index.php on line 2

注意我正在使用(XAMPP)。我尝试过的事情:

将文件的路径添加到 php.ini 的 include_path 中

检查文件名以确保它没有任何奇怪的字符

使用这个作为文件路径:

<?php
    require($_SERVER['DOCUMENT_ROOT'] . 'Backend.php') or die('Could not load');
?>

(注意我尝试访问后端的页面和后端都在根目录中)

【问题讨论】:

尝试将/ backend.php放在$_SERVER['DOCUMENT_ROOT']之后 如果找不到文件,它会自动失败,所以不需要或死。 把 /backend.php 工作了谢谢卢卡斯。然后我取出了骰子。 【参考方案1】:

问题在于require 不是函数而是语言结构;因此,它会将您的代码运行为:

require('Backend.php' or die('Could not load Backend.'));

表达式'Backend.php' or die('Could not load Backend.') 产生bool(true) 并转换成一个字符串,它变成string(1) "1" 并将尝试加载。

您可以简单地将代码简化为:

require 'Backend.php';

如果无论如何都找不到文件,它将引发错误并停止脚本。正如 cmets 中提到的,重要的是要意识到文档根目录没有尾部斜杠。因此,您必须自己添加:

require $_SERVER['DOCUMENT_ROOT'] . '/Backend.php';

【讨论】:

完美解释! ;) 我从文件中复制时输入错误,实际行是:“require('Backend.php') or die('Could not load Backend.');”不过还是谢谢 @MrRevolutionz 我的回答并没有断言你打错了,因为你没有;还有什么不清楚的吗?【参考方案2】:

在需要之前添加:

echo getcwd();

然后检查Backend.php是否与此函数的结果在同一目录中

【讨论】:

以上是关于PHP 文件确实存在但不能 require_once()的主要内容,如果未能解决你的问题,请参考以下文章

php源码分析 require_once 绕过不能重复包含文件的限制

PHP file_exists 返回 false 但文件确实存在

PHP 是不是需要、require_once 或包含在页面加载时自动读取文件?

PHP:require_once 用于多个文件但出现乱序

为啥 PHP include_once 会成功但 require_once 在同一个文件上会失败?

PHP/HTML/CSS:IE 在使用 require_once() 时表现得很奇怪