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

一、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 127PHPinidir "C:/php5/php.ini"//修改配置DirectoryIndex index.html index.php//追加index.phpAddType 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.comScriptAlias /fcgi-bin/   /usr/local/php/bin/   #定义目录映射 /fcgi-bin/ 代替 /usr/local/php/bin/Options +ExecCGIAddHandler 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 ExecCGIOrder allow,denyallow 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下载

# 下载kodexplorerwget http://static.kodcloud.com/update/download/kodexplorer4.39.zip# 解压到/data/kodexplorer目录下(自定义目录,本文在/data/kodexplorer)cd /data/kodexplorerunzip 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.mzph.cn/news/691312.shtml

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

相关文章

HarmonyOS4.0系列——08、整合UI常用组件

HarmonyOS4.0 系列——08、UI 组件 Blank Blank 组件在横竖屏占满空余空间效果 // xxx.ets Entry Component struct BlankExample {build() {Column() {Row() {Text(Button).fontSize(18)Blank()Toggle({type: ToggleType.Switch}).margin({top: 14,bottom: 14,left: 6,righ…

Windows 使设置更改立即生效——并行发送广播消息

目录 前言 1 遍历窗口句柄列表 2 使用 SendMessageTimeout 发送延时消息 3 并行发送消息实现模拟广播消息 4 修改 UIPI 消息过滤器设置 5 托盘图标刷新的处理 6 完整代码和测试 本文属于原创文章&#xff0c;转载请注明出处&#xff1a; https://blog.csdn.net/qq_5907…

Java学习24--异常

异常 软件运行过程中的各种意料之外叫做Exception&#xff0c;比如要读取的文件找不到&#xff0c;准备联网发现没网&#xff0c;等着int参数来了个String 注意Error和exception不一样&#xff0c;error错的比较猛&#xff0c;一般是直接把JAVA整个搞崩了&#xff0c;比如内存…

洛谷C++简单题小练习day15—计算阶乘小程序(不用循环)

day15--计算阶乘小程序--2.19 习题概述 题目描述 求 n!&#xff0c;也就是 123⋯n。 挑战&#xff1a;尝试不使用循环语句&#xff08;for、while&#xff09;完成这个任务。 输入格式 第一行输入一个正整数 n。 输出格式 输出一个正整数&#xff0c;表示 n! 代码部分 …

瑞芯微RK3588驱动配置之DVP摄像头1

发现很多人不会RK3588DVP摄像头的驱动配置&#xff0c;这里简单分享一下&#xff0c;各位老铁点个赞&#xff0c;一键三连&#xff0c;给点动力。 这篇主要讲一下DTS设备树的配置&#xff0c;下篇写具体的驱动设计。 因为瑞芯微的大部分芯片都支持DVP摄像头&#xff0c;配置都大…

Android内存分析

1.分析某个进程的内存情况 1.1 生成.hprof文件 可以在运行的设备上&#xff0c;使用adb命令生成 .hprof文件&#xff0c;表示在执行命令的那一刻&#xff0c;该进程的内存情况。如下&#xff1a; am dumpheap com.example.demo /data/local/tmp/demo.hprof这里就是对包名为c…

【力扣白嫖日记】1890.2020年最后一次登录

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1890.2020年最后一次登录 表&#xff1a;Logins 列名类型user_idinttime_stampvarchar (user_id, time_sta…

Unity UGUI的DrawCall优化

Unity UGUI是一种强大的用户界面设计工具&#xff0c;它可以帮助开发者快速创建各种界面元素&#xff0c;从按钮和文本到滑块和面板等。然而&#xff0c;在使用UGUI时&#xff0c;一个常见的性能瓶颈就是DrawCall过多导致的性能下降。在本文中&#xff0c;我们将深入探讨UGUI的…

搜索算法(算法竞赛、蓝桥杯)--BFS八数码难题、抓住那头牛、魔板问题

1、B站视频链接&#xff1a;B14 BFS 八数码难题_哔哩哔哩_bilibili 题目链接&#xff1a;八数码难题 - 洛谷 #include <bits/stdc.h> using namespace std; char c; string str; unordered_map<string,int> d;//记录步数 queue<string> q; int dx[4]{-1,0,1…

微服务—RabbitMQ高级(业务在各方面的可靠性)

本博客为个人学习笔记&#xff0c;学习网站&#xff1a;2023黑马程序员RabbitMQ入门到实战教程 高级篇章节 目录 生产者可靠性 生产者重连机制 生产者确认机制 介绍 实现 总结与建议 MQ可靠性 数据持久化 LazyQueue 消费者可靠性 消费者确认机制 失败重试机制 失…

深度学习之pytorch实现逻辑斯蒂回归

深度学习之pytorch实现逻辑斯蒂回归 解决的问题数学公式logiatic函数损失值 代码与线性回归代码的区别数据损失值构造回归的函数 结果分析 解决的问题 logistic 适用于分类问题&#xff0c;这里案例( y为0和1 &#xff0c;0和 1 分别代表一类&#xff09; 于解决二分类&#xf…

2024上海国际地下空间工程与技术展览会

2024上海国际地下空间工程与技术展览会 Underground Space Project and Technology Exhibition 2024 2024年10月31日-11月2日 上海世博展览馆 国展路1099号 展会规模&#xff1a;25000平方米 主办单位&#xff1a;联合国人居署 上海市住房与城乡建设管理委员会 一、城博会…

农村分散式污废水处理需要哪些设备

农村地区由于存在分散式的生活污废水&#xff0c;需要通过适合的设备进行处理和处理。在农村分散式污废水处理中&#xff0c;有几种主要的设备是必不可少的&#xff1a; 1. 废水收集器&#xff1a;废水收集器用于将分散式废水收集起来&#xff0c;确保其能够被有效地输送至处理…

高压圆盘电阻器----氧化锌电阻(1)?

特点 1&#xff09;100%陶瓷固体压铸结构&#xff0c;主要由氧化锌、氧化铝、氧化镁和人造粘土组成 2&#xff09;承受高脉冲能量&#xff0c;适用于超高压环境&#xff0c;可用于1000kV以上电路&#xff0c;瞬时功率可达3kkw 3&#xff09;无感设计&#xff0c;非传统绕线&…

【ArcGIS Pro二次开发】(82):玩个花活_控规指标块生成

一、要实现的效果 废话不多说&#xff0c;这次要实现的是类似控规指标块的标注&#xff1a; 这里只是示例&#xff0c;用了5个格子&#xff0c;做成9个格子也是可以的。 实现这个效果最关键的是要用到Pro中的复合标注。 关于复合标注的用法可以搜一下帮助里的【使用复合注释…

基于WOA优化的Bi-LSTM多输入回归预测(Matlab)鲸鱼算法优化双向长短期神经网络回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 鲸鱼优化算法&#xff08;WOA&#xff09;&#xff1a; 双向长短期神经网络&#xff08;Bi-LSTM&#xff09;&#xff1a…

raspi_os 32-bit lite下使用摄像头

前置条件&#xff1a;已经烧录32位版本的raspi os 按照如下步骤即可使用摄像头&#xff1a; 将SD卡放入读卡器插到电脑上根目录下打开config.txtctrl f 查找到camera_auto_detect1将其注释定位到文件末尾添加如下 gpu_mem128 start_x1将SD卡放回树莓派启动&#xff0c;键入…

VMware下安装银河麒麟V10操作系统

VMware下安装银河麒麟V10操作系统 文章目录 下载在VMware中应用编辑虚拟机设置 在麒麟系统内安装 下载 官网下载&#xff1a;https://www.kylinos.cn/ 银河麒麟、中标麒麟、开放麒麟、星光麒麟 在VMware中应用 1.新建虚拟机 2.稍后安装操作系统 3.新建虚拟机向导&#xff0…

【无标题】力扣报错:member access within null pointer of type ‘struct ListNode‘

项目场景&#xff1a; 做单链表反转题目&#xff0c;报错&#xff1a;member access within null pointer of type ‘struct ListNode’ 题目链接:LINK 问题描述 我明明在初始化指针时候&#xff0c;已经处理了n2->next情况却依然报错 这个报错提示含义是&#xff1a;大概就…

Photoshop 2023(Ps)下载安装及详细安装教程

Photoshop(Ps)的介绍 Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是由AdobeSystems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具&#xff0c;可以有效地进行图片编辑和创造工作。PS有很多功能&#xff0c;在图像、…