PHP CLI 和 FPM 模式的区别一共包含哪些部分?

1. PHP CLI (Command Line Interface)

CLI是PHP的命令行模式,就像你在玩玩具时可以直接发出指令一样。

<?php
// test.php
// 这是一个简单的PHP脚本,可以在命令行中运行
$name = "小明"; // 定义一个变量,存储名字
echo "你好, ". $name ."!\n"; // 输出问候语,\n表示换行

// 可以计算数学题
$result = 5 + 3; // 计算5加3的结果
echo "5 + 3 = ". $result ."\n"; // 输出计算结果

// 还可以读取命令行参数
$args = $argv; // $argv是PHP内置的数组,存储了命令行参数
if (isset($args[1])) { // 检查是否有第一个参数
    echo "你输入的参数是: ". $args[1] ."\n"; // 输出第一个参数
}
?>

在命令行中运行这个脚本:

php test.php 今天天气不错
# 输出:
# 你好, 小明!
# 5 + 3 = 8
# 你输入的参数是: 今天天气不错

底层原理

  • 当你在命令行中输入php test.php时,系统会启动PHP解释器
  • PHP解释器读取test.php文件,逐行执行其中的代码
  • 执行完毕后,PHP解释器会自动退出

使用场景

  • 编写自动化脚本,比如定时备份文件
  • 执行一次性的任务,比如导入数据到数据库
  • 调试PHP代码,快速验证某个功能

2. PHP-FPM (FastCGI Process Manager)

FPM是PHP的一种运行模式,专门用于处理Web请求,就像一个餐厅的服务员,负责接收客人的订单并交给厨师处理。

<?php
// index.php - 这是一个Web页面的PHP代码
// 当用户访问网站时,Web服务器会调用PHP-FPM来执行这段代码

// 连接数据库
$servername = "localhost"; // 数据库服务器地址
$username = "root"; // 数据库用户名
$password = "password"; // 数据库密码
$dbname = "mydatabase"; // 数据库名

// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接是否成功
if ($conn->connect_error) {
    die("数据库连接失败: ". $conn->connect_error); // 如果失败,输出错误信息并终止脚本
}

// 查询数据
$sql = "SELECT id, name, email FROM users"; // SQL查询语句
$result = $conn->query($sql); // 执行查询

// 输出HTML页面
echo "<html>";
echo "<head><title>用户列表</title></head>";
echo "<body>";
echo "<h1>用户列表</h1>";
echo "<table border='1'>";
echo "<tr><th>ID</th><th>姓名</th><th>邮箱</th></tr>";

// 输出查询结果
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "<tr>";
        echo "<td>". $row["id"]. "</td>";
        echo "<td>". $row["name"]. "</td>";
        echo "<td>". $row["email"]. "</td>";
        echo "</tr>";
    }
} else {
    echo "<tr><td colspan='3'>没有数据</td></tr>";
}

echo "</table>";
echo "</body>";
echo "</html>";

$conn->close(); // 关闭数据库连接
?>

底层原理

  1. 当用户在浏览器中输入网址访问网站时,请求会先到达Web服务器(如Nginx或Apache)
  2. Web服务器根据配置,将PHP文件的请求转发给PHP-FPM
  3. PHP-FPM维护着一组PHP进程(就像餐厅里的厨师团队),随时准备处理请求
  4. 当收到请求时,PHP-FPM会分配一个空闲的PHP进程来执行对应的PHP文件
  5. PHP进程执行PHP代码,可能会连接数据库、读取文件等
  6. 执行完毕后,PHP进程将结果返回给Web服务器
  7. Web服务器再将结果返回给用户的浏览器
  8. PHP进程不会立即退出,而是继续等待下一个请求(这就是"FastCGI"的"Fast"所在)

使用场景

  • 所有类型的Web应用,尤其是高并发的网站,如电商平台、社交网络
  • 需要快速响应的API服务
  • 任何需要与Web服务器集成的PHP应用

3. CLI vs FPM 的核心区别

特性CLI模式FPM模式
运行环境命令行,直接由用户启动作为服务后台运行,由Web服务器调用
生命周期执行完脚本就结束长期运行,等待处理多个请求
输入来源命令行参数($argv)HTTP请求(GET/POST数据)
输出方式直接打印到终端返回HTML、JSON等给Web服务器
配置文件php.iniphp.ini + php-fpm.conf
适合场景脚本、工具、定时任务Web应用、API服务
性能启动开销大,适合单次执行启动开销小,适合高并发

4. 为什么需要两种模式?

这就像一个人有两种状态:

  • CLI模式就像你在自己房间里玩玩具,可以随意摆弄,不需要遵循太多规则
  • FPM模式就像你在学校上课,需要遵循一定的流程,和老师、同学配合

PHP设计这两种模式是为了满足不同的使用场景:

  • CLI模式让PHP可以像Python、Ruby一样,作为脚本语言使用
  • FPM模式让PHP可以高效地处理Web请求,成为世界上最流行的Web开发语言之一

5. 如何配置PHP-FPM?

PHP-FPM的配置文件通常位于/etc/php-fpm.d/www.conf,下面是一些关键配置项的解释:

; 进程池名称
[www]

; 监听地址和端口
listen = 127.0.0.1:9000

; 启动时创建的子进程数
pm.start_servers = 5

; 最小空闲进程数
pm.min_spare_servers = 2

; 最大空闲进程数
pm.max_spare_servers = 8

; 最大请求数,达到这个数后进程会重启,防止内存泄漏
pm.max_requests = 500

; 慢请求日志,记录执行时间超过指定时间的请求
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

这些配置项决定了PHP-FPM的性能和行为,就像给餐厅设置服务员的数量和工作规则一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值