PHP 如何真正工作:服务器端思维的简单指南
当你学习 Web 编程时,有一个重大的思维转换必须要做:
"当我访问一个网站时到底发生了什么?PHP 在这个过程中扮演什么角色?"
这篇文章是你理解 PHP 实际工作原理的白话指南——它在服务器上做什么,如何与浏览器连接,以及如何处理 Web 请求。
无论你是刚开始学习 PHP,还是之前使用过但不了解幕后机制,这都是你需要的服务器端思维。
大局观:当你访问网站时发生了什么?
想象你打开浏览器并访问:
https://example.com/profile.php这是真正发生的过程:
- 浏览器向服务器发送 HTTP 请求
- 服务器查看 URL,发现应该运行
profile.php - PHP 在服务器上执行——不是在浏览器中
- PHP 可能连接数据库、执行一些逻辑,然后生成 HTML
- 服务器将纯 HTML 发送回浏览器
- 浏览器为用户渲染 HTML
关键概念:PHP 在页面到达浏览器之前运行。你永远不会在浏览器的"查看源代码"中"看到"PHP 代码。
PHP 作为请求-响应机器
从本质上讲,PHP 就像一个请求处理器。每次用户访问页面时:
- PHP 重新开始——每个请求都是隔离的
- 它读取 URL、请求数据(GET、POST)、cookies、sessions 等
- 它从上到下运行文件中的代码
- 它将响应(通常是 HTML 或 JSON)发送回浏览器
没有"持续进程"或对上次请求的记忆——除非你明确使用 sessions、数据库或缓存。
PHP 中的请求生命周期
以下是基本 PHP 脚本的运行方式:
php
<?php
// profile.php
session_start(); // 初始化会话
$userId = $_GET['id'] ?? null;
if (!$userId) {
echo "No user selected.";
exit;
}
$db = new PDO(...); // 连接数据库
$stmt = $db->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);
$user = $stmt->fetch();
if (!$user) {
echo "User not found.";
exit;
}
echo "<h1>Hello, " . htmlspecialchars($user['name']) . "</h1>";
?>发生的过程:
- PHP 连接数据库
- 获取用户数据
- 生成 HTML 输出
- 输出被发送回浏览器
你不需要手动发送响应——任何你 echo 或 print 的内容都会成为浏览器看到的 HTML。
服务器在做什么(Apache、Nginx 等)
PHP 不是独自运行的——它由像 Apache 或 nginx 这样的 Web 服务器执行。
- Web 服务器接收浏览器的请求
- 它检查文件路径和规则(如
.htaccess) - 它将
.php文件传递给 PHP 解释器(如 PHP-FPM) - 解释器运行文件,然后将输出发送回服务器
- 服务器将结果转发给浏览器
把 Web 服务器想象成连接浏览器和 PHP 的中间人。
PHP 不在浏览器中运行
与 JavaScript 不同,PHP 从不在客户端运行。这就是为什么你不能做这样的事情:
javascript
setTimeout(function () {
// 这在 PHP 中不会工作!
}, 1000)如果你看到 .php 页面在显示后加载某些内容,那可能是使用了 AJAX——JavaScript 对服务器上的 PHP 端点进行额外调用。
PHP 文件只是模板(直到它们运行)
在执行之前,PHP 文件只是纯文本。它们存在于你的服务器上,如:
/var/www/html/index.php但一旦请求被发出,PHP 运行文件并在发送后丢弃结果。这意味着:
- 请求之间没有持久内存
- 除非你编写,否则没有后台处理
- 默认情况下每个请求都是无状态的
会话和状态怎么办?
PHP 可以使用会话在请求之间记住事情:
php
session_start();
$_SESSION['user_id'] = 123;为什么理解这些很重要
一旦你"理解"PHP 如何在幕后工作:
- 像 Laravel 或 Symfony 这样的框架更有意义了(它们自动化请求路由)
- 你理解为什么 PHP 应用是无状态的
- 你编写更清晰的代码,与 HTTP 的流程协作,而不是对抗它
总结:PHP 服务器端思维
- PHP 在服务器上运行,不是在浏览器中
- 每个请求重新开始——除非你管理状态,否则它是无状态的
- PHP 脚本生成 HTML(或 JSON 等)并发送回去
- 你的 PHP 代码每个请求运行一次,然后结束
如果你将思维从"编写页面"转换为"响应请求",你就走上了掌握服务器端编程的正确道路——不仅仅是 PHP。
CatchAdmin
后端开发工程师,前端入门选手,略知相关服务器知识,偏爱❤️ Laravel & Vue
本作品采用《CC 协议》,转载必须注明作者和本文链接