- 核心概念:它们是如何工作的?
- 通信协议:使用什么语言“对话”?
- PHP 服务器端:如何搭建和编写?
- Android 客户端:如何发送请求和接收响应?
- 完整示例:一个简单的“用户注册”功能。
- 进阶主题:安全性、性能、更现代的架构。
核心概念:客户端-服务器模型
想象一下你去餐厅点餐:

- 你 (Android 客户端):你决定吃什么,然后告诉服务员。
- 厨房 (PHP 服务器端):厨师根据服务员传来的菜单(你的请求)来准备食物(处理数据)。
- 服务员 (HTTP 协议):负责在你的餐桌和厨房之间传递菜单和做好的菜。
这个过程就是典型的 客户端-服务器模型。
- Android 客户端:负责用户界面、用户交互,并将用户操作(如登录、发帖、获取数据)打包成服务器能理解的格式,发送出去。
- PHP 服务器端:负责接收客户端的请求,处理业务逻辑(如验证用户、查询数据库、保存数据),然后将处理结果打包成客户端能理解的格式,返回给客户端。
- HTTP 协议:是它们之间沟通的“语言”和规则。
通信协议:HTTP/HTTPS
Android 和 PHP 之间主要通过 HTTP (HyperText Transfer Protocol) 或其更安全的版本 HTTPS (HTTP Secure) 进行通信。
- 请求:Android 客户端向服务器发送一个 HTTP 请求,这个请求包含:
- URL:服务器的地址(
https://yourdomain.com/api/register.php)。 - 方法:最常用的有
GET(获取数据)和POST(提交数据,如注册、登录)。 - 请求头:一些元信息,比如内容类型
Content-Type。 - 请求体:要发送的数据(对于 POST 请求)。
- URL:服务器的地址(
- 响应:PHP 服务器处理完请求后,返回一个 HTTP 响应,这个响应包含:
- 状态码:如
200 OK(成功)、404 Not Found(页面不存在)、500 Internal Server Error(服务器错误)。 - 响应头:一些元信息。
- 响应体:服务器返回的数据,通常是 JSON 格式。
- 状态码:如
为什么是 JSON? JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它易于人阅读和编写,也易于机器解析和生成,几乎所有编程语言(包括 Java/Android 和 PHP)都有成熟的库来处理 JSON,因此它成为了前后端通信的事实标准。
PHP 服务器端:如何搭建和编写
你需要一个运行 PHP 的 Web 服务器环境,最简单的方式是使用集成的开发环境,如:

- XAMPP (Windows, macOS, Linux)
- WAMP (Windows)
- MAMP (macOS)
这些环境一键安装了 Apache (Web 服务器)、MySQL (数据库) 和 PHP。
PHP 脚本示例 (register.php)
这个脚本负责接收 Android 发来的用户名和密码,验证数据,并将其存入数据库。
<?php
// 1. 设置响应头,告诉客户端返回的是 JSON 格式数据
header('Content-Type: application/json; charset=utf-8');
// 2. 获取从 Android 发送过来的 POST 数据
// 使用 $_POST 来获取表单数据
$username = isset($_POST['username']) ? $_POST['username'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
// 3. 数据验证 (简单示例)
if (empty($username) || empty($password)) {
// 如果数据为空,返回错误信息
$response = [
'success' => false,
'message' => '用户名和密码不能为空!'
];
echo json_encode($response);
exit; // 停止脚本执行
}
// 4. 数据库操作 (使用 PDO 更安全,防止 SQL 注入)
try {
// 数据库连接信息
$host = 'localhost';
$db = 'your_database'; // 你的数据库名
$user = 'root'; // 你的数据库用户名
$pass = ''; // 你的数据库密码
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $options);
// 检查用户名是否已存在
$stmt = $pdo->prepare("SELECT id FROM users WHERE username = ?");
$stmt->execute([$username]);
if ($stmt->fetch()) {
$response = [
'success' => false,
'message' => '用户名已存在!'
];
echo json_encode($response);
exit;
}
// 密码加密(非常重要!)
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// 插入新用户
$sql = "INSERT INTO users (username, password) VALUES (?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$username, $hashed_password]);
$response = [
'success' => true,
'message' => '注册成功!'
];
} catch (\PDOException $e) {
// 数据库错误
$response = [
'success' => false,
'message' => '数据库错误: ' . $e->getMessage()
];
}
// 5. 将 PHP 数组编码成 JSON 字符串并返回给客户端
echo json_encode($response);
?>
Android 客户端:如何发送请求和接收响应
在 Android 中,我们不再推荐使用已废弃的 HttpURLConnection 进行网络操作,现在主流且推荐的方式是使用 Retrofit 库,它极大地简化了网络请求的代码。
准备工作:添加依赖
在 app/build.gradle 文件的 dependencies 代码块中添加:

// Retrofit for networking implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // 用于解析 JSON implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3' // 用于打印网络日志 // ViewModel and LiveData for UI implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1'
在 AndroidManifest.xml 中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
(从 Android 9 (API 28) 开始,明文 HTTP 流量默认被禁止,如果你的服务器是 HTTP,需要在 application 标签下添加 android:usesCleartextTraffic="true",但强烈建议使用 HTTPS。)
使用 Retrofit 实现注册功能
定义数据模型 (Kotlin)
// 用于发送请求的 DTO (Data Transfer Object)
data class RegisterRequest(
val username: String,
val password: String
)
// 用于接收响应的 DTO
data class RegisterResponse(
val success: Boolean,
val message: String
)
创建 Retrofit 接口
import retrofit2.Call
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.POST
interface ApiService {
// @FormUrlEncoded 表示表单格式的请求体
// @POST 指定请求方法为 POST,值为 PHP 脚本的路径
// @Field 指定表单字段名,与 PHP 中的 $_POST['key'] 对应
@FormUrlEncoded
@POST("register.php") // 相对于你的 Base URL 的路径
fun register(
@Field("username") username: String,
@Field("password") password: String
): Call<RegisterResponse>
}
在 ViewModel 或 Activity 中发起请求
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class MainViewModel : ViewModel() {
private val apiService: ApiService
init {
// 初始化 Retrofit
val retrofit = Retrofit.Builder()
.baseUrl("https://yourdomain.com/api/") // 你的服务器基础地址,务必以 /
.addConverterFactory(GsonConverterFactory.create())
.build()
apiService = retrofit.create(ApiService::class.java)
}
fun registerUser(username: String, password: String) {
viewModelScope.launch {
try {
val response = apiService.register(username, password)
if (response.isSuccessful) {
val registerResponse = response.body()
// 处理成功逻辑
registerResponse?.let {
Log.d("API_SUCCESS", "Message: ${it.message}")
// 更新 UI...
}
} else {
// 处理服务器返回的错误 (如 404, 500)
Log.e("API_ERROR", "Error: ${response.code()}")
}
} catch (e: Exception) {
// 处理网络错误 (如无网络、连接超时)
Log.e("API_ERROR", "Network Exception: ${e.message}")
}
}
}
}
完整示例流程总结
- 用户操作:在 Android App 的注册界面,用户输入用户名和密码,点击“注册”按钮。
- Android 客户端:
MainViewModel中的registerUser()方法被调用。- Retrofit 根据
ApiService接口的定义,构建一个 HTTP POST 请求,目标 URL 是https://yourdomain.com/api/register.php。 - 请求体中包含
username和password两个字段。 - OkHttp 在后台线程中执行这个请求。
- 网络传输:请求通过互联网发送到你的服务器。
- PHP 服务器端:
- Apache 的 Web 服务器接收到对
register.php的请求。 - PHP 解释器执行
register.php脚本。 $_POST数组接收到从 Android 发来的username和password。- 脚本进行数据验证、数据库查询和插入操作。
- 使用
json_encode()将 PHP 数组(如['success' => true, 'message' => '注册成功!'])转换成 JSON 字符串。
- Apache 的 Web 服务器接收到对
- 网络响应:PHP 脚本将这个 JSON 字符串作为 HTTP 响应体返回给 Android 客户端。
- Android 客户端:
- Retrofit 接收到响应,GsonConverterFactory 自动将 JSON 字符串解析成
RegisterResponse对象。 try-catch块捕获成功或失败的情况。- 结果通过
LiveData或回调传递给 UI 层,更新界面(显示“注册成功”的 Toast 或跳转到登录页)。
- Retrofit 接收到响应,GsonConverterFactory 自动将 JSON 字符串解析成
进阶主题
安全性
- HTTPS:必须使用! 它可以加密客户端和服务器之间的所有通信,防止数据(如密码、个人信息)被窃听,你需要在服务器上配置 SSL 证书(如 Let's Encrypt 提供的免费证书)。
- 密码加密:永远不要在数据库中明文存储密码,PHP 的
password_hash()和password_verify()函数是处理密码的黄金标准。 - 防止 SQL 注入:始终使用 预处理语句,如 PHP PDO 中的
prepare()和execute(),Retrofit 默认也会帮你处理好 URL 和请求体的编码。 - 输入验证和过滤:在服务器端对所有用户输入进行严格的验证和清理,防止 XSS 等攻击。
性能与架构
- RESTful API:设计符合 REST 原则的 API,可以使你的 API 更清晰、更易于维护和扩展,使用
GET /users获取用户列表,POST /users创建新用户。 - 异步处理:Android 的网络请求必须在后台线程执行,不能阻塞主线程(UI 线程),Retrofit + Coroutines/Kotlin Flow 是现代 Android 开发的最佳实践。
- JWT (JSON Web Tokens):对于需要用户登录的系统,可以使用 JWT 来进行无状态的认证,用户登录成功后,服务器返回一个 Token,后续请求在 Header 中带上这个 Token 即可验证身份,无需在服务器端存储 Session。
- 现代 PHP 框架:对于复杂的项目,使用 Laravel 或 Symfony 等 PHP 框架可以大大提高开发效率和代码质量,它们提供了路由、ORM、中间件等丰富的功能。
希望这份详细的指南能帮助你顺利开启 Android + PHP 的开发之旅!
