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 或包含在页面加载时自动读取文件?