【问题标题】:PHP How to deal with include files and relative paths in my projectPHP如何处理我的项目中的包含文件和相对路径
【发布时间】:2016-10-15 16:24:38
【问题描述】:

我正在开发一个 PHP 网站,在 Mac OS 中使用 Eclipse。

我想知道处理包含语句的正确方法是什么。

我有一个 php 文件,它是我的主要“lib”脚本。该文件通过包含命令访问其他文件。问题是如何引用这个子文件,因为 include 中的相对路径是基于入口点脚本,而不是当前脚本。

假设我有一个 mainlib.php 文件,它可以访问一个 sublib.php 文件。应该是这样的:

项目根: [库] 主库文件 子库文件 [子目录] entryPointB.php 入口点A.php

我想把包含“sublib.php”的语句放在mainlib.php 中,所以我只能包含mainlib.php,而不是每次需要时都包含。 (在这个示例中只有两个文件,但在我的实际项目中会有更多的文件。

假设我的 mainlib.php 文件包含以下内容:

<?php include "libs/sublib.php; ?>

从EntryPointA.php调用mainlib.php时有效,但从EntryPointB调用时会失败。

如果 mainlib.php 包含:

<?php include "../libs/sublib.php; ?>

它可以在 EntryPointB.php 上工作,但在 entrypointA.php 上会失败。

我该如何解决这个问题?

我尝试或考虑过的一些可能性:

  • 使用绝对路径 - 这不是一个好的解决方案,因为我每次将文件上传到生产环境时都必须更改文件。
  • 在 $_SERVER['DOCUMENT_ROOT'] 前添加路径 - 在 Mac 上它返回 /Library/WebServer/Documents,但我的站点位于 UserFolder/Sites/MySiteName。
  • __DIR__ 变量获取目录 - 不起作用,因为它返回入口点文件,而不是项目根目录。
  • 全局配置 - 我考虑将硬编码的根路径放在全局变量中。这个想法是在全局脚本中定义这个变量,在生产中我只需要更新这个脚本。但它仍然是同样的问题,我将如何引用这个脚本而不遇到路径问题?

【问题讨论】:

  • 使用__DIR__dirname() 从相对路径构建绝对路径。
  • 这就是为什么会有诸如环境配置(还有 vagrant / docker 等)这样的概念,以便您可以处理这些差异(或者在虚拟化的情况下,只是没有它们)。
  • 你检查过这个&lt;?php include "/libs/sublib.php; ?&gt; 吗?
  • @RisulIslam 恐怕会成功的可能性为零。 (尤其是因为语法错误。)
  • @axiac __DIR__ 的问题在于它会返回入口点文件,而不是项目根目录。我实际上已将该选项放在我的问题中,但 SO 格式将其更改为 DIR,我将更新问题以正确显示。

标签: php macos apache


【解决方案1】:

我解决了这个问题。不知道这是否是最好的方法,但它解决了我。如果有人有同样的问题,我会留在这里。

我创建了一个名为 config.php 的文件,内容如下:

<?php define("ROOT_PATH", "/Path/to/My/Project/"); ?>

那么,我的mainLib.php我可以有这句话:

include "config.php";

它会在入口点脚本所在的任何地方工作,因为它总是指向当前文件的同一个目录,而不是入口点。然后我只需将 ROOT_PATH 添加到其他包含:

inclue ROOT_PATH."/subdir/file.php";

【讨论】:

  • cmets中有很多有用的提示比这更好。
猜你喜欢
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 2014-11-15
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多