所以也许我没有得到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时也遇到了同样的问题。必须有一些东西我只是搞砸了。
答案 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文件的目录。这正是我想要的。