需要一次失败的相对路径

时间:2021-01-24 06:02:27

标签: php

我的项目中有以下文件结构:

+ 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 上失败了。

所以我对你们的问题是为什么我的控制器层中的相对路径可以工作,而服务层中的相对路径却失败了?

2 个答案:

答案 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";