2019独角兽企业重金招聘Python工程师标准>>>

这里是我在搭建php环境时收集的资料供大家参考:

现在PHP官网上下载PHP安装包都有VC11或VC9的字样,这是什么含义,我们应该下载哪种安装包更好呢?其实PHP官网给出了答案:

VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本。(现在PHP已经没有VC6了)。

VC9意思就是该版本PHP是用VisualStudio2008编译的,而VC11则是用VisualStudio2012编译的。这意味着

如果你下载的是VC9版本的,就需要先安VisualC++RedistributableforVisualStudio2008SP1,

如果你下载的是VC11版本的,就需要先安VisualC++RedistributableforVisualStudio2012.

搭建php首先看操作系统的版本,如果是Windows的在这里下:http://windows.php.net/download/

操作系统是32位还是64位?如果是32位的,就选择带“x86”的版本,如果是64位的,就选择带“x64”的版本。然后看WEB服务器是什么?如果是IIS系列,就选择带“Non Thread Safe”的版本,如果是Apache httpd系列,就选择带“Thread Safe”的版本。如果是Apache httpd还要看这个二进制版本是怎么编译的,有三种编译类型,分别是:VC6、VC9、VC11(分别代表Visual C++ 6、Visual C++ 2008、Visual C++ 2012)。这里就有麻烦了:PHP官方的最新版本5.5已经用VC11编译,5.4是用VC9编译的。可是Apache httpd的最新版本呢,至今还是用VC6编译。这意味着一个惊人的事实:Apache httpd的官方版本和PHP的官方版本竟然是无法兼容的!那现有的Windows下的Apache+PHP是怎么搞的呢?可以自己用VC11编译Apache httpd,但这太折腾了,PHP官方建议下载第三方打包好的Apache httpd版本,推荐了这个站点:http://www.apachelounge.com/download/,需要说明一点:这个VC11不支持XP,如果你像我一样有XP怀旧症,最高只能升级到5.4.24,5.5是用VC11编译的,而VC11不支持XP和2003。

如果是Linux系的在这里下载PHP的源码:http://cn2.php.net/downloads.php

与上面Windows版不同的是,这里下载到的不能直接用,只是PHP的源码,要安装需要自己编译,要编译就需要安装gcc、make等一堆编译软件。看到文档里说./configure、make、make install,针对的就是PHP的源码版本而言。

自己编译php就更麻烦了,依赖的库一大堆,等着人掉进去的坑也有一大堆,我将在另一篇文章里说。如果嫌麻烦,可以找已经编译好的版本,具体的说就是各个发行版的官方的软件库。下面以流行的ubuntu系和centos系为例分别说明;

deb包管理式(ubuntu、Debian)

用apt-cache search php命令可以搜出很多结果,我们需要是“php5”,完整的命令是:apt-get install php5

这显然不是永远适用的,因为命令中有版本号5,未来PHP6是什么情况谁也不知道。

如果想在shell中安装一个命令行的php引擎,就安装这个包

apt-getinstall php5-cli

RPM包管理(Fedora、RedHat、SUSE、CentOS)

yuminstall php

如果是php命令行,就安装yuminstall php-cli

如何选择Thread Safe和Non ThreadSafe版本?

    Windows版的PHP从版本5.2.1开始有ThreadSafe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。

  从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是 PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。

  为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。

     先从字面意思上理解,Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。

 因此,如果是使用ISAPI的方式来运行PHP就必须用ThreadSafe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。

   再来看PHP的两种执行方式:ISAPI和FastCGI。

  ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;

    而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。

转载于:https://my.oschina.net/yoyo1987/blog/628759

PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择相关推荐

  1. php vc9 vc6,PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选

    现在PHP官网上下载PHP安装包都有VC11或VC9的字样,这是什么含义,我们应该下载哪种安装包更好呢?其实PHP官网给出了答案: VC6版本是使用Visual Studio 6编译器编译的,如果你的 ...

  2. PHP5 VC9、VC6、Thread Safe、Non Thread Safe各个版本区别

    2019独角兽企业重金招聘Python工程师标准>>> 一.如何选择PHP5.3的VC9版本和VC6版本 网站推广 VC6版本是使用Visual Studio 6编译器编译的,如果你 ...

  3. PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe 是什么意思?

    我最近在 PHP 官网上看到又有新版的 PHP 下载了,于是上去找找 For Windows 的版本,可是一看确傻眼了,一共给了四个版本,VC9 x86 Non Thread Safe.VC9 x86 ...

  4. 关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题

    一.如何选择PHP5.3的VC9版本和VC6版本 VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本. VC9版本是使用Visua ...

  5. PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe

    我最近在 PHP 官网上看到又有新版的 PHP 下载了,于是上去找找 For Windows 的版本,可是一看确傻眼了,一共给了四个版本,VC9 x86 Non Thread Safe.VC9 x86 ...

  6. PHP 5.3.1 安装包 VC9 VC6 区别是什么

    转自:http://www.php100.com/html/webkaifa/PHP/PHP/2010/0103/3746.html 最近在PHP官网上看到又有新版的PHP下载了,于是上去找找 For ...

  7. IOCP Thread Pool 在 C# 的Safe实现

    IOCP Thread Pool 在 C# 的Safe实现 IOCP是一种高性能的I/O模型,更多资料可以google下.     在.Net Framework下,没有提供IOCP的类库,我们需要引 ...

  8. java thread 多线程_java用Thread方式创建多线程

    进程:一个正在执行的程序,每一个进程都有一个执行顺序,该 顺序是一个执行路径,或者叫一个控制单元. 线程:进程中一个独立的控制单元.线程控制着进程的执行. 一个进程中至少有一个线程. java VM中 ...

  9. 【java】Thread.Sleep(0) 与 Thread.onSpinWait

    1.概述 转载:Thread.Sleep 与 Thread.onSpinWait 2. Thread.Sleep 一般情况下,我们让线程等待一段时间都是使用Thread.sleep()命令.比如下面这 ...

最新文章

  1. 用 Windows API “GetAdaptersInfo” 获取 MAC 时遇到的问题
  2. 【零基础学Java】—Java 日期时间(三十一)
  3. 帝国后台报错:out of memory
  4. html5晋级之路-学习笔记表单
  5. Makefile中的@
  6. 4 软件业务分析要点
  7. 电子科学与技术毕业论文题目【452个】
  8. 牛客网——Java刷题篇
  9. 明翰英语教学系列之音标篇V0.2(持续更新)
  10. lrzsz的交叉编译与使用
  11. Redhat linux命令行连接wifi
  12. 在购买太阳眼镜时怎样辨别好坏
  13. chemdraw怎么画拐弯的箭头_怎么样绘制弧形箭头?
  14. 【计算几何7】帝国边界划分问题【Voronoi图的原理】
  15. 自律·财大自习·Java
  16. JavaSE-IO流
  17. 动态规划解决小青蛙跳台阶问题
  18. c++手动去除字符串中的空格和tab
  19. 十六进制的加减乘除c语言,十六进制的乘除法怎么运算
  20. Docker与自动化部署

热门文章

  1. less中的for循环
  2. 一些关于自己的未来的东西
  3. KVC/KVO 本质
  4. npm install mysql --save-dev
  5. JavaScript语义基础
  6. Mysql异常问题排查与处理——mysql的DNS反向解析和客户端网卡重启
  7. 移动web开发DRP问题
  8. spring boot的多环境部署
  9. HTML5概要与新增标签
  10. Knockout中ko.utils中处理数组的方法集合