linux - 安装mod_php5模块, 实现apache对php的支持, 这个东西怎么理解??
php 不是有自己的解析器吗?
apache 只是将url请求对应到本地服务器的磁盘文件,发现该文件是.php的,就会交给php解析器来做(这个过程之后就和apache暂时没有关系了)
apache所在用户(www-data)需要对该文件有读取的权限 然后php解析器去执行这个脚本
将执行完毕的结果(dom文档)一并交给apache,
apche再将dom文档原样(可能加一些响应头之类的)返回给客户端浏览器
客户端浏览器接收到dom文档,加载js引擎 逐行解析, 碰到img这些特殊标签才会再次向服务器发送请求 ...
我理解的是apache只是负责传递一下分配一下? 请前辈指出我理解不对的地方
回复内容:
php 不是有自己的解析器吗?
apache 只是将url请求对应到本地服务器的磁盘文件,发现该文件是.php的,就会交给php解析器来做(这个过程之后就和apache暂时没有关系了)
apache所在用户(www-data)需要对该文件有读取的权限 然后php解析器去执行这个脚本
将执行完毕的结果(dom文档)一并交给apache,
apche再将dom文档原样(可能加一些响应头之类的)返回给客户端浏览器
客户端浏览器接收到dom文档,加载js引擎 逐行解析, 碰到img这些特殊标签才会再次向服务器发送请求 ...
我理解的是apache只是负责传递一下分配一下? 请前辈指出我理解不对的地方
从宏观上来看,PHP内核的实现与世界上绝大多数的程序一样,接收输入数据, 做相应处理然后输出(返回)结果。 我们编写的代码就是PHP接收的输入数据,PHP内核对我们编写的代码进行解释和运算, 最后返回相应的运算结果。
这个问题要从『PHP内部的生命周期』和『SAPI接口』来理解:
先来看张图:
从图上可以看出,PHP从下到上是一个4层体系:
Zend引擎:Zend整体用纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。
Extensions:围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的PHP中间层、富文本解析就是extension的典型应用)。
Sapi:Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的一个设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
上层应用:这就是我们平时编写的PHP程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。
Sapi通过通过一系列的接口,使得外部应用可以和PHP交换数据并可以根据不同应用特点实现特定的处理方法,我们常见的一些sapi有:
apache2handler:这是以apache作为webserver,采用mod_PHP模式运行时候的处理方式,也是现在应用最广泛的一种。
cgi:这是webserver和PHP直接的另一种交互方式,也就是大名鼎鼎的fastcgi协议,在最近今年fastcgi+PHP得到越来越多的应用,也是异步webserver所唯一支持的方式。
cli:命令行调用的应用模式
Apache是Apache软件基金会的一个开放源代码的Web服务器, 可以在大多数电脑操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。 Apache支持许多特性,大部分通过模块扩展实现。常见的模块包括mod_auth(权限验证)、mod_ssl(SSL和TLS支持) mod_rewrite(URL重写)等。一些通用的语言也支持以Apache模块的方式与Apache集成。 如Perl,Python,Tcl,和PHP等。
当PHP需要在Apache服务器下运行时,一般来说,它可以mod_php5模块的形式集成, 此时mod_php5模块的作用是接收Apache传递过来的PHP文件请求,并处理这些请求, 然后将处理后的结果返回给Apache。如果我们在Apache启动前在其配置文件中配置好了PHP模块(mod_php5), PHP模块通过注册apache2的ap_hook_post_config挂钩,在Apache启动的时候启动此模块以接受PHP文件的请求。
先看一些Apache里的PHP配置httpd.conf:
<code>LoadModule php5_module modules/libphp5.so AddHandler application/x-httpd-php .php</code>
libphp5.so/libphp7.so作为Apache的一个模块module,PHP解释器是工作在Apache进程内(运行用户是相同的),Apache会把.php后缀的文件交给进程内的PHP模块处理,并把结果返回给浏览器.也就是说,载入了PHP模块的Apache就是一个PHP运行容器,它们是一个整体,是耦合的,所以必须先编译Apache,才能在编译PHP时用参数--with-apxs2=/png/httpd/2.4/bin/apxs
指定Apache模块构建脚本,告诉Apache我要构建PHP模块.
对于Nginx和PHP-FPM这种模式,楼主才需要考虑到运行用户不同权限不同的问题,因为Nginx和PHP-FPM是分离的,两者是不同的进程,通过TCP或者Unix Domain Socket通信,不过一般Nginx和PHP-FPM都设为同样的运行用户,方便Nginx和PHP-FPM都能有权限操作同样的文件.另外PHP-FPM也可以看做一个PHP容器,因为PHP-FPM进程也是内置了PHP解释器的,因为其不依赖命令行的php,也不依赖php-cgi,跟Apache的区别就是PHP-FPM是一个FastCGI服务,而Apache是一个HTTP服务,Apache能够直接跟浏览器通信,而PHP-FPM则需要通过Nginx跟浏览器交互.
题外话:
PHP从5.4开始内置了一个HTTP服务器,官方定位是用于开发和测试,因为这个HTTP服务器并不是一个通用的标准的HTTP服务器,比如其不支持HTTPS,也不支持目录列表,还有单进程架构也不能利用多核.除了用来开发,我还找到了一个有意思的应用场景,既然PHP内置了HTTP服务器和SQLite数据库,那就可以把它当做一个家用的物联网服务器,于是我在Ubuntu上交叉编译了适用于Android和树莓派(Raspbian)的PHP,然后用Java写了个App,调用命令行启动PHP的HTTP服务器,然后打开WebView访问本地PHP服务器,本地PHP负责操作文件系统和网络,WebView用于人机交互,虽然不能调用Android上的Java API,但也能做蛮多事了.这个App已经跑在我的小米4上了.

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

DeepSeek 是一款强大的智能搜索与分析工具,提供网页版和官网两种访问方式。网页版便捷高效,免安装即可使用;官网则提供全面产品信息、下载资源和支持服务。无论个人还是企业用户,都可以通过 DeepSeek 轻松获取和分析海量数据,提升工作效率、辅助决策和促进创新。

DeepSeek的安装方法有多种,包括:从源码编译(适用于经验丰富的开发者)使用预编译包(适用于Windows用户)使用Docker容器(最便捷,无需担心兼容性)无论选择哪种方法,请仔细阅读官方文档并充分准备,避免不必要的麻烦。

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

BITGet 是一款加密货币交易所,提供各种交易服务,包括现货交易、合约交易和衍生品。该交易所成立于 2018 年,总部位于新加坡,致力于为用户提供安全可靠的交易平台。BITGet 提供多种交易对,包括 BTC/USDT、ETH/USDT 和 XRP/USDT。此外,该交易所还在安全性和流动性方面享有盛誉,并提供多种功能,如高级订单类型、杠杆交易和 24/7 全天候客户支持。

欧易 OKX,全球领先的数字资产交易所,现推出官方安装包,提供安全便捷的交易体验。欧易 OKX 安装包无需通过浏览器访问,可直接在设备上安装独立应用程序,为用户打造稳定高效的交易平台。安装过程简便易懂,用户只需下载最新版本安装包,按照提示一步步操作即可完成安装。
