我为一个客户端完成了一个php/mysql项目,昨天我开始将它部署到客户端的盒子上,然后立即失败了。老实说,我在开始之前没有做足够的检查,这是我的错--但是这个项目是完全独立的,而且我现在不需要客户机服务器上的任何东西。
我使用php 5.3和PDO为mysql连接开发了这个项目。当我访问客户机的服务器时,发现它们的安装非常陈旧,上次升级是在2008年(是的,认真的)。它们有Apache2.0和php5.2,配置/编译时没有PDO,而且几乎没有任何东西。
我确实有对服务器的根访问权,但我不能盲目地开始升级。他们有一个完整的实时站点,在服务器上有实时购物车等等,任何对php的一般升级都需要进行彻底的测试。因此,我正在研究如何使用php 5.3的单独安装来运行我的新项目,这是我从源代码编译的,包含了所有必需的内容,并安装到一个单独的目录(/opt/php53)中。
我正在考虑在服务器上启用thinking,然后使用它来运行php,形成我单独的安装。如果我在安装我的项目的apache <Directory>中这样做,它应该只影响到这个目录--并且应该保留其他所有内容。事情变得更加复杂,因为我没有任何类型的测试服务器,我可以播放/测试配置-我必须直接在现场服务器上工作。
我想知道这种快速方法是有效的,还是我应该考虑的其他选择。
发布于 2014-02-14 11:51:19
我做了一些进一步的调查/实验(利用我在英国的事实,客户和它的客户在美国-所以现在还在那里)。下面的设置似乎奏效了--这个使用php-cgi而不求助于快速cgi-而且我仍然有一个很好的响应时间。
1)在Apache5.2文件中保留几乎所有内容--其中包括现有的libphp5.so 5。因此,可以使用现有的httpd.conf安装。
2)将php5.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_CGI5)重新启动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 这正是我想要的。
发布于 2014-02-14 09:59:25
对于不同的PHP版本,您可以尝试在versions上使用不同的端口。
另一种方法:http://linuxplayer.org/2011/05/intall-multiple-version-of-php-on-one-server
https://stackoverflow.com/questions/21775991
复制相似问题