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日

相关文章

  • PHP实现的栈数据结构示例【入栈、出栈、遍历栈】

    下面我就来详细讲解一下“PHP实现的栈数据结构示例【入栈、出栈、遍历栈】”的完整攻略。 1. 栈数据结构简介 栈(Stack),也叫“堆栈”,是一种“后进先出(Last In First Out,LIFO)”的线性数据结构。栈中的元素只能通过栈顶进行插入和删除操作,因此栈也被称为“后进先出表(Last-In-First-Out list)”或“LIFO表”。…

    PHP 2023年5月26日
    00
  • PHP简单实现上一页下一页功能示例

    下面是“PHP简单实现上一页下一页功能示例”的完整攻略。 什么是上一页下一页功能 上一页下一页功能是指在一个长列表或多页内容中,为了方便用户浏览,提供一个帮助用户快速翻页的功能。典型的场景就是一个博客列表、新闻列表或商品列表等。 实现上一页下一页功能的基本思路 要实现上一页下一页功能,首先需要获取当前页码,然后根据当前页码计算上一页和下一页的页码。最后通过修…

    PHP 2023年5月26日
    00
  • Mac OS上搭建Apache+PHP+MySQL开发环境的详细教程

    为了让大家更好地了解如何在Mac OS上搭建Apache+PHP+MySQL开发环境,我将提供一份详细的教程攻略。 准备工作 在开始搭建之前,你需要确认以下几点准备工作: 确保已安装最新版本的Mac OS; 安装Homebrew,可以使用以下命令进行安装: /usr/bin/ruby -e “$(curl -fsSL https://raw.githubus…

    PHP 2023年5月30日
    00
  • PHP7常量数组用法分析

    PHP7常量数组用法分析 简介 在PHP程序开发中,常量数组是一个非常有用的数据结构,常量数组能够帮助开发者提高程序的可维护性和可读性。本文将详细讲解PHP7常量数组的使用方法及常见应用场景。 申明常量数组 申明一个常量数组可以使用 define() 函数以及 const 关键字。 使用 define() 函数 define(‘COLORS’, [‘red’…

    PHP 2023年5月26日
    00
  • Windows搭建本地PHP8环境,配Nginx

    一、安装PHP   下载:https://windows.php.net/download 我下载的是此时的最新版8.2.3   下载后 解压目录 放到C:/tool下面目录重命名为PHP  目录自己定  我这个tool目录是个人习惯  你可以放到主流的C:\Program Files下也可以放到D盘E盘任何地方都可以 里面的php.ini-developm…

    PHP 2023年4月18日
    00
  • python中实现php的var_dump函数功能

    要在Python中实现PHP中的var_dump函数的功能,需要运用Python的一些内置模块和数据类型。 具体步骤如下: 1. 获取变量的类型 使用Python的type()函数获取变量的类型,该函数返回变量的类型对象。 example1 = 10 example2 = ‘Hello World’ example3 = [1,2,3] example4 =…

    PHP 2023年5月26日
    00
  • 利用php抓取蜘蛛爬虫痕迹的示例代码

    让我来为您讲解“利用php抓取蜘蛛爬虫痕迹的示例代码”的完整攻略。 什么是蜘蛛爬虫痕迹? 蜘蛛爬虫是网络爬虫的一种,它能够在网络上自动抓取网页,并进行分析和处理。在网络访问中,蜘蛛爬虫的行为会影响网站的流量和分析数据。由于蜘蛛爬虫往往具有明显的行为特征,因此可以利用php代码对蜘蛛爬虫进行抓取和监控。 利用php抓取蜘蛛爬虫痕迹的示例代码 代码说明 以下代码…

    PHP 2023年5月27日
    00
  • PHP的几个常用数字判断函数代码

    下面详细讲解PHP的几个常用数字判断函数代码的完整攻略。 函数介绍 在PHP中,有几个数字判断函数可以方便地帮助我们对数字进行判断,通常使用如下几个函数: is_numeric():用于判断变量是否为数字或者数字字符串,如果是返回 true,否则返回 false。 is_int():用于判断一个变量是否为整数类型,是返回 true,否则返回 false。 i…

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