无法包含/要求 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 Projects 窗格中拖放。从那时起,我无法包含UserDAO.php(或任何其他更改位置的文件(。函数file_exists('./dao/user/UserDAO.php')返回 false。当我使用 $_SERVER['DOCUMENT_ROOT'].'/workermanager/dao/user/UserDAO.php' echo文件位置时,它会给出正确的路径,但是当我尝试以这种方式includerequire它时,它不起作用。我试图删除这个项目并使用现有资源制作一个新项目,但它仍然不起作用。

任何想法我能做什么?

下次当我决定更改树结构时,我是否应该在 NetBeans 外部执行此操作?有没有办法让 NetBeans "扫描"项目结构并"学习"新路径?

我正在使用NetBeans 8.1,Apache 2.4.18,Ubuntu 16.04

谢谢。

编辑:有点跑题...在这样的项目中,如果我为每个实体有一个"模型"、一个"DAO"和一个或多个"视图"文件,你更喜欢什么结构?是否有关于项目树形状的"最佳实践"?

编辑 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我有完全相同的行,它不起作用。我也试图只要求/包含'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位于同一文件夹中。

解决方案是在每个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';

这解决了我的问题,现在一切都完美:)