Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种...
2019独角兽企业重金招聘Python工程师标准>>>
今天为在Windows下建立PHP开发环境,在考虑下载何种PHP版本时,遭遇一些让我困惑的情况,为了解决这些困惑,不出意料地牵扯出更多让我困惑的问题。
为了将这些困惑一网打尽,我花了一下午加一晚上的时间查阅了大量资料,并做了一番实验后,终于把这些困惑全都搞得清清楚楚了。
说实话,之所以花了这么多时间,很大程度上是由于网上的资料几乎全都是支离破碎、以讹传讹的。既然我已经搞懂了,就花时间整理出来,即方便自己看,也便于大家阅读。相信通过这篇文章,可以解答很多在Windows下搭建PHP开发环境的朋友的困惑。
关于从何处下载Apache:
要安装Apache,你可能想当然地会去Apache官方网站下载适用于Windows的二进制版本。而这恰恰错了!
PHP官方不建议在Windows下安装从apache.org网站下载的Apache二进制安装包。原因是如果你使用来自apache.org的安装包,则由于这些安装包是基于陈旧的Visual Studio 6编译的,导致你不得不必须使用同样陈旧的PHP版本(即VC6的PHP版本。也即使用Visual Studio 6编译的PHP版本)才能与其配合使用。
要想使用最新版的PHP,应听从PHP的官方建议。PHP官方的建议是你在Windows下可以使用IIS,或者使用来自Apache Lounge(www.apachelounge.com)的Apache版本。
Apache Lounge所提供的Apache二进制安装包是使用VC11建立的。因此可搭配最新版本的PHP使用。
网上很多资料说如果你是在Windows下使用 Apache,则必须使用PHP的VC6版本,只有使用IIS时才能使用VC9及以上版本,完全是没有搞清情况的以讹传讹。
如何选择PHP版本(选择线程安全还是非线程安全):
在Windows下安装PHP,在选择PHP版本上很有讲究。
Windows下的PHP版本分两种:线程安全版本与非线程安全版本。
如果你打算使用IIS,则你可以以ISAPI或FastCGI这两种方式来安装PHP。CGI的方式因为效率低下,故不予考虑。
如果你要在IIS中以FastCGI方式使用PHP,则你应该使用PHP的非线程安全的版本(Non-Thread Safe,NTS)。原因是以FastCGI方式安装PHP时,PHP拥有独立的进程,并且FastCGI是单一线程的,不存在多个线程之间可能引发的相互干扰(这种干扰通常都是由于全局变量和静态变量导致的)。由于省去了线程安全的检查,因此使用FastCGI方式比ISAPI方式的效率更高一些。
如果你要在IIS中以ISAPI的方式使用PHP,则你应该使用PHP的线程安全版本(Thread Safe,TS)。原因是PHP以ISAPI方式安装时,PHP没有独立的进程,而是作为DLL被IIS加载运行的,即是依附于Web服务器进程的。当Web服务器运行在多线程模式下(IIS正是这种情况),PHP自然也就运行在多线程模式下。只要是在多线程模式下运行,就可能存在线程安全问题,因此应选择PHP的线程安全版本。
但在这里还有必要说明一下,尽管Apache本身是线程安全的,同时你也选择了PHP的线程安全版本,但由于一些Apache和PHP下的第三方扩展最初是基于Unix的多进程思想开发出来的,在设计开发时没有考虑线程安全的问题,因此,不排除在这种情况下仍然存在IIS被某些第三方扩展搞崩溃的可能。
如果你打算使用Apache,则你可以以模块、ISAPI、FastCGI这三种方式来安装PHP。CGI的方式因为效率低下,故不予考虑。
如果你要在Apache中以模块方式安装PHP,则你应该使用PHP的线程安全的版本。原因是当PHP作为Apache的模块安装时,PHP没有独立的进程,而是作为模块以DLL的形式被加载到Apache中的,是随Apache的启动而启动的,而Windows下的Apache为多线程工作模式,因此PHP自然也就运行在多线程模式下。因此,这种情况下应使用PHP的线程安全版本。
再来看ISAPI的情况。通常认为ISAPI是配合IIS使用的,因为ISAPI最初就是微软为IIS开发的。但Apache现在也可以通过加载mod_isapi.so模块来实现ISAPI的功能,以允许PHP以ISAPI的方式安装。.so文件是Apache自1.3版本后制定的用于Windows下的模块命名规则,对于Windows下的Apache而言,.so与.dll文件一样,都是动态链接库文件。
当要以ISAPI方式来安装PHP时,通常是加载一个名如phpXisapi.dll的DLL文件,其中的X为阿拉伯数字4、5等等这样子。
但一般不建议在Apache中以ISAPI方式来安装PHP,原因是到目前为止,Apache通过mod_isapi.so模块来实现的ISAPI功能并不完整,并未完整实现微软对ISAPI所制定的全部规范。
同样的,由于以ISAPI方式来安装PHP时,PHP也没有独立的进程,也是作为模块被加载到Apache中的,因此,同样也需要使用PHP的线程安全版本。
如果你要在Apache中以FastCGI方式使用PHP,则同在IIS中使用FastCGI的PHP的情况一样,你应该使用PHP的非线程安全的版本。原因是在Apache中以FastCGI方式安装PHP时,PHP拥有独立的进程,并且FastCGI是单一线程的,故应使用PHP的非线程安全版本以提高性能。
转载于:https://my.oschina.net/bobchow/blog/690945
Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种...相关推荐
- MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)...
网上有一篇shangdong_chu网友写的文章介绍如何在Eclipse上配置MonkeyRunner,做了挺好的一个描述,但经过我的试验在我的环境上碰到了Jython解析器出错的问题,且该文章缺少P ...
- Windows下Ionic Android开发环境搭建
转自 http://www.itwap.net/ArticleContent.aspx?id=26 来源: itwap.net 作者: 词略 时间: 2015-4-2 16:57:28 (一)Ioni ...
- AliOS Things物联网操作系统学习第一步:Windows下AliOS Things开发环境搭建
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 人工智能编程入门博客 之前如果想要使用AliOS Things开发ESP8266模块的固件,开发环境 ...
- Vue.js学习总结(1)——Windows下Vue.js开发环境搭建
Vue.js是一套构建用户界面的 "渐进式框架".与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已 ...
- Windows下的Java开发环境搭建+常用软件(含下载传送门)
电脑硬盘坏掉了,要重新搭建开发环境- 文章目录 0x00 前言 0x01 环境 0x02 开发相关软件下载 0x03 其他常用软件 0x00 前言 如果是新电脑,个人建议的软件安装步骤是 谷歌浏览器- ...
- 最新Windows下Go语言开发环境搭建+GoLand配置
一.下载Go语言开发包 大家可以在Go语言官网(https://golang.google.cn/dl/)下载 Windows 系统下的Go语言开发包,如下图所示. 这里我们下载的是 64 位的开发包 ...
- Windows 下 OpenGL ES 开发环境搭建
2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/u/474872/blog/352728
- 搭建Windows下Android应用开发环境——Eclipse/Android/ADT
搭建Windows下Android应用开发环境--Eclipse/Android/ADT 田海立@CSDN 2011/07/18 Window下Android的应用开发环境,很早以前就在我的机器上搭建 ...
- php环境搭建appserv,在 Windows 下安装 PHP 开发环境(基于 Appserv)
在 Windows 下安装 PHP 开发环境(基于 Appserv) 1.Appserv 是什么? Appserv 是PHP网页架站工具组合包,可以将网络上免费的架站资源重新包装成单一的安装程序.它提 ...
最新文章
- js获取URL请求参数与改变src
- windows安装pygame
- linux etc profile生效,让/etc/profile文件修改后立即生效
- JAVA听力源码_剑桥雅思13Test4Section4听力原文与答案 The History of Coffee
- python 制作聊天程序-python实现点对点聊天程序
- 忘记linux密码怎么办?
- GB2312简体中文编码表(转)
- 如何判断函数极值点与拐点
- 班级网站-前端网页技术精美完整源码HTML+CSS+JS
- PX4 Bootloader解析
- 云脉相册管理,检索轻松便捷
- 虹科PCAN在工程机械中的应用
- initiator、target、lun之间的映射
- 龙芯软件开发(6)--CPU龙芯2E
- 儒家、道家、释家之异同(下)
- creator中关于旋转所使用的欧拉角和四元数
- 红外图像-自然图像对(Color-Thermal)数据集,附加百度云链接
- 谷歌浏览器被2345,hao123,搜狗劫持解决办法
- 线性高斯反问题的解--最大似然法
- 安卓禁用硬件加速_Android硬件加速详解
热门文章
- php生成静态html分页实现方法
- C#制作WinForm控件
- 分治法在求解凸包问题中的应用(JAVA)--快包算法
- oracle 内存分配,Oracle调优修改10g,11g内存分配
- 吕帅 计算机学院,刘磊-吉林大学计算机科学与技术学院
- android 通知_Android 全局消息通知框架实现(类似EventBus)
- mybatis 映射成多个list_SSM:Mybatis架构与原理
- SpringCloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard 和 Turbine
- 入职新公司,如何快速上手公司业务?
- 2021互联网医疗行业洞察