【PHP】web服务器支持PHP_环境配置

news2024/7/4 4:47:49

一、PHP运行目前为止主要有4方式

(1)以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache服务器,             以同一个进程运行。
(2)以CGI的方式运行,CGI英文叫做公共网关接口,就是Apache在遇到PHP脚本的时候会将              PHP程序提交给CGI应用程序(php-cgi.exe)解释,解释之后的结果返回给Apache,然后再          返回给相应的请求用户。
(3)以FastCGI的方式运行。这种形式是CGI的加强版本,CGI是单进程,多线程的运行方式,程          序执行完成之后就会销毁,所以每次都需要加载配置和环境变量fork-and-execute(创建-执             行)。而FastCGI则不同,FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行              着,只要激活后,不会每次都要花费时间去 fork 一次。FastCGI进程管理器自身初始化,启           动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。
(4)cli  命令行运行   (Command Line Interface)

二、Apache web服务(Apache+PHP  )

2.1 php_mod方式运行

apache 支持 php 最简单 只需配置conf 一段PHP 模块。

2.1.1 PHP php.ini 配置

无论上述哪种方式运行,下面的配置通常都会加上,解压PHP安装包到c:/PHP5/,重命名PHP.ini-recommend文件为PHP.ini,分别寻找如下字段编辑,去除前面的分号(注意不要去错分号,好多是注释信息,仔细辨认)。

error_reporting = E_ALL //开启报错,便于程序员查错 line 342
display_errors = On //显示错误 line 373
extension_dir = "C:/php5/ext" //php的扩展选项文件所在的目录 line 542
date.timezone = Asia/shanhai //时区配置  line 716

2.1.2 Apache httpd.conf配置

windows 系统配置,linux系统配置暂时没有,后续补充。

以模块的方式运行,在Apache(C:/Program Files/Apache Software Foundation/Apache2.2/conf)的配置文件里添加如下配置

LoadModule php5_module "C:/php5/php5apache2_2.dll" //大约line 127

PHPinidir "C:/php5/php.ini"

//修改配置

DirectoryIndex index.html index.php//追加index.php

AddType application/x-httpd-php .php //line 408左右添加

2.2 cgi模式

2.2.1 PHP php.ini 配置

cgi的方式运行,需要做如下的配置php配置文件

cgi.force_redirect = 0   //本来是 1 并且去掉注释符号;

2.2.2 Apache httpd.conf配置

修改apache的配置,去掉原来的模块配置

AddType application/x-httpd-php .php

LoadModule php5_module "C:/php5/php5apache2_2.dll"

PHPinidir "C:/php5/php.ini"

加入以下配置  AddHandler cgi-script .cgi     // line 396

2.2.3 测试

我们在目录C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin新建一个cgi文件test.cgi编写如下代码:

#!c:/php5/php-cgi.exe
<?
php php phpinfo();
?>

最后我们访问http://localhost/cgi-bin/test.cgi,出现如下结果则说明配置成功了:

2.3 fastcgi模式

2.3.1 介绍说明

PHP的fastcgi方式运行,首先需要去下载fastcgi模块,默认是没有带这个模块的,而cgi是自带的;下载地址http://httpd.apache.org/mod_fcgid/;解压复制其中的mod_fcgid.so和mod_fcgid.pdb,接下来做如下的配置:

  1. LoadModule fcgid_module modules/mod_fcgid.so      // line 128追加
  2. FcgidInitialEnv PHPRC "c:/php5"           //php配置文件 line 129追加
  3. AddHandler fcgid-script .php   //添加句柄 即后缀 什么样的文件需要fastcgi解释 line 407追加
  4. FcgidWrapper "c:/php5/php-cgi.exe" .php    //解释器路径 line 408
  5. Options Indexes FollowSymLinks ExecCGI //line 221 追加 ExecCGI 意思是目录允许执行CGI脚本

是否成功安装,只需要做个PHP文件检查就可以了,我们就用index.php文件:

#!c:/php5/php-cgi.exe
<?
php php phpinfo();
?>

2.3.2 httpd.conf配置

配置apache来以fastcgi模式运行php程序,vim  httpd.conf

#加载fastcgi模块
LoadModule fastcgi_module     modules/mod_fastcgi.so
#//以静态方式执行fastcgi 启动了10进程
FastCgiServer /usr/local/php/bin/php-cgi  -processes 10 -idle-timeout 150 -pass-header HTTP_AUTHORIZATION
<VirtualHost *:80>
     #
     DocumentRoot   /usr/local/httpd/fcgi-bin   
     ServerName www.fastcgitest.com
     
     ScriptAlias /fcgi-bin/   /usr/local/php/bin/   #定义目录映射 /fcgi-bin/ 代替 /usr/local/php/bin/
     Options +ExecCGI
     AddHandler fastcgi-script .php .fcgi         #.php结尾的请求都要用php-fastcgi来处理  
     AddType application/x-httpd-php .php     #增加MIME类型
     Action application/x-httpd-php /fcgi-bin/php-cgi  #设置php-fastcgi的处理器: /usr/local/php/bin/php-cgi

 <Directory /usr/local/httpd/fcgi-bin/>
      Options Indexes ExecCGI
      Order allow,deny
      allow from all
 </Directory>
</VirtualHost>

或者
<IfModule mod_fastcgi>ScriptAlias /fcgi-bin/ "/usr/local/php/bin" #定义目录映射FastCgiServer /usr/local/php/bin/php-cgi   -processes 10 #配置fastcgi server,
<Directory "/usr/local/httpd/fcgi-bin/">SetHandler fastcgi-scriptOptions FollowSymLinksOrder allow,denyAllow from all</Directory>AddType application/x-httpd-php .php&nbsp; #增加MIME类型
AddHandler php-fastcgi .php   #.php结尾的请求都要用php-fastcgi来处理
Action php-fastcgi /fcgi-bin/php-cgi #设置php-fastcgi的处理器
</IfModule>)

三、tomcat +PHP  cgi模式(实操成功)

3.1 php.ini 配置

3.2 tomcat 配置文件

3.2.1 content.xml配置

3.2.1 web.xml配置

在tomcat里面的conf文件夹下面的web.xml修改一下

<servlet>
    <servlet-name>php</servlet-name>
    <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
    <init-param>
        <param-name>clientInputTimeout</param-name>
        <param-value>200</param-value>
    </init-param>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>executable</param-name>
        <!--php下载解压/安装的路径-->
        <param-value>F:\tomcat\php\php-cgi.exe</param-value>
    </init-param>
    <init-param>
        <param-name>passShellEnvironment</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>cgiPathPrefix</param-name>
        <!--自己tomcat下对应的url-->
        <param-value>WEB-INF/phpbin</param-value>
    </init-param>
    <load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>php</servlet-name>
    <url-pattern>/phpbin/*</url-pattern>
</servlet-mapping>

  

 3.3 测试配置结果

新建测试文件index.php,

新建一个文件夹phpbin ,然后里面放php文件

测试文件是:index.php

代码如下(copy复制即可)

<?
php phpinfo()
?>

四、Nginx + PHP-FPM +部署kodexplorer

4.1 介绍说明

使用FastCGI方式现在常见的有两种stack:ligthttpd+spawn-fcgi;另外一种是nginx+PHP-FPM(也可以用spawn-fcgi)。

A、如上面所说该两种结构都采用FastCGI对PHP支持,因此HTTPServer完全解放出来,可以更好地进行响应和并发处理。因此lighttpd和nginx都有small, but powerful和efficient的美誉。

B、该两者还可以分出一个好坏来,spawn-fcgi由于是lighttpd的一部分,因此安装了lighttpd一般就会使用spawn-fcgi对php支持,但是目前有用户说ligttpd的spwan-fcgi在高并发访问的时候,会出现上面说的内存泄漏甚至自动重启fastcgi。即:PHP脚本处理器当机,这个时候如果用户访问的话,可能就会出现白页(即PHP不能被解析或者出错)。

另一个:首先nginx不像lighttpd本身含带了fastcgi(spawn-fcgi),因此它完全是轻量级的,必须借助第三方的FastCGI处理器才可以对PHP进行解析,因此其实这样看来nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在nginx.conf中很容易设置)。nginx可以使用spwan-fcgi(需要一同安装lighttpd,但是需要为nginx避开端口,一些较早的blog有这方面安装的教程),但是由于spawn-fcgi具有上面所述的用户逐渐发现的缺陷,现在慢慢减少使用nginx+spawn-fcgi组合了。

C、由于spawn-fcgi的缺陷,现在出现了新的第三方(目前还是,听说正在努力不久将来加入到PHP core中)的PHP的FastCGI处理器,叫做PHP-FPM(具体可以google)。它和spawn-fcgi比较起来有如下优点:

由于它是作为PHP的patch补丁来开发的,安装的时候需要和php源码一起编译,也就是说编译到php core中了,因此在性能方面要优秀一些;

同时它在处理高并发方面也优于spawn-fcgi,至少不会自动重启fastcgi处理器。具体采用的算法和设计可以google了解。

因此,如上所说由于nginx的轻量和灵活性,因此目前性能优越,越来越多人逐渐使用这个组合:nginx+PHP/PHP-FPM

可参考Nginx+kodexplorer(可道云部署纪要)-CSDN博客;该php项目的配置。

4.2 php-fpm安装

[root@localhost conf.d]# yum -y install php-fpm php-mbstring php-gd
[root@localhost conf.d]# systemctl status  php-fpm
[root@localhost conf.d]# systemctl restart  php-fpm
[root@localhost conf.d]# systemctl enable  php-fpm

4.3 项目kodexplorer下载

# 下载kodexplorer

wget http://static.kodcloud.com/update/download/kodexplorer4.39.zip

# 解压到/data/kodexplorer目录下(自定义目录,本文在/data/kodexplorer)

cd /data/kodexplorer

unzip kodexplorer4.39.zip

4.3 nginx.conf配置

server {
    listen 80;
    server_name localhost;
    root /data/kodexplorer/;
    index  index.html index.htm index.php;
 # 以下是核心配置
        location ~ \.php$ {
                root kodexplorer;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param SCRIPT_FILENAME /data/kodexplorer$fastcgi_script_name;
                include fastcgi_params;
        }
 }

 4.4 php.ini配置

新增加php配置 vim /etc/php.ini

#在最后一行
extension=mbstring.so
extension=php_gd2.dll
:wq!
#保存退出即可

配置完成,重启php-fpm服务 

#重启php-fpm服务
systemctl restart php-fpm

遇到的问题:

1、php的index.html无法访问,SElinux没有关闭导致;

2、是由于php-mbstring php-gd没有安装,并且php.ini没有添加配置(如上<新增加php配置>),图片无法加载‘

3、nginx无法访问到,是由于nginx配置不对,如下修改:

#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param SCRIPT_FILENAME /data/kodexplorer$fastcgi_script_name;

4.5 其他PHP项目部署

只需修改项目路径即可。

erver {

                listen 80;
                server_name localhost;
                 root /usr/local/Testphp/;
                 index  index.html index.htm index.php;
           location ~ \.php$ {
#/usr/local/Testphp 可以改成你自己的项目地址
                   root /usr/local/Testphp; 
                 fastcgi_pass 127.0.0.1:9000;
                   fastcgi_index index.php;
               # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;   
           fastcgi_param SCRIPT_FILENAME /usr/local/Testphp$fastcgi_script_name;
                    include fastcgi_params; 

五、总结

目前在HTTPServer这块基本可以看到有三种stack比较流行:

(1)Apache+mod_php5

(2)lighttp+spawn-fcgi

(3)nginx+PHP-FPM

三者后两者性能可能稍优,但是Apache由于有丰富的模块和功能,目前来说仍旧是老大。有人测试nginx+PHP-FPM在高并发情况下可能会达到Apache+mod_php5的5~10倍,现在nginx+PHP-FPM使用的人越来越多。

参考来源:

  1. Tomcat+php

https://www.cnblogs.com/cisum/p/7845028.html

  1. PHP三种运行方式

Windows下图文详解PHP三种运行方式(php_mod、cgi、fastcgi)_php要改为用php-cgi.exe执行-CSDN博客

  1. PHP运行模式cgi fast-cgicli 命令行、web模块模式

PHP运行模式cgi 、fast-cgi、cli 命令行、web模块模式_php grep 没cgi-CSDN博客

  1. Nginx+kodexplorer(可道云部署纪要)

Nginx+kodexplorer(可道云部署纪要)-CSDN博客

笔记日期:2019年11月21日

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1457651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MATLAB】BiGRU神经网络回归预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 BiGRU神经网络回归预测算法是一种基于双向门控循环单元&#xff08;GRU&#xff09;的多变量时间序列预测方法。该方法结合了双向模型和门控机制&#xff0c;旨在有效地捕捉时间序列数据中…

两个发散级数的和是否发散?

1、两个发散级数的和可能是收敛的也可能是发散的。 例子&#xff1a; 发散级数 ∑ 1 n \sum\frac{1}{n} ∑n1​和发散级数 ∑ ( 1 n 2 − 1 n ) \sum(\frac{1}{n^{2}}-\frac{1}{n}) ∑(n21​−n1​)的和是收敛级数&#xff1b; 发散级数∑(1/n) 和发散级数 ∑(1/n1/n) 的和是…

HarmonyOS 鸿蒙应用开发(十一、面向鸿蒙开发的JavaScript基础)

ArkTS 是HarmonyOS&#xff08;鸿蒙操作系统&#xff09;原生应用开发的首选语言。它是用于构建用户界面的一种TypeScript方言&#xff0c;扩展了TypeScript以适应HarmonyOS生态系统的UI开发需求。ArkTS 融合了TypeScript的静态类型系统和现代UI框架的设计理念&#xff0c;为开…

Redis 缓存(Cache)

什么是缓存 缓存(cache)是计算机中的一个经典的概念在很多场景中都会涉及到。 核心思路就是把一些常用的数据放到触手可及(访问速度更快)的地方&#xff0c;方便随时读取。 这里所说的“触手可及”是个相对的概念 我们知道&#xff0c;对于硬件的访问速度来说&#xff0c;通常…

通过VSCode开发Python项目

一、插件准备 Python 插件&#xff0c;必须 autoDocstring 生成注释&#xff0c;和Pycharm一样输入三个引号"""会生产注释结构 Todo Tree 高亮显示 TODO/FIXME 二、python相关设置 一&#xff09;设置python环境 按"F1"打开命令面板&#xff08;…

19. 【Linux教程】nano 编辑器

前面小节介绍了如何使用 vim 编辑器&#xff0c;相比于 vim 编辑器&#xff0c;nano 编辑器就比较简单了。nano 是 UNIX 系统中的一个文本编辑器&#xff0c;大部分 Linux 发行版本默认都安装了 nano 文本编辑器。 和 vim 编辑器相比&#xff0c;nano 编辑器就没有那么强大&am…

centos7 arm服务器编译安装onnxruntime-gpu

前言 ONNX Runtime是适用于Linux,Windows和Mac上ONNX格式的机器学习模型的高性能推理引擎,但在arm服务器上,onnxruntime只有CPU版的,GPU版的没有,因此需要自行去编译GPU版本的才可以。 环境准备 1、python3.8 2、cmake:2.26.0版本以上,可以直接下载aarch64版本的进行…

LeetCode42.接雨水(单调栈)

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 &#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,…

​中国手游发行商收入TOP30!

SensorTower 数据 2024年1月中国手游发行商&#xff0c;全球多款游戏在收入和用户增长方面取得的显著成绩。 1. 中国手游发行商全球表现&#xff1a;2024年1月&#xff0c;共有38个中国厂商入围全球手游发行商收入榜TOP100&#xff0c;合计收入达到19.6亿美元&#xff0c;占榜单…

PDF控件Spire.PDF for .NET【安全】演示:如何在 PDF 中添加签名字段

Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库&#xff0c;开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理&#xff0c;且无需安装 Adobe Acrobat。 E-iceblue 功能类库Spire 系列文档处…

mysql mgr集群部署

一、前言 mysql mgr集群是为了实现mysql高可用&#xff0c;分为单主集群和多主集群&#xff0c;单主集群只有一个主节点可写&#xff0c;节点发生故障时&#xff0c;自动进行主从的故障切换&#xff0c;多主集群所有节点都可写&#xff0c;当节点发生故障时&#xff0c;将故障节…

【RPG Maker MV 仿新仙剑 战斗场景UI (二)】

RPG Maker MV 仿新仙剑 战斗场景UI 二 战斗指令菜单原仙剑战斗指令图RMMV战斗指令对应代码战斗指令菜单代码效果 战斗指令菜单 原仙剑战斗指令菜单是使用方向键控制&#xff0c;同时按照使用情况正好对应四个指令和四个方向&#xff0c;同时没有选中的菜单用黑色透明图片覆盖&…

层级关联,审批人功能

一个需求要求选择一级&#xff0c;下方展示一级的效果 后端给了审批人数据&#xff0c;但是数据需要单独处理 <template><div class"box"><el-form :model"ruleForm" :rules"rules" ref"ruleForm" label-width"…

【鸿蒙系统学习笔记】ArkTS开发语言

一、背景 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。 二、基本语法 2.1、基本语法介绍 ArkTS的基本组成&#xff0c;资料来自…

【洛谷题解】P8627 [蓝桥杯 2015 省 A] 饮料换购

题目链接&#xff1a;[蓝桥杯 2015 省 A] 饮料换购 - 洛谷 题目难度&#xff1a;普及- 涉及知识点&#xff1a;换购 题意&#xff1a; 分析&#xff1a;一直换购直至瓶盖数<3为只 AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int main() {i…

极其抽象的SpringSecurity理解

原始&#xff1a;A → B Security&#xff1a;A → S → B 太抽象了&#xff0c;看不懂啊T_T 抽象故事 故事大概&#xff1a;C是一个大区&#xff0c;拥有巨大的火力&#xff08;C准备联合B吞并掉A&#xff09;&#xff0c;A得到了这个消息&#xff0c;…

java:Java中的逻辑控制

顺序结构 在Java中&#xff0c;顺序结构是指代码按照从上到下的顺序依次执行。以下是一个简单的Java程序示例&#xff0c;展示了顺序结构的使用&#xff1a; public class SequenceStructureExample {public static void main(String[] args) {// 声明和初始化变量int num1 10…

51-2 万字长文,深度解读端到端自动驾驶的挑战和前沿

去年初&#xff0c;我曾打算撰写一篇关于端到端自动驾驶的文章&#xff0c;发现大模型在自动驾驶领域的尝试案例并不多。遂把议题扩散了一点&#xff0c;即从大模型开始&#xff0c;逐渐向自动驾驶垂直领域靠近&#xff0c;最后落地到端到端。这样需要阐述的内容就变成LLM基础模…

SAP PP学习笔记 - 豆知识05 - 如何定义品目状态,如何删除品目,如何扩张品目

本章讲SAP 中一些常用操作。 - 设定品目状态&#xff1a;控制让一个品目&#xff08;物料&#xff09;准备好了以后再提供出来给大家 - 删除品目&#xff1a;一般来说是逻辑删除&#xff0c;但是做了归档之后&#xff0c;也可以物理删除 - 扩张品目&#xff1a;品目的View非…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-19-处理鼠标拖拽-中篇

1.简介 上一篇中&#xff0c;主要是介绍了拖拽的各种方法的理论知识以及实践&#xff0c;今天宏哥讲解和分享一下划取字段操作。例如&#xff1a;需要在一堆log字符中随机划取一段文字&#xff0c;然后右键选择摘取功能。 2.划取字段操作 划取字段操作就是在一段文字中随机选…