在旧的apache安装上使用PHP 5.3

时间:2014-02-14 09:52:57

标签: php mysql apache fastcgi

我为客户完成了一个php / mysql项目,昨天又将它部署到客户端的盒子上 - 并且很快就失败了。老实说,我开始之前没有做足够的检查是我的错 - 但项目是完全独立的,我目前在客户端的服务器上不需要任何东西。

我使用php 5.3和PDO开发了用于mysql连接的项目。当我访问客户端的服务器时,发现他们有非常旧的安装,这是在2008年最后一次升级(是的,认真的)。他们有Apache 2.0和php 5.2,它是在没有PDO的情况下配置/编译的,并且只需要最少的一切。

我对服务器有root权限,但是我不能盲目地开始升级。他们有一个完整的实时网站,在该服务器上有实时购物车等,任何一般的PHP升级都需要彻底的测试。因此,我正在寻找使用单独安装的php 5.3运行我的新项目的方法,我从源代码编译并包含所有必需的东西并安装到一个单独的目录(/ opt / php53)。

我正在考虑在服务器上启用fastcgi,然后使用它来运行我单独安装的php。如果我在我的项目安装的apache <Directory>内执行此操作,它应该只影响那个目录 - 并且应该保留其他所有内容。事情变得更加复杂,因为我没有任何类型的测试服务器可以播放/测试配置 - 我必须直接在实时服务器上工作。

我想知道这种fastcgi方法是否有效,或者我应该考虑其他一些选择。

2 个答案:

答案 0 :(得分:1)

您可以尝试在fastcgi上使用不同的端口用于各种PHP版本。

另一种方法:http://linuxplayer.org/2011/05/intall-multiple-version-of-php-on-one-server

答案 1 :(得分:0)

我已经做了一些进一步的挖掘/试验(利用我在英国和客户及其客户在美国的事实 - 所以它仍然在那里的夜晚)。以下设置似乎有效 - 这使用php-cgi而无需求助于fastcgi - 我仍然得到了很好的响应时间。

1)在apache httpd.conf文件中保留几乎所有内容 - 包括利用现有5.2安装的现有libphp5.so。

2)将php 5.3安装到一个单独的目录中 - 在我的情况下是/ opt / php53。

3)在httpd.conf中,添加以下内容(或确保它已经存在)

ScriptAlias /cgi-bin/ /var/www/mainsite/cgi-bin
AddHandler cgi-script .cgi

<Directory /var/www/mainsite/newapp>
    Options -Indexes FollowSymLinks +ExecCGI
    AllowOverride AuthConfig FileInfo
    AddHandler php5-cgi .php
    Action php5-cgi /cgi-bin/php.cgi
    DirectoryIndex index.php index.html
    Order allow,deny
    Allow from all
</Directory>

4)在目录/var/www/mainsite/cgi-bin/中创建文件php.cgi,其中包含以下内容:

#!/bin/bash
PHP_CGI=/opt/php53/bin/php-cgi
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=1000
### no editing below ###
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec $PHP_CGI

5)重启apache:/etc/init.d/httpd restart

在此之后,我将带有<?php phpinfo(); ?>的文件放入Web服务器的根目录并放入我的newapp目录。从它生成的服务器的根目录执行(除其他外):

PHP Version 5.2.5

Build Date  Dec 11 2008 19:04:47
Server API  Apache 2.0 Handler

newapp目录执行时,它产生:

PHP Version 5.3.28

Build Date  Feb 13 2014 17:00:43 
Server API  CGI/FastCGI 

这正是我想要的。