PHP运行模式的深入理解

PHP运行模式的深入理解

什么是PHP运行模式?

在讲解 PHP 运行模式前,需要先了解 PHP 的基础架构,PHP 可以以两种不同的方式运行:

  • Apache模块运行方式(mod_php)
  • CGI方式(php-cgi或FastCGI)

Apache模块运行方式是将 PHP 解释器做成一个 Apache 的扩展模块(apache module),加载到 Apache 在启动时读取,Apache 与 PHP 的通讯是通过直接调用 C 函数的方式实现的。这种方式下,每一次请求到来,都会开启一个新的线程或者进程,并在其中执行一个新的 PHP 程序,所以称为 静态方式运行。

CGI方式是通过在 Web 服务器(例如 Apache)与 PHP 解释器(php-cgi 或 FastCGI 进程)之间建立通信,使得 PHP 可以独立于 Web 服务器来运行。这种方式下,每一次请求到来均为新进程,并在其中执行 PHP,所以称为 动态方式运行。

静态方式运行的优缺点

优点

  1. 性能十分优秀,在高负载情况下表现更加突出,因为它可以复用 Apache 已存在的进程或线程,无需每次都初始化 PHP 环境。
  2. 对于某些不稳定的 PHP 扩展,使用 Apache 模块可以避免 php 代码的 segfault。
  3. 能够和 Apache 很好地整合

缺点

  1. PHP 代码直接运行在 Apache 中,一旦出现错误导致 Apache 进程或线程崩溃,就会导致站点奔溃,风险较高。
  2. 在 PHP 代码更新时需要重启 Apache 才能生效。

动态方式运行的优缺点

优点

  1. 安全性高,因为要启动一个进程或线程来执行 PHP,所以 PHP 代码无法访问 Web 服务器的其他服务。
  2. 当 PHP 代码更新时,无需重新启动 Web 服务器,直接重启 PHP 进程即可生效,更加方便。

缺点

  1. 动静态请求都要启动PHP进程,开销巨大,难以承受高负载。
  2. 进程与进程之间的环境是独立的,不能共享。

示例

静态方式运行示例

下载个demo文件并确认 phpinfo 信息

<?php
phpinfo();
?>

将它重命名为info.php并将其放置在 Apache 公共目录中,然后在浏览器中访问 http://localhost/info.php。 会出现 Apache 版本、操作系统、PHP 确定的服务器/客户机环境以及加载的模块信息。

动态方式运行示例

启动一个 TCP 服务器

<?php
// 创建服务器并返回一个套接字(socket)
$server_sock = stream_socket_server("tcp://127.0.0.1:9000", $errno, $errstr)
   or die("create server fail!$errno-$errstr");
echo "Server run on tcp://127.0.0.1:9000 start\n";

while ($conn_sock = stream_socket_accept($server_sock, -1)) {// 建立连接
    $pid = pcntl_fork();// 创建子进程
    if ($pid == -1) {
        die('fork fail');
    } elseif ($pid) {
        // 父进程关闭客户端连接
        fclose($conn_sock);
    } else {
        // 子进程处理请求并返回结果
        $data = fread($conn_sock, 1024);
        fwrite($conn_sock, "Your input data length is ".strlen($data));
        fclose($conn_sock);
        exit;
    }
}

上面启动的 TCP 服务器代码会一直监听端口 9000 并等待 TCP 客户端的请求,当有客户端请求到来时,会创建一个子进程来处理这个客户端的请求。当子进程处理完请求并发送响应数据后,会关闭套接字并退出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP运行模式的深入理解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • VUE搭建分布式医疗挂号系统的前台预约挂号步骤详情

    VUE搭建分布式医疗挂号系统的前台预约挂号步骤详情 准备工作 在开始前,我们需要先确保已经安装好以下软件: Node.js Vue.js 步骤一:创建Vue.js项目 使用Vue.js官方提供的命令行工具vue-cli快速创建Vue.js项目。 # 全局安装vue-cli npm install -g vue-cli # 创建项目 vue create my…

    PHP 2023年5月27日
    00
  • php实现zip文件解压操作

    以下是详细讲解“php实现zip文件解压操作”的完整攻略: 1. zip扩展的安装 zip扩展是用于PHP解压Zip文件的核心扩展,需要安装在服务器上才能使用。以下是zip扩展的安装方法: 在Linux系统下使用apt-get安装 sudo apt-get install php-zip 在Windows系统下,需要在php.ini中打开zip扩展的支持 在…

    PHP 2023年5月26日
    00
  • 微信小程序实现上传多张图片、删除图片

    实现上传多张图片、删除图片的微信小程序攻略如下: 上传多张图片 1. 引入wx.chooseImage API 在小程序页面中,使用wx.chooseImage API即可调用微信客户端的图片选择功能,将选择的图片上传到服务器。 示例代码: wx.chooseImage({ success: function (res) { var tempFilePath…

    PHP 2023年5月23日
    00
  • PHP调试及性能分析工具Xdebug详解

    PHP调试及性能分析工具Xdebug详解 什么是Xdebug Xdebug是一个功能强大的PHP调试器和性能分析工具。它可以让开发者更容易调试PHP应用程序,调试过程中可以跟踪代码执行、检查变量值等细节信息。同时,Xdebug也提供了一系列性能分析工具,让开发者可以找到低效的代码块,从而优化应用程序的性能。 安装Xdebug Xdebug可以通过PECL安装…

    PHP 2023年5月24日
    00
  • PHP实现的消息实时推送功能【基于反ajax推送】

    下面是详细讲解“PHP实现的消息实时推送功能【基于反ajax推送】”的完整攻略。 概述 反 Ajax 推送是指服务器不等待请求回应,而是在数据准备好后立刻将其推送给客户端的技术。本文主要介绍基于反 Ajax 推送的实时消息推送功能,通过 PHP 和 JavaScript 来实现。 技术实现 前置条件 为了实现实时消息推送,需要一个反 Ajax 的库。我们使用…

    PHP 2023年5月27日
    00
  • PHP实现ASCII码与字符串相互转换的方法

    ASCII码转字符串 在PHP中,可以使用chr()函数将ASCII码转换成字符。chr()需要一个整数参数,它将返回该整数对应的ASCII字符。以下是将整数65(ASCII码为大写字母A)转换成字符的示例代码: $ascii = 65; $char = chr($ascii); echo $char; // 输出 A 字符串转ASCII码 在PHP中,可以…

    PHP 2023年5月26日
    00
  • 微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能

    关于微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能的攻略,我可以给出以下具体步骤和示例说明。 步骤一:设置预览图片的样式 我们需要给图片设置一个样式,并绑定一个tap事件,来触发图片的预览操作。 示例一代码: <view> <image class="img" src="{{imgUrl}}…

    PHP 2023年5月23日
    00
  • PHP获取文件属性的最简单方法

    获取文件属性是PHP开发中比较常用的操作之一,比如获取文件大小、创建时间、修改时间、文件类型等,下面介绍一下PHP获取文件属性的最简单方法。 使用PHP内置函数获取文件属性 PHP提供了许多函数用于获取文件属性,可以根据需求选择不同的函数,其中比较常用的有以下几个。 1.文件大小 可以使用PHP内置函数filesize()获取文件大小,示例如下: $file…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部