PHP警告:无法打开流:没有这样的文件或目录,文件路径错误

Posted

技术标签:

【中文标题】PHP警告:无法打开流:没有这样的文件或目录,文件路径错误【英文标题】:PHP Warning: failed to open stream: No such file or directory, File Path Errors 【发布时间】:2017-10-24 03:03:35 【问题描述】:

我无法理解 php 选择如何编译或在文件中包含文件的工作原理。

这是我的文件结构:

我需要在head.php 中添加secrets.php。 我需要在index.php 中使用head.php

head.php

require "../environment/secrets.php";

index.php

require "php/head.php";

我得到一个错误:

警告:require_once(../environment/secrets.php):打开失败 流:/home/ubuntu/workspace/Cally 中没有这样的文件或目录 Dai/php/head.php 在第 2 行调用堆栈:0.0002 234760 1. main() /home/ubuntu/workspace/Cally Dai/index.php:0 0.0007 236632 2. require_once('/home/ubuntu/workspace/Cally Dai/php/head.php') /home/ubuntu/workspace/Cally Dai/index.php:5 致命错误: require_once():打开失败需要'../environment/secrets.php' (include_path='.:/usr/share/php:/usr/share/pear') 在 /home/ubuntu/workspace/Cally Dai/php/head.php 在第 2 行调用堆栈: 0.0002 234760 1. main() /home/ubuntu/workspace/Cally Dai/index.php:0 0.0007 236632 2. require_once('/home/ubuntu/workspace/Cally Dai/php/head.php') /home /ubuntu/workspace/Cally Dai/index.php:5

我哪里错了?

【问题讨论】:

这可能是一个长镜头,但你是否已经尝试过设置 require "../environment/secrets.php";相对于 index.php?值得一试。需要“环境/secrets.php”; @TimothyBomer 这使根目录中的所有内容都可以正常工作,但其他文件(例如项目文件夹中的文件)现在开始失败。相对于请求所需文件的文件,似乎需要该文件……但这不应该是正确的行为吗? 尝试改变:require "../environment/secrets.php";要求 (realpath(dirname(__FILE__)."/environment/secrets.php")); 【参考方案1】:

据我所知,我觉得路径必须来自ubuntu中的root。试试你的代码,require_once("/home/ubuntu/workspace/Cally Dai/php/head.php")

【讨论】:

【参考方案2】:

当一个 PHP 文件包含另一个 PHP 文件,而该文件本身又包含另一个文件(所有文件都位于不同的目录中)时,使用相对路径来包含它们可能会引发问题。

PHP经常会报找不到第三个文件,但是 为什么?那么答案就在于当在 PHP 中包含文件时 解释器试图在当前工作中找到文件 目录。换句话说,如果您在名为 A 并且您包含在目录 B 中找到的脚本,然后 执行脚本时,相对路径将相对于 A 进行解析 在目录 B 中找到。因此,如果目录 B 中的脚本包含 另一个目录中的另一个文件,路径仍然是 如您所料,相对于 A 而不是相对于 B 计算。这 了解两者之间的区别是非常重要的一点 PHP 和其他语言,如 C/C++。

一种解决方案是使用dirname(__FILE__):

使用dirname(__FILE__)__FILE__ 常量包含完整路径 和使用它的脚本的文件名。函数dirname() 从路径中删除文件名,给我们绝对路径 文件所在的目录,无论它包含哪个脚本。 使用它让我们可以选择使用相对路径,就像我们一样 可以使用任何其他语言,例如 C/C++。我们会给我们所有的前缀 像这样的相对路径:

include(dirname(__FILE__) . "/dir/script_name.php");

来源:http://yagudaev.com/posts/resolving-php-relative-path-problem/

【讨论】:

等于include("./dir/script_name.php");

以上是关于PHP警告:无法打开流:没有这样的文件或目录,文件路径错误的主要内容,如果未能解决你的问题,请参考以下文章

警告:无法打开流:第 17 行的 C:\wamp\www\laravel\bootstrap\autoload.php 中没有这样的文件或目录

警告:require_once(Composer/PHPMailer/vendor/phpmailer/phpmailer/src/autoload.php):无法打开流:没有这样的文件或目录

警告:require_once(Zend / Application.php)[function.require-once]:无法打开流:没有这样的文件或目录

Require_once 无法打开流:没有这样的文件或目录

警告:include_once(../lib/Database.php):打开流失败:没有这样的文件或目录

PHP:警告:包括未能在 Windows 上打开流没有这样的文件或目录 [重复]