php tomcat配置_Tomcat下部署PHP

本文详细介绍了Windows环境下PHP与Apache、IIS的配置方法,包括线程安全版和非线程安全版的选择。对于Apache,推荐使用VC6版本的PHP,而IIS则适合使用VC9版本,尤其是配合FastCGI时,非线程安全版能提升效率。文中还提到了CGI、ISAPI、FastCGI的区别以及如何根据运行方式进行PHP版本选择。
摘要由CSDN通过智能技术生成

php线程安全版和非线程安全版本区别

1、windows + IIS +FastCGI :使用非线程安全版本。

解释:

以FastCGI方式安装PHP时,PHP拥有独立的进程,并且FastCGI是单一线程的,不存在多个线程之间可能引发的相互干扰(这种干扰通常都是由于全局变量和静态变量导致的)。由于省去了线程安全的检查,因此使用FastCGI方式比ISAPI方式的效率更高一些。2、windows + IIS +ISAPI :使用线程安全版本。

解释:

PHP以ISAPI方式安装时,PHP没有独立的进程,而是作为DLL被IIS加载运行的,即是依附于Web服务器进程的。当Web服务器运行在多线程模式下(IIS正是这种情况),PHP自然也就运行在多线程模式下。只要是在多线程模式下运行,就可能存在线程安全问题,因此应选择PHP的线程安全版本。3、windows + Apache +PHP(模块) :使用线程安全版本。

解释:

如果你要在Apache中以模块方式安装PHP,则你应该使用PHP的线程安全的版本。原因是当PHP作为Apache的模块安装时,PHP没有独立的进程,而是作为模块以DLL的形式被加载到Apache中的,是随Apache的启动而启动的,而Windows下的Apache为多线程工作模式,因此PHP自然也就运行在多线程模式下。因此,这种情况下应使用PHP的线程安全版本。4、windows + Apache +PHP(ISAPI) :使用线程安全版本。

解释:

由于以ISAPI方式来安装PHP时,PHP也没有独立的进程,也是作为模块被加载到Apache中的,因此,同样也需要使用PHP的线程安全版本。

一般不建议在Apache中以ISAPI方式来安装PHP,原因是到目前为止,Apache通过mod_isapi.so模块来实现的ISAPI功能并不完整,并未完整实现微软对ISAPI所制定的全部规范。5、windows + Apache +PHP(FastCGI) :使用非线程安全版本。

解释:

如果你要在Apache中以FastCGI方式使用PHP,则同在IIS中使用FastCGI的PHP的情况一样,你应该使用PHP的非线程安全的版本。原因是在Apache中以FastCGI方式安装PHP时,PHP拥有独立的进程,并且FastCGI是单一线程的,故应使用PHP的非线程安全版本以提高性能。

View Code

版本选择

Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如评论之类的东西。接着用户按一下“发布或提交”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的CGI程序中,于是CGI程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后CGI程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。

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进程模式不存在线程安全问题的优势。

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

PHP官方http://php.net/上关于widows的版本有4个:VC9 x86 Non Thread Safe,VC9 x86 Thread Safe,VC6 x86 Non Thread Safe,VC6 x86 Thread Safe;那么有什么区别呢?

1.支持的服务器不同

VC9版本是针对IIS服务器的版本,没有对APACHE的支持,而VC6版本对IIS和apache都提供了支持

VC6 是什么?

VC6 就是 legacy Visual Studio6compiler ,就是使用这个编译器编译的。

VC9 是什么?

VC9 就是 the Visual Studio2008compiler ,就是用微软的 VS 编辑器编译的。

那我们如何选择下载哪个版本的 PHP 呢?

如果你是在 windows 下使用 Apache+PHP 的,请选择 VC6 版本;

如果你是在 windows 下使用 IIS+PHP 的,请选择 VC9 版本;2.运行方式的不同

PHP有2中运行方式:ISAPI和FastCGI。

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

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

对于apache服务器来说一般选择isapi方式,而对于nginx服务器则选择FastCGI方式。

View Code

对于apache服务器来说一般选择isapi方式,而对于nginx服务器则选择FastCGI方式。

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

Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方式。

安装及配置

1··· 将安装后的php路径设置到系统环境变量path中。

2···到D:\Application\php-5.4.31目录下

将php.ini-development复制一份同一目录下,命名为php.ini

<1>设置extension_dir参数:

extension_dir="D:\Application\php-5.4.31\ext"

<1>设置cgi.force_redirect参数:

cgi.force_redirect = 0

3···

打开Tomcat的conf下的context.xml文件

给Context增加属性privileged="true",修改后的Context元素属性如下所示:

4···

1.相关jar包下载地址

http://pan.baidu.com/s/1mgFVuFu

将phpJavaBridge.rar中的JavaBridge.jar、php-servlet.jar和php-script.jar复制到tomcat的lib目录下;2.修改tomcat安装目录下conf文件夹里的web.xml文件,在web-app标签里增加以下的代码

php.java.servlet.ContextLoaderListener

PhpJavaServlet

php.java.servlet.PhpJavaServlet

PhpCGIServlet

php.java.servlet.fastcgi.FastCGIServlet

prefer_system_php_exec

On

php_include_java

Off

PhpJavaServlet

*.phpjavabridge

PhpCGIServlet

*.php

3.部署php项目

直接到php项目复制到tomcat的webapps目录下,然后启动tomcat。

View Code

或在中加入

php

org.apache.catalina.servlets.CGIServlet

clientInputTimeout

200

debug

0

executable

D:\tomcat\php\php-cgi.exe

passShellEnvironment

true

cgiPathPrefix

WEB-INF/phpbin

5

php

/phpbin/*

重启tomcat服务:

在webapps\ROOT\WEB-INF 下新建一个phpbin的文件夹

在下面新建一个index.php

里面的内容为:

或在标签加入

php

org.apache.catalina.servlets.CGIServlet

clientInputTimeout

200

debug

0

executable

C:\Program Files(D)\php-5.6.29-Win32-VC11-x64\php-cgi.exe

passShellEnvironment

true

cgiPathPrefix

WEB-INF/phpbin

5

php.java.servlet.ContextLoaderListener

PhpJavaServlet

php.java.servlet.PhpJavaServlet

PhpCGIServlet

php.java.servlet.fastcgi.FastCGIServlet

prefer_system_php_exec

On

php_include_java

Off

PhpJavaServlet

*.phpjavabridge

PhpCGIServlet

*.php

View Code

注意php运行环境装对应版本

出现如下问题

Fatal error: Call to undefined function mysql_connect() in D:\Apache2.2\htdocs\db.php on line 33

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值