包含的PHP相对路径

时间:2015-10-27 01:58:07

标签: php

所以也许我没有得到PHP包含的工作方式。 我有这样的文件结构:

app--|
     |
     -classes-|
              -PHPMyClass.php
     |
     -includes-|
               -PHPMyInclude.php
     |
     -functions-|
                -TestFunctions-|
                               -PHPCallTestOnMyClass.php

所以在PHPMyClass.php中我这样做:

<?php
    require_once '../includes/PHPMyInclude.php';

如果我直接测试我的PHPMyClass.php它工作正常,例如,它正确定位PHPMyInclude.php

但是,如果我尝试在我的PHPCallTestOnMyClass.php脚本中包含PHPMyClass.php,则加载将失败,因为它无法找到&#39; ../ includes / PHPMyInclude.php&#39;因为它似乎试图从app / functions / testfunctions的根目录引用它,这当然不能正确解析。如何在php布局中管理位置?我已经从子文件中取出包含并将包含硬编码到PHPCallTestOnMyClass.php代码中,例如,

<?php
    require_once '../../includes/PHPMyInclude.php';
    require_once '../../classes/PHPMyClass.php';

但这似乎不必要地复杂和不受支持。我错过了什么?

我在尝试使用phpunit时也遇到了同样的问题。必须有一些东西我只是搞砸了。

3 个答案:

答案 0 :(得分:2)

您应该使用文件的完整系统路径来避免此问题:

include("/path/from/root/to/inc/example.php"); 

常见的事情是定义一个变量或常量,用于定义Web文件的根路径。这样,如果它发生了变化(即你改变主机),你只需要在一个地方改变它。

在您的配置文件中:

define('ROOT_PATH', '/path/from/root/to/');

在PHP文件中;

include(ROOT_PATH . "inc/example.php"); 

答案 1 :(得分:0)

PHP相对路径与文件的位置无关,而与被调用文件的位置无关。
所以,如果你有一个index.php文件:

<?
include('includes/db.php');

includes/db.php

<?
include('user.php');

user.php个文件:

<?
echo('root level');

includes/user.php个文件:

<?
echo('includes folder');

如果您访问index.php,则会看到root level,因为来自includes/db.php的包含相对于index.php被调用。

答案 2 :(得分:0)

我选择的解决方案是使用__dir__ Magic constant as described here.
这允许我像我期望的那样使用参考路径...
例如:
require_once(__DIR __。“/ / / enums / WorkUnitType.php”);

将找到WorkUnitTypes.php文件,引用它所需的php文件的目录。这正是我想要的。