PHP如何处理项目中的包含文件和相对路径

时间:2016-10-15 16:24:38

标签: php macos apache

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

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

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

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

Project Root:
    [libs]
        mainlib.php
        sublib.php
    [subdir]
        entryPointB.php
    entrypointA.php

我想把include" 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 [&#39; DOCUMENT_ROOT&#39;]以包含路径 - 在Mac上它返回/ Library / WebServer / Documents,但我的网站位于UserFolder / Sites / MySiteName。
  • __DIR__变量获取目录 - 不起作用,因为它返回入口点文件,而不是项目根目录。
  • 全局配置 - 我考虑过将硬编码的根路径放在全局变量中。这个想法是在全局脚本中定义这个变量,在生产中我只需要更新这个脚本。但它仍然是同样的问题,如何在没有路径问题的情况下引用此脚本?

1 个答案:

答案 0 :(得分:0)

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

我创建了一个名为config.php的文件,其中包含以下内容:

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

然后,我的mainLib.php我可以有这句话:

include "config.php";

它将在入口点脚本所在的任何位置工作,因为它始终指向当前文件的相同目录,而不是入口点。然后我只需要将ROOT_PATH添加到其他包含:

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