无法 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
文件位置时,它给出了正确的路径,但是当我尝试 include
或 require
时,它不起作用。我已经尝试删除这个项目并使用现有资源创建一个新项目,但它仍然不起作用。
有什么办法吗?
下次我决定更改树结构时,我应该在 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 不可能是这里的问题,你也可以用记事本来改变这些路径,从项目的角度来看是一样的。
我终于找到了解决办法!
在每个 include
或 require
中,我都从 './'
开始了路径。我以为它是我网站的根目录,但它是当前文件夹。因此,在 index.php
中使用 './list/ShoppingListController.php'
是可以的,但不应该在 edit-list.php
中使用,它与 ShoppingListController.php
.[=26 在同一文件夹中=]
解决方案是在每个 include
或 require
的开头使用 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';
这解决了我的问题,现在一切正常:)
我正在制作一个名为 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
文件位置时,它给出了正确的路径,但是当我尝试 include
或 require
时,它不起作用。我已经尝试删除这个项目并使用现有资源创建一个新项目,但它仍然不起作用。
有什么办法吗?
下次我决定更改树结构时,我应该在 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 不可能是这里的问题,你也可以用记事本来改变这些路径,从项目的角度来看是一样的。
我终于找到了解决办法!
在每个 include
或 require
中,我都从 './'
开始了路径。我以为它是我网站的根目录,但它是当前文件夹。因此,在 index.php
中使用 './list/ShoppingListController.php'
是可以的,但不应该在 edit-list.php
中使用,它与 ShoppingListController.php
.[=26 在同一文件夹中=]
解决方案是在每个 include
或 require
的开头使用 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';
这解决了我的问题,现在一切正常:)