我一直在使用Android应用程序,现在我想在服务器上拥有一个数据库,我的应用程序将从该数据库中获取数据。
我发现用PHP制作REST API来访问MySQL数据库是最简单的解决方案,但是与php完全无关(第一次接触它)。
当我尝试点击-http://localhost/oneview_alerts/v1/notifications
时,我收到“找不到404页”的信息我的WAMP服务器已启动并正在运行。
我的代码非常小而简单,我在下面引用了URL来寻求帮助: 1)https://www.androidhive.info/2014/01/how-to-create-rest-api-for-android-app-using-php-slim-and-mysql-day-12-2/
我对PHP绝对是陌生的,无法理解从哪里开始调试。它不像我的Java或Python,我可以立即在logcat或调试器中看到错误日志。也许有办法,我只是不知道。
请帮助!
在我的access.log文件中 “ 127.0.0.1--[26 / Dec / 2018:19:15:59 +0000]” GET / oneview_alerts / v1 / notifications HTTP / 1.1“ 404 532”
index.php
<?php
/**
* Created by PhpStorm.
* User: JM00490784
* Date: 12/26/2018
* Time: 6:05 PM
*/
ini_set('display_errors', 'On');
error_reporting(E_ALL);
require_once '../include/DbHandler.php';
require '.././libs/Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
function echoResponse($status_code, $response) {
$app = \Slim\Slim::getInstance();
// Http response code
$app->status($status_code);
// setting response content type to json
$app->contentType('application/json');
echo json_encode($response);
}
$app->run();
$app->get('/notifications', function() {
$response = array();
$db = new DbHandler();
// fetching all user tasks
$result = $db->getAllNotifications();
$response["error"] = false;
$response["notifications"] = array();
// looping through result and preparing tasks array
while ($notification = $result->fetch_assoc()) {
$tmp = array();
$tmp["id"] = $notification["id"];
$tmp["notification_text"] = $notification["notification_text"];
$tmp["hostname"] = $notification["hostname"];
$tmp["service"] = $notification["service"];
$tmp["value"] = $notification["value"];
$tmp["timestamp"] = $notification["timestamp"];
array_push($response["notifications"], $tmp);
}
echoResponse(200, $response);
});
?>
DBHandler.php
<?php
/**
* Class to handle db operations
* This class will have CRUD methods for database tables
*
* @author Jotinder Singh Matta
*/
class DbHandler {
private $conn;
function __construct() {
require_once dirname(__FILE__) . './DbConnect.php';
// opening db connection
$db = new DbConnect();
$this->conn = $db->connect();
}
public function getAllNotifications() {
$stmt = $this->conn->prepare("SELECT * FROM notification ORDER BY timestamp DESC");
$stmt->execute();
$notifications = $stmt->get_result();
$stmt->close();
return $notifications;
}
}
?>
DBConnect.php
<?php
/**
* Handling database connection
*
* @author Jotinder Singh Matta
*/
class DbConnect {
private $conn;
function __construct() {
}
/**
* Establishing database connection
* @return database connection handler
*/
function connect() {
include_once dirname(__FILE__) . './Config.php';
// Connecting to mysql database
$this->conn = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
// Check for database connection error
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// returing connection resource
return $this->conn;
}
}
?>
Config.php
<?php
/**
* Database configuration
*/
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
define('DB_NAME', 'oneview_alerts');
?>
.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ %{ENV:BASE}index.php [QSA,L]
desc通知表
desc notification
id int(11) NO PRI
NULL
auto_increment
notification_text varchar(250) YES
NULL
hostname varchar(255) NO
NULL
service varchar(255) NO
NULL
value varchar(255) NO
NULL
timestamp timestamp YES CURRENT_TIMESTAMP
答案 0 :(得分:0)
根据您的评论,我认为您的文档根目录为
E:\wamp64\www\oneview_alerts\v1\
并且有一个.htaccess
文件与index.php位于同一级别
以此替换.htaccess
文件的内容。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
然后创建一个虚拟主机文件
<VirtualHost *:80>
DocumentRoot "E:/wamp64/www/oneview_alerts/v1/"
ServerName oneview_alerts.local
<Directory "E:/wamp64/www/oneview_alerts/v1/">
</Directory>
</VirtualHost>
将以下内容添加到您的主机文件中
127.0.0.1 localhost oneview_alerts.local
然后重新启动WAMP服务器