无法 include/require PHP 文件

Unable to include/require PHP file

我正在制作一个名为 WorkerManager 的简单应用程序来管理员工的任务。起初,我有以下结构:

workermanager
|-index.php
|
|-user
|   |-dao
|   |  |-UserDAO.php
|   |-model
|   |-view
|-task
|   |-dao
|   |-model
|   |-view
|-department
|   |-dao
|   |-model
|   |-view
...

因此,UserDAO.php 位于 workermanager/user/dao/ 中,我使用 require_once './user/dao/UserDAO.php'.

将其包括在内

后来,我决定改变项目的结构,做了这样的事情:

workermanager
|-index.php
|
|-dao
|   |-user
|   |   |-UserDAO.php
|   |-task
|   |-department
|-model
|   |-user
|   |-task
|   |-department
|-view
|   |-user
|   |-task
|   |-department
...

我通过创建文件夹并在 NetBeans 项目窗格中拖放来完成此操作。从那时起,我就无法包含 UserDAO.php(或任何其他更改位置的文件)。函数 file_exists('./dao/user/UserDAO.php') returns 为假。当我使用 $_SERVER['DOCUMENT_ROOT'].'/workermanager/dao/user/UserDAO.php' echo 文件位置时,它给出了正确的路径,但是当我尝试 includerequire 时,它不起作用。我已经尝试删除这个项目并使用现有资源创建一个新项目,但它仍然不起作用。

有什么办法吗?

下次我决定更改树结构时,我应该在 NetBeans 之外进行吗?有什么方法可以使 NetBeans "scan" 成为项目结构并成为 "learn" 新路径?

我正在使用 NetBeans 8.1、Apache 2.4.18、Ubuntu16.04

谢谢。

编辑: 有点跑题了……在这样的项目中,如果我每个实体有一个"model"、一个"DAO"和一个或多个"view"文件,你喜欢什么结构?有没有关于项目树形的"best practices"?

编辑 2: 我刚刚创建了一个具有以下结构的新项目:

shoppinglist
|-index.php
|...
|-list
|   |-ShoppingList.php
|   |-ShoppingListController.php
|   |-create-new-list.php
|   |-edit-list.php
|...
...

index.php 中我有 require_once './list/ShoppingListController.php'; 并且它工作得很好。但是在 list/edit-list.php 中,我有完全相同的行,但它不起作用。我也试过 require/include 只有 'ShoppingListController.php',以及 $_SERVER['DOCUMENT_ROOT'].'/shoppinglist/list/ShoppingListController.php',但仍然没有。谁能告诉我这是怎么回事???

Apache 可能缓存了您的 index.php 文件,并且仍然使用旧路径。你应该检查一下。

Netbeans 只是一个可以更改文件的 IDE。 Netbeans 不可能是这里的问题,你也可以用记事本来改变这些路径,从项目的角度来看是一样的。

我终于找到了解决办法!

在每个 includerequire 中,我都从 './' 开始了路径。我以为它是我网站的根目录,但它是当前文件夹。因此,在 index.php 中使用 './list/ShoppingListController.php' 是可以的,但不应该在 edit-list.php 中使用,它与 ShoppingListController.php.[=26 在同一文件夹中=]

解决方案是在每个 includerequire 的开头使用 dirname(__FILE__),然后连接路径的其余部分。

例如,在 index.php 我有:

require_once dirname(__FILE__).'/list/ShoppingListController.php';

...在 edit-list.php 我有:

require dirname(__FILE__).'/ShoppingListController.php';

ShoppingListController.php中我需要包含几个文件,所以我有:

require_once dirname(__FILE__).'/../db/DBConnection.php';
require_once dirname(__FILE__).'/ShoppingList.php';
require_once dirname(__FILE__).'/../article/Article.php';

这解决了我的问题,现在一切正常:)