【问题标题】:include, require and relative paths包括、要求和相对路径
【发布时间】:2012-10-17 17:50:21
【问题描述】:

我不知道为什么我总是遇到很多问题。无论如何,这是我想要的文件的路径

/var/www/vhosts/mysite.com/htdocs/Classes/DBConnection.php

这是包含 require 语句的文件的路径

/var/www/vhosts/mysite.com/htdocs/Classes/Forecast/MyFile.php

这是 MyFile.php 中的 require 语句

require_once '../DBConnection.php';

我不断收到“无法打开流”错误。如果我输入绝对路径,它工作正常。有人看到这里的问题吗?

【问题讨论】:

    标签: php relative-path require-once


    【解决方案1】:

    我在另一个问题中有详细回答

    finding a file in php that is 4 directories up

    它解释了 PHP 中相对文件路径的注意事项。使用此处提到的魔法常量和服务器变量来克服相对路径问题。

    【讨论】:

      【解决方案2】:

      使您的路径相对于最初请求的文件。因此,如果您点击 /var/www/vhosts/mysite.com/htdocs/index.php,其中包括 MyFile.php,您的路径将是“Classes/DBConnection.php”

      【讨论】:

      • 不,它是正在提供的文件。我现在正在测试它,所以我将直接访问它而不是通过索引例如
      【解决方案3】:

      是的。该路径是相对于包含类文件 MyFe.php 的文件,而不是类文件本身。我假设 MyFile.php 并不是真正提供的页面,而是一个包含或自动加载的类。

      【讨论】:

      • 不,它是正在提供的文件。我现在正在测试它,所以我将直接访问它,而不是通过索引。
      【解决方案4】:

      如果/Classes/Forecast/MyFile.php 包含在/index.php 中,则相对路径将来自索引文件。要解决此问题,请使用__DIR__。然后 require 将与该文件相对。

      require_once __DIR__.'/../DBConnection.php';

      【讨论】:

      • 是的,这行得通!不过我有点困惑。我的印象是 ../ 会将我从原来的位置移回一个目录。
      • 我应该补充一点,它没有包含在索引中。
      • @Casey 它依赖于当前目录,而 DIR 依赖于当前文件。当前目录可以任意更改,但当前文件目录...不是真的:)
      • @Casey 索引文件只是一个例子。
      • 也许这就是我感到困惑的地方。我要在我的网络浏览器中访问的文件正在显示一个列表。所以在那个文件中是像$list=MyFile::getlist();foreach($list as $li){echo $li;) 这样的静态函数调用类似于 MyFile 路径中的包含现在与正在调用的页面相同吗?
      猜你喜欢
      • 2016-05-22
      • 1970-01-01
      • 2018-08-28
      • 2023-03-26
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 2013-09-05
      • 2014-03-30
      相关资源
      最近更新 更多