php`require()`包含另一个`require()的文件`

php`require()`包含另一个`require()的文件`,php,Php,好的,问题是: /dbh/dbh.php->我的数据库连接处理程序。 /shared/header.php->我想在大多数页面中包含的我的标题。 /index.php->我的主页 /src/home/home.php->登录后的主页 您有上面的项目结构,下面是我的代码: 这就是我在header.php中需要dbh.php的方式: 然后,在index.php内部: 在home.php中: 当我在index.php中工作时,代码可以正常工作,但每当我尝试运行home.php时,就会出现以下错误: W

好的,问题是:

/dbh/dbh.php->我的数据库连接处理程序。 /shared/header.php->我想在大多数页面中包含的我的标题。 /index.php->我的主页 /src/home/home.php->登录后的主页 您有上面的项目结构,下面是我的代码:

这就是我在header.php中需要dbh.php的方式:

然后,在index.php内部:

在home.php中:

当我在index.php中工作时,代码可以正常工作,但每当我尝试运行home.php时,就会出现以下错误:

Warning: require(dbh/dbh.php): failed to open stream: No such file or directory in /opt/lampp/htdocs/shared/header.php on line 4

Fatal error: require(): Failed opening required 'dbh/dbh.php' (include_path='.:/opt/lampp/lib/php') in /opt/lampp/htdocs/shared/header.php on line 4
我意识到这是由于每个文件的相对要求路径以及它是如何工作的,但我不确定如何使用一些静态路径来要求文件。我试着做了一些研究,但我不知道\uuuuu DIR\uuuuuuu和\uuuuu FILE\uuuuuu是如何工作的,也不确定在这种情况下它们是否会工作。

在requires前面加上\uuuu DIR\uuuuuuuuuu可以提供与相应脚本所在目录相关的路径,如下所示:

// Was: require('dbh/dbh.php');
require(__DIR__ . '/../dbh/dbh.php');

// Was: require 'shared/header.php';
require(__DIR__ . '/shared/header.php');

// Was: require '../../shared/header.php';
require(__DIR__ . '/../../shared/header.php');
在requires前面加上_DIR _;可以提供相对于相应脚本所在目录的路径,如下所示:

// Was: require('dbh/dbh.php');
require(__DIR__ . '/../dbh/dbh.php');

// Was: require 'shared/header.php';
require(__DIR__ . '/shared/header.php');

// Was: require '../../shared/header.php';
require(__DIR__ . '/../../shared/header.php');
__DIR_u;指的是当前目录。所以在/shared/header.php中,_DIR__是/shared$_服务器['DOCUMENT\u ROOT']是指您请求的根文档,如/home/user/public\u html或/var/www/html/mysite.com/。因此,您可以使用require$\u SERVER['DOCUMENT\u ROOT']./dbh/dbh.php'

不过,我会选择一种更可重复使用的方法

在/setup.php文件中,可以使用如下常量:

定义“HEADER\u PATH”、“DIR\uu.'/shared/HEADER.php”; 定义'DBH_PATH',_DIR__.'/DBH/DBH.php'; //还有你需要的其他路径 它们的用法如下:require DBH_PATH

我喜欢的另一种方法是使用静态属性的类。 我们会说它位于/MyServer.php,因此可以随时包含在require$_SERVER['DOCUMENT_ROOT']./MyServer.php'中

类MyServer{ 静态公共$dbh_path=uu DIR_u.'/dbh/dbh.php'; 静态公共$header_path=_DIR__.'/shared/header.php'; } 然后,只要每个请求中都包含/MyServer.php,就可以从任何文件调用require MyServer::$dbh_path&获取完整路径

如果您继续被_udir或_; FILE所迷惑。只需在脚本中加入以下内容并运行脚本:

变量转储目录; 变量转储文件; 出口 应该有助于您了解它。

\p>\uuuuu DIR\uuuuuuu指的是当前目录。所以在/shared/header.php中,_DIR__是/shared$_服务器['DOCUMENT\u ROOT']是指您请求的根文档,如/home/user/public\u html或/var/www/html/mysite.com/。因此,您可以使用require$\u SERVER['DOCUMENT\u ROOT']./dbh/dbh.php'

不过,我会选择一种更可重复使用的方法

在/setup.php文件中,可以使用如下常量:

定义“HEADER\u PATH”、“DIR\uu.'/shared/HEADER.php”; 定义'DBH_PATH',_DIR__.'/DBH/DBH.php'; //还有你需要的其他路径 它们的用法如下:require DBH_PATH

我喜欢的另一种方法是使用静态属性的类。 我们会说它位于/MyServer.php,因此可以随时包含在require$_SERVER['DOCUMENT_ROOT']./MyServer.php'中

类MyServer{ 静态公共$dbh_path=uu DIR_u.'/dbh/dbh.php'; 静态公共$header_path=_DIR__.'/shared/header.php'; } 然后,只要每个请求中都包含/MyServer.php,就可以从任何文件调用require MyServer::$dbh_path&获取完整路径

如果您继续被_udir或_; FILE所迷惑。只需在脚本中加入以下内容并运行脚本:

变量转储目录; 变量转储文件; 出口
应该有助于让您了解它。

在/shared/header.php中,OP需要使用_DIR__./../dbh/dbh。php@Reed对很好的捕获,已修复。在/shared/header.php中,OP需要使用_DIR__./../dbh/dbh。php@Reed对好的,修正了。顺便说一句,如果你要包含一些文件,其中一些文件包含同一个文件,那么你可能想使用require_一次。@RoAchterberg你的意思是我应该在header.php中使用require_一次,对吗?是的,但请参阅我的答案,了解如何在你描述的每种情况下使用require_一次。@RoAchterberg是的,这很有魅力。非常感谢。非常欢迎。另一方面,如果您要包括一些包含同一文件的文件,那么您可能希望使用require_一次。@RoAchterberg您的意思是我应该在header.php中使用require_一次,对吗?是的,但请参阅我的答案,了解如何在您描述的每种情况下使用require_一次。@RoAchterberg是的,这很有魅力。非常感谢。非常欢迎。您的解决方案看起来很棒,但因为我是新手,所以我采用了@Ro Achterberg建议的方法,对于像我这样的初学者来说,这种方法更容易实现。不管怎样,谢谢你的帮助!现在,当我进一步了解php时,这个解决方案看起来非常吸引人。再次感谢大家!很高兴我能帮上忙:你的解决方案看起来很好,但既然我
这是新的,我采用了@Ro Achterberg建议的方法,对于像我这样的初学者来说,这种方法更容易实现。不管怎样,谢谢你的帮助!现在,当我进一步了解php时,这个解决方案看起来非常吸引人。再次感谢大家!很高兴我能帮忙:
Warning: require(dbh/dbh.php): failed to open stream: No such file or directory in /opt/lampp/htdocs/shared/header.php on line 4

Fatal error: require(): Failed opening required 'dbh/dbh.php' (include_path='.:/opt/lampp/lib/php') in /opt/lampp/htdocs/shared/header.php on line 4
// Was: require('dbh/dbh.php');
require(__DIR__ . '/../dbh/dbh.php');

// Was: require 'shared/header.php';
require(__DIR__ . '/shared/header.php');

// Was: require '../../shared/header.php';
require(__DIR__ . '/../../shared/header.php');