2024/8/1 13:32:45 ![]()
为什么一定要通过http://localhost/index.php/users访问才能成功?我希望是通过http://localhost/api/users.php来访问,该如何修改?index.php在根目录下,users.php在根目录的api目录下
2024/8/1 13:32:45 
如果你希望直接通过 `http://localhost/api/users.php` 来访问,那么你需要确保在 `users.php` 文件中能够正确初始化数据库连接。可以通过在 `users.php` 中直接包含数据库连接的初始化代码来实现。
以下是修改后的 `users.php`:
```php
require_once 'database.php'; // 确保路径正确,如果 users.php 在 api 目录下,而 database.php 在根目录下
// Instantiate database$database = new Database();$db = $database->getConnection();
if ($_SERVER['REQUEST_METHOD'] == 'POST') { // 处理 POST 请求} elseif ($_SERVER['REQUEST_METHOD'] == 'GET') { $query = "SELECT * FROM users"; $stmt = $db->prepare($query); $stmt->execute(); $users = $stmt->fetchAll(PDO::FETCH_ASSOC); echo json_encode($users);}```
请确保 `require_once 'database.php';` 的路径正确。如果 `users.php` 在 `api` 目录下,而 `database.php` 在根目录下,那么相对路径是正确的。另外,确保 `database.php` 文件的路径和名称都是正确的。
### 文件目录结构确保你的文件目录结构如下:
```project/├── api/│ └── users.php├── database.php└── index.php```
如果目录结构没有问题,那么访问 `http://localhost/api/users.php` 应该能够正确初始化数据库连接,并且能够正常处理请求。
### 进一步改进如果你有多个 API 文件(如 `users.php`、`classes.php` 等)都需要使用数据库连接,为了避免重复代码,可以创建一个公共的初始化文件,比如 `init.php`,然后在每个 API 文件中包含它。
以下是 `init.php` 的示例:
```phprequire_once '../database.php'; // 根据你实际的目录结构调整路径
// Instantiate database$database = new Database();$db = $database->getConnection();```
然后在 `users.php` 中包含这个初始化文件:
```phprequire_once 'init.php'; // 确保路径正确
if ($_SERVER['REQUEST_METHOD'] == 'POST') { // 处理 POST 请求} elseif ($_SERVER['REQUEST_METHOD'] == 'GET') { $query = "SELECT * FROM users"; $stmt = $db->prepare($query); $stmt->execute(); $users = $stmt->fetchAll(PDO::FETCH_ASSOC); echo json_encode($users);}```
通过这种方式,你可以方便地管理和初始化数据库连接,并且在多个 API 文件中共享相同的连接设置。