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

时间:2017-05-24 00:22:17

标签: php require

我无法理解PHP如何选择编译或文件中包含文件的方式。

这是我的文件结构:enter image description here

我在secrets.php内需要head.php。 我在head.php内需要index.php

head.php

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

的index.php

require "php/head.php";

我收到错误:

  

警告:require_once(../ environment / secrets.php):无法打开   stream:/ home / ubuntu / workspace / Cally中没有这样的文件或目录   第2行的Dai / php / head.php调用堆栈: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')in   / 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

我哪里错了?

2 个答案:

答案 0 :(得分:1)

据我所知,我认为路径必须来自ubuntu的root。尝试使用代码,
require_once(“/ home / ubuntu / workspace / Cally Dai / php / head.php”)

答案 1 :(得分:0)

当一个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/