在jetty中使用quercus以支持PHP应用
jetty是一个开源的java web服务器,适合用来架设小型的java web环境,其官方网站:http://www.mortbay.org/jetty/
quercus是一个PHP的纯java实现(目前quercus 3.1.6对应的php版本为5.2.0 —— 来自于在quercus中运行的phpinfo(); ),是一个servlet,可以在JEE应用服务器中运行PHP的应用,其官方网站为:http://quercus.caucho.com/
它已经被包含在另外一个Java EE应用服务器 – resin的3.0.17版本之后中,如果直接采用resin,也可以直接获得运行PHP应用的支持
最近在某飞的建议下,有考虑在VPS上面将JavaEE应用服务器和跑PHP的服务器合并成为一个,于是把自己的ubuntu 8.04当作沙箱,安装了jetty + quercus的环境,大致配置步骤如下:
1.安装java se,设置JAVA_HOME, CLASSPATH等环境变量,用apt安装java很简单,环境变量也只要改改bashrc就行,不再赘述
2.安装jetty
下载jetty,解压缩到/usr/local/jetty(或者其它的目录,按个人需求决定)
设置jetty环境变量:
export JETTY_HOME=”/usr/local/jetty”
(可以放入bashrc)
3.unzip解压quercus官方网站下载到的war(实际上就是zip),将其中的quercus.jar, resin-util.jar, script-10.jar放入/usr/local/jetty/lib
4.按照需求修改jetty的设置,比如发布目录,可以参考jetty的文档,不赘述
5.在PHP的项目中建立WEB-INF/web.xml,为PHP文件和quercus建立映射,内容为
Caucho Technology's PHP Implementation
Quercus Servlet
com.caucho.quercus.servlet.QuercusServlet
<!-- Specifies the encoding Quercus should use to read in PHP scripts.
Uncomment this if you're having "invalid utf-8" errors.
-->
<!--
<init-param>
<span -name class="mceItemParam"></span>script-encoding</param-name>
<span -value class="mceItemParam"></span>ISO-8859-1</param-value>
</init-param>
-->
<!-- Tells Quercus to use the following JDBC database and to ignore the
arguments of mysql_connect().
-->
<!--
<init-param>
<span -name class="mceItemParam"></span>database</param-name>
<span -value class="mceItemParam"></span>jdbc/test</param-value>
</init-param>
-->
<!--
<init-param>
<span -name class="mceItemParam"></span>php-ini-file</param-name>
<span -value class="mceItemParam"></span>WEB-INF/php.ini</param-value>
</init-param>
-->
Quercus Servlet
*.php
index.php但是这样只能在对应的目录里面访问php文件,如果想要全局访问php,则可以修改/usr/local/jetty/etc/webdefault.xml,加入:
Quercus Servlet
com.caucho.quercus.servlet.QuercusServlet
<!-- Specifies the encoding Quercus should use to read in PHP scripts.
Uncomment this if you're having "invalid utf-8" errors.
-->
<!--
<init-param>
<span -name class="mceItemParam"></span>script-encoding</param-name>
<span -value class="mceItemParam"></span>ISO-8859-1</param-value>
</init-param>
-->
<!-- Tells Quercus to use the following JDBC database and to ignore the
arguments of mysql_connect().
-->
<!--
<init-param>
<span -name class="mceItemParam"></span>database</param-name>
<span -value class="mceItemParam"></span>jdbc/test</param-value>
</init-param>
-->
<!--
<init-param>
<span -name class="mceItemParam"></span>php-ini-file</param-name>
<span -value class="mceItemParam"></span>WEB-INF/php.ini</param-value>
</init-param>
-->
Quercus Servlet
*.php6.一些细节的设置,可以去参考quercus的文档(比如php.ini),如果需要使用mysql,则把jdbc的mysql-connector放到jetty的lib目录下面即可
这样,一个可以同时运行Java和PHP的应用服务器就完成了(当然更快的方法就是直接用resin了……只是相对于jetty来说内存开销稍高)在Windows中的安装也基本一致。另外,quercus也可以运行在tomcat下以及其他的JEE应用服务器之中,嗯,感叹一下Java的设计理念确实是十分强大。
不过,quercus目前也不是完全没缺陷,速度比实际的PHP要慢1/3左右(未进行全面测试,仅仅比较了CLI下面500^3次乘法的运行速度),Java的内存占用也肯定比PHP高得多。但是最主要的问题也还是表现在兼容性上,测试了WordPress和phpMyAdmin,WordPress运行的还可以(但有乱码问题,但是应该可以通过修改设置解决),至于phpMyAdmin则是无法使用,一登录就出错,原因不明。出于兼容性的问题,将quercus直接应用于生产环境还有较高的风险,所以暂时不推荐现在就在工程中部署quercus……至于VPS上的将PHP和JEE应用服务器合体的计划也只能暂时搁置……
No Responses