我的项目中有以下文件结构:
+ server
+ api
+ product
- get.php
+ database
- product.php
+ model
- product.php
+ service
- product.php
+ utilities
- controller.php
- database.php
然后在我的 server/api/product/get.php
中,我有以下几行:
require_once("../../service/product.php");
require_once("../../utilities/controller.php");
我相信这是正确加载服务,因为当我使用 Insomnia 访问端点时,我在 server/api/service/product.php
文件中收到此错误:
警告:require_once(../model/product.php):无法打开流:否 C:\full path removed\server\service\product.php 中第 2 行的此类文件或目录
致命错误:require_once():需要打开失败 '../model/product.php' (include_path='C:\xampp\php\PEAR')
在我的 server/service/product.php
文件中,我有以下内容:
require_once("../model/product.php");
require_once("../database/product.php");
它在第一个 require_once
上失败了。
所以我对你们的问题是为什么我的控制器层中的相对路径可以工作,而服务层中的相对路径却失败了?
答案 0 :(得分:1)
您可以根据常量给出的文档使用 __DIR__
magic constant 作为替代:'文件的目录。如果在包含中使用,则返回包含文件的目录'。这通过相对路径降低了出错的可能性。
示例:
require_once(__DIR__ . "/../../service/product.php");
答案 1 :(得分:0)
在没有 __DIR__ 的情况下使用 include 和 require never。以 开头的相对路径。或 .. 以当前目录为基础。当前工作目录取决于各种设置。 __DIR__ 始终是文件本身所在的目录。
对于包括 服务器/服务/product.php 从文件 服务器/api/产品/get.php 你可以这样做:
require_once __DIR__."/../../service/product.php";