【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 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,接下来做如下的配置:
- LoadModule fcgid_module modules/mod_fcgid.so // line 128追加
- FcgidInitialEnv PHPRC "c:/php5" //php配置文件 line 129追加
- AddHandler fcgid-script .php //添加句柄 即后缀 什么样的文件需要fastcgi解释 line 407追加
- FcgidWrapper "c:/php5/php-cgi.exe" .php //解释器路径 line 408
- 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 allDirectory>AddType application/x-httpd-php .php #增加MIME类型
- AddHandler php-fastcgi .php #.php结尾的请求都要用php-fastcgi来处理
- Action php-fastcgi /fcgi-bin/php-cgi #设置php-fastcgi的处理器
- IfModule>)
三、tomcat +PHP php-cgi.exe模式(强烈不推荐,请略过)
实操成功,太麻烦,不推荐尝试。
3.1 php.ini 配置
3.2 tomcat 配置文件
3.2.1 content.xml配置
3.2.1 web.xml配置
在tomcat里面的conf文件夹下面的web.xml修改一下
- <servlet>
- <servlet-name>phpservlet-name>
- <servlet-class>org.apache.catalina.servlets.CGIServletservlet-class>
- <init-param>
- <param-name>clientInputTimeoutparam-name>
- <param-value>200param-value>
- init-param>
- <init-param>
- <param-name>debugparam-name>
- <param-value>0param-value>
- init-param>
- <init-param>
- <param-name>executableparam-name>
- <param-value>F:\tomcat\php\php-cgi.exeparam-value>
- init-param>
- <init-param>
- <param-name>passShellEnvironmentparam-name>
- <param-value>trueparam-value>
- init-param>
- <init-param>
- <param-name>cgiPathPrefixparam-name>
- <param-value>WEB-INF/phpbinparam-value>
- init-param>
- <load-on-startup>5load-on-startup>
- servlet>
- <servlet-mapping>
- <servlet-name>phpservlet-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使用的人越来越多。
参考来源:
- Tomcat+php
https://www.cnblogs.com/cisum/p/7845028.html
- PHP三种运行方式
Windows下图文详解PHP三种运行方式(php_mod、cgi、fastcgi)_php要改为用php-cgi.exe执行-CSDN博客
- PHP运行模式cgi 、fast-cgi、cli 命令行、web模块模式
PHP运行模式cgi 、fast-cgi、cli 命令行、web模块模式_php grep 没cgi-CSDN博客
- Nginx+kodexplorer(可道云部署纪要)
Nginx+kodexplorer(可道云部署纪要)-CSDN博客
笔记日期:2019年11月21日
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |