php的4种常用运行方式详解


Posted in PHP onDecember 22, 2016

php的4种常用运行方式:CGI、FastCGI、APACHE2HANDLER、CLI。

1、CGI

CGI即通用网关接口(common gatewag interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。

CGI方式在遇到连接请求(用户 请求)先要创建cgi的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi 方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。都会当用户请求数量非常多时,会大量挤占系统的资源如内 存,CPU时间等,造成效能低下。

2、FastCGI

fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。
Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)。FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。

当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

在上述情况中,你可以想象CGI通常有多慢。每一个Web 请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的 好处是,持续数据库连接(Persistent database connection)可以工作。

3、APACHE2HANDLER
PHP作为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出 现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。

4、CLI

cli是php的命令行运行模式,cli端的运行命令有时会很有用,以下总结几个:

查看php版本信息

eric:~ youngeric$ php -v

PHP 5.5.38 (cli) (built: Oct 1 2016 23:03:00) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

查看当前php的扩展

eric:~ youngeric$ php -m

[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
......

查看php.ini配置信息(相当于使用phpinfo()函数)

eric:~ youngeric$ php -ini

phpinfo()
PHP Version => 5.5.38

System => Darwin eric.local 16.1.0 Darwin Kernel Version 16.1.0: Wed Oct 19 20:31:56 PDT 2016; root:xnu-3789.21.4~4/RELEASE_X86_64 x86_64
Build Date => Oct 1 2016 23:01:51
Configure Command => './configure' '--prefix=/usr/local/Cellar/php55/5.5.38_11' '--localstatedir=/usr/local/var' '--sysconfdir=/usr/local/etc/php/5.5' '--with-config-file-path=/usr/local/etc/php/5.5' '--with-config-file-scan-dir=/usr/local/etc/php/5.5/conf.d' '--mandir=/usr/local/Cellar/php55/5.5.38_11/share/man' '--enable-bcmath' '--enable-calendar' '--enable-dba' '--enable-exif' '--enable-ftp' '--enable-gd-native-ttf' '--enable-mbregex' '--enable-mbstring' '--enable-shmop' '--enable-soap' '--enable-sockets' '--enable-sysvmsg' '--enable-sysvsem' '--enable-sysvshm' '--enable-wddx' '--enable-zip' '--with-freetype-dir=/usr/local/opt/freetype' '--with-gd' '--with-gettext=/usr/local/opt/gettext' '--with-iconv-dir=/usr' '--with-icu-dir=/usr/local/opt/icu4c' '--with-jpeg-dir=/usr/local/opt/jpeg' '--with-kerberos=/usr' '--with-libedit' '--with-mhash' '--with-ndbm=/usr' '--with-png-dir=/usr/local/opt/libpng' '--with-xmlrpc' '--with-zlib=/usr' '--with-readline=/usr/local/opt/readline' '--without-gmp' '--without-snmp' '--with-libxml-dir=/usr/local/opt/libxml2' '--with-pdo-odbc=unixODBC,/usr/local/opt/unixodbc' '--with-unixODBC=/usr/local/opt/unixodbc' '--with-bz2=/usr' '--with-openssl=/usr/local/opt/openssl' '--enable-fpm' '--with-fpm-user=_www' '--with-fpm-group=_www' '--with-curl' '--with-xsl=/usr' '--with-ldap' '--with-ldap-sasl=/usr' '--with-mysql-sock=/tmp/mysql.sock' '--with-mysqli=mysqlnd' '--with-mysql=mysqlnd' '--with-pdo-mysql=mysqlnd' '--disable-opcache' '--enable-pcntl' '--without-pear' '--enable-dtrace' '--disable-phpdbg' '--enable-zend-signals'
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /usr/local/etc/php/5.5
Loaded Configuration File => /usr/local/etc/php/5.5/php.ini
Scan this dir for additional .ini files => /usr/local/etc/php/5.5/conf.d
......

查看函数信息

eric:~ youngeric$ php --rf date

Function [ <internal:date> function date ] {
 - Parameters [2] {
  Parameter #0 [ <required> $format ]
  Parameter #1 [ <optional> $timestamp ]
 }
}

查看类信息

eric:~ youngeric$ php --rc pdo

Class [ <internal:PDO> class PDO ] {

 - Constants [89] {
  Constant [ integer PARAM_BOOL ] { 5 }
  Constant [ integer PARAM_NULL ] { 0 }
  Constant [ integer PARAM_INT ] { 1 }
  Constant [ integer PARAM_STR ] { 2 }
  Constant [ integer PARAM_LOB ] { 3 }
  Constant [ integer PARAM_STMT ] { 4 }
  Constant [ integer PARAM_INPUT_OUTPUT ] { 2147483648 }
 ......

检测php代码

eric:~ youngeric$ php -l jiance.php

PHP Parse error: syntax error, unexpected end of file, expecting ',' or ';' in jiance.php on line 3
Errors parsing jiance.php

作为世界上最好的语言,php甚至还内置了服务器的功能(有没有很震惊的样子)。

eric:Desktop youngeric$ php -S 127.0.0.1:8080

PHP 5.5.38 Development Server started at Thu Dec 22 09:44:20 2016
Listening on http://127.0.0.1:8080
Document root is /Users/youngeric/Desktop
Press Ctrl-C to quit.
[Thu Dec 22 09:44:29 2016] 127.0.0.1:52988 [404]: / - No such file or directory
[Thu Dec 22 09:44:29 2016] 127.0.0.1:52989 [404]: /favicon.ico - No such file or directory

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php中的实现trim函数代码
Mar 19 PHP
php 图片加水印与上传图片加水印php类
May 12 PHP
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
php使用google地图应用实例
Dec 31 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
Yii 框架控制器创建使用及控制器响应操作示例
Oct 14 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 #PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
Dec 21 #PHP
Docker配置PHP开发环境教程
Dec 21 #PHP
PHP符合PSR编程规范的实例分享
Dec 21 #PHP
利用PHP生成CSV文件简单示例
Dec 21 #PHP
PHP实现支付宝即时到账功能
Dec 21 #PHP
简单实现PHP留言板功能
Dec 21 #PHP
You might like
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
PHP自定义多进制的方法
2016/11/03 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
js 文件引入实现代码
2010/04/23 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
python中字符串的操作方法大全
2018/06/03 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
大学生关于奋斗的演讲稿
2014/01/09 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
协议书范本
2014/04/23 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
秦兵马俑导游词
2015/02/02 职场文书
校园安全学习心得体会
2016/01/18 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python