无法包含/需要PHP文件
我正在制作一个简单的应用程序来管理员工的任务,称为WorkerManager。起初,我有以下结构:无法包含/需要PHP文件,php,netbeans,path,include,Php,Netbeans,Path,Include,我正在制作一个简单的应用程序来管理员工的任务,称为WorkerManager。起初,我有以下结构: workermanager |-index.php | |-user | |-dao | | |-UserDAO.php | |-model | |-view |-task | |-dao | |-model | |-view |-department | |-dao | |-model | |-view ... shoppinglist |-index
workermanager
|-index.php
|
|-user
| |-dao
| | |-UserDAO.php
| |-model
| |-view
|-task
| |-dao
| |-model
| |-view
|-department
| |-dao
| |-model
| |-view
...
shoppinglist
|-index.php
|...
|-list
| |-ShoppingList.php
| |-ShoppingListController.php
| |-create-new-list.php
| |-edit-list.php
|...
...
因此,UserDAO.php位于workermanager/user/dao/
中,我使用require\u 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
(或任何其他更改位置的文件)。函数文件\u存在('./dao/user/UserDAO.php')
返回false。当我使用$\u SERVER['DOCUMENT\u ROOT']./workermanager/dao/user/UserDAO.php'
回显文件位置时,它给出了正确的路径,但当我尝试包含或要求
这样做时,它不起作用。我曾试图删除这个项目,并与现有的来源,使一个新的一个,但它仍然没有工作
你知道我能做什么吗
下次当我决定更改树结构时,我应该在NetBeans之外进行吗?有没有办法让NetBeans“扫描”项目结构并“学习”新路径
我使用的是NetBeans 8.1、Apache 2.4.18、Ubuntu 16.04
谢谢
编辑:
有点离题。。。在这样的项目中,如果每个实体都有一个“模型”、一个“DAO”和一个或多个“视图”文件,您喜欢什么结构?关于项目树形状是否有任何“最佳实践”
编辑2:
我刚做了一个新项目,结构如下:
workermanager
|-index.php
|
|-user
| |-dao
| | |-UserDAO.php
| |-model
| |-view
|-task
| |-dao
| |-model
| |-view
|-department
| |-dao
| |-model
| |-view
...
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'
,以及$\u服务器['DOCUMENT\u ROOT']./shoppinglist/list/ShoppingListController.php'
,但仍然一无所获。有人能告诉我发生了什么吗?可能Apache缓存了您的index.php文件,但仍然使用旧路径。你应该检查一下
Netbeans只是一个更改文件的IDE。Netbeans在这里不可能是问题,您也可以使用记事本来更改这些路径,从项目的角度来看也是一样的。我终于找到了解决方案
在每个include
或require
中,我都以'./'
开始了路径。我以为它是我网站的根目录,但它是当前文件夹。因此,在index.php
中使用'./list/ShoppingListController.php'
是可以的,但不应该在编辑list.php
中使用它,它与ShoppingListController.php
位于同一文件夹中
解决方案是在每个include
或require
的开头使用dirname(\uuuu文件)
,然后连接路径的其余部分
例如,在index.php
中,我有:
require_once dirname(__文件)'/list/ShoppingListController.php'代码>
…在edit list.php中时,我有:
require dirname(_文件__)。'/ShoppingListController.php'代码>
在ShoppingListController.php
中,我需要包含几个文件,因此我有:
require_once dirname(__FILE__).'/../db/DBConnection.php';
require_once dirname(__FILE__).'/ShoppingList.php';
require_once dirname(__FILE__).'/../article/Article.php';
这解决了我的问题,现在一切正常:)如何清除缓存?我检查了/var/cache/apache2/mod_cache_disk,它是空的。还有别的地方可以看吗?我已经在谷歌上搜索了几个小时,但我找不到如何清理缓存。。。