我无法理解PHP如何选择编译或文件中包含文件的方式。
我在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
我哪里错了?
答案 0 :(得分:1)
据我所知,我认为路径必须来自ubuntu的root。尝试使用代码,
require_once(“/ home / ubuntu / workspace / Cally Dai / php / head.php”)
答案 1 :(得分:0)
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/