【问题标题】:How to require PHP files relatively (at different directory levels)?如何相对要求 PHP 文件(在不同的目录级别)?
【发布时间】:2012-10-08 21:45:56
【问题描述】:

我的文件结构如下:

根目录 目录1 子目录1 文件0.php 文件1.php 目录2 文件2.php 文件3.php 文件4.php

file1.php 需要来自 dir2 的 file3.phpfile4.php,如下所示:

require('../../dir2/file3.php')

file2.php 需要 file1.php 像这样:

require('../dir1/subdir1/file1.php')

但随后file1.php 中的require 无法打开file3.phpfile4.php(可能是由于路径相关性)

但是,file2.php 的原因是什么,我该怎么办,所以 file1.php 正确地需要 file3.phpfile4.php

【问题讨论】:

    标签: php relative-path


    【解决方案1】:

    对于相对路径,您可以直接使用__DIR__ 而不是dirname(__FILE__)(只要您是using PHP 5.3.0 and above):

    require(__DIR__.'/../../dir2/file3.php');
    

    记得在引号内的路径开头添加额外的正斜杠。

    见:

    【讨论】:

      【解决方案2】:

      尝试在路径前添加dirname(__FILE__),例如:

      require(dirname(__FILE__).'/../../dir2/file3.php');
      

      它应该包含从根目录开始的文件

      【讨论】:

      • 如果您使用的是 5.3 或更高版本,则最好使用 DIR,与 dirname(FILE) 相同,但可以节省“成本” dirname() 调用。
      • 谢谢..你能告诉我'/../dir'和'../dir'之间的区别
      • 在这种情况下你使用 /../ 因为 dirname(FILE) 返回一个字符串,如: '/root/dir1/dir2/dir3' ,缺少最后一个 '/ ',所以如果没有它合并 2 个路径,它将变成 '/root/dir1/dir2/dir3../' .
      【解决方案3】:

      一个可行的建议是在您的 php Web 应用程序中避免使用“../../”相对路径。它难以阅读,维护起来也很糟糕。

      1. 你可以证明。这让您很难知道您所指的是什么。

      2. 如果您需要更改应用程序的文件夹级别或其中的一部分。它完全容易出错,并且可能会破坏一些难以调试的东西。

      相反,首选模式是 define 在您的引导文件中为您的主路径添加一些常量,然后使用:

      require(MY_DIR.'/dir1/dir2/file3.php');
      

      从那里移动您的应用就像在一个文件中替换您的 MY_DIR 常量一样简单。

      如果你必须保持相对。至少,construct an absolute path based on a relative path reference,就像接受的回复所建议的那样。但是,请牢记命名 ../ 匿名中间路径的重要性,以消除混淆或歧义。

      【讨论】:

      • 与问题无关
      • @Gershy 这是我书中的一个相关答案,给出了“可行的替代方案”,并给出了“试试这个”的建议。不是每个答案都是直接的。不过,我改进了我的答案。
      【解决方案4】:

      您也可以始终使用$_SERVER['DOCUMENT_ROOT'] 作为有效的起点,而不是诉诸相对路径。只是另一种选择。

      require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
      

      【讨论】:

      • 在 CLI 或 Cron 中不可用。
      【解决方案5】:

      我认为你的 cwd 是 dir2。 试试看:

      require("file3.php");
      require("file4.php");
      

      【讨论】:

        猜你喜欢
        • 2015-01-19
        • 2017-03-03
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-20
        • 2021-04-10
        相关资源
        最近更新 更多