Har*_*nks 16 php apache fastcgi centos phpfarm
如何在Centos 6.5上同时运行多个php版本?
这是如何做.
要求
Centos 6.5(可能适用于6.6和7)
Apache Apache/2.2.15(可能与其他版本一起使用)
本指南安装并使用
FASTCGI(请参阅替代安装的注释)
PHPFARM
此安装以这种方式完成,因此它可以与iredmail兼容.
您可以使用此设置在服务器上安装iredmail.
第1步
安装PHPFarm
yum install gcc libxml2-devel openssl-devel bzip2-devel curl-devel libjpeg-devel freetype-devel icu libicu-devel gcc-c++ postgresql-devel aspell-devel git -y
$ cd /opt/
$ git clone https://github.com/cweiske/phpfarm.git phpfarm
$ cd phpfarm/src/
$ cd /opt/phpfarm/src/
Run Code Online (Sandbox Code Playgroud)
对于每个版本的php,你想运行它.但是,如果您希望自定义模块(例如mysql支持)跳过这个并看到它下面的部分.
$ ./compile.sh 5.3.1
$ ./compile.sh 5.3.3
$ ./compile.sh 5.5.11
Run Code Online (Sandbox Code Playgroud)
如果你得到编译错误,重新启动和try./compile.sh 5.3.1再次当我遇到这个问题
MYSQL和模块支持
步骤获得MySQL支持(和其他模块)自定义phpfarm安装的PHP版本5.5 0.14.这些说明适用于任何版本,只需将5.5.14重命名为5.4.3.你当然需要一个mysql服务器连接到php中使用mysql模块.
这些步骤需要按此顺序完成
步骤1A
确保您拥有这些路径并且日期时间正确我以root身份执行此操作.你应该有你想要使用的date.timezone.
cd /opt/phpfarm/src
vi custom-php.ini
date.timezone=America/Halifax
include_path=".:/opt/phpfarm/inst/php-$version/pear/php/"
Run Code Online (Sandbox Code Playgroud)
步骤1B
确保您拥有这些路径并且日期时间正确
cd /opt/phpfarm/src
vi default-custom-php.ini
date.timezone=America/Halifax
include_path=".:/opt/phpfarm/inst/php-$version/pear/php/"
Run Code Online (Sandbox Code Playgroud)
步骤1C
特别注意这一行
--with-config-file-path=/opt/phpfarm/inst/php-5.5.11/lib/ \
Run Code Online (Sandbox Code Playgroud)
它需要根据您使用的版本进行调整.作为根
vi custom-options-5.5.14.sh
#!/bin/bash
#gcov='--enable-gcov'
configoptions="
--disable-debug \
--with-config-file-path=/opt/phpfarm/inst/php-5.5.11/lib/ \
--enable-short-tags \
--with-pear \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-pcntl \
--enable-soap \
--enable-sockets \
--enable-wddx \
--enable-zip \
--with-zlib \
--with-gettext \
--enable-pdo \
--with-pdo-mysql \
--enable-cgi \
--enable-json \
--with-curl \
--with-openssl \
--enable-openssl \
--with-mysql \
--enable-mysql \
$gcov"
Run Code Online (Sandbox Code Playgroud)
步骤1D
现在以root身份编译.当您编译5.5.14时,Phpfarm将自动查找名为custom-options-5.5.14.sh的文件,或者当然包含相应版本号的任何其他版本.
./compile.sh 5.5.14
Run Code Online (Sandbox Code Playgroud)
稍后当您使用phpinfo()检出您的网页时; 功能,您将看到对这些模块的支持以及页面上不同的"配置命令"文本.
如果这些步骤没有完成,您可能需要再次执行此操作.为了再次执行此操作,首先从src文件夹和inst文件夹中删除文件.
rm -rf /opt/phpfarm/inst/php-5.5.14
rm -rf /opt/phpfarm/src/php-5.5.14
Run Code Online (Sandbox Code Playgroud)
rm将删除文件夹,-rf代表r recursive和f force.参考:http://linuxcommand.org/lc3_man_pages/rm1.html
如果您有错误,请查看此站点.还有其他但我发现这个有用.
http://crybit.com/20-common-php-compilation-errors-and-fix-unix/
参考mysql和模块支持
PHP编译错误
http://crybit.com/20-common-php-compilation-errors-and-fix-unix/
步骤2
将phpfarm添加到您的个人资料
将此添加到.bashrc的底部,用于root用户和非root用户..bashrc文件可以在用户根文件夹中找到,或者cd~ /然后是ls -all,你应该看到它.
PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin"
Run Code Online (Sandbox Code Playgroud)
在将其添加到root用户和非root用户的.bashrc文件后,也会在终端中执行此操作
export PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin"
Run Code Online (Sandbox Code Playgroud)
现在退出终端并重新登录.尝试此命令
switch-phpfarm 5.5.11
Run Code Online (Sandbox Code Playgroud)
你应该能够在diff php版本之间来回切换
[root@test joe]# switch-phpfarm 5.5.11
Setting active PHP version to 5.5.11
PHP 5.5.11 (cli) (built: May 17 2014 22:01:31) (DEBUG)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
[root@test joe]#
Run Code Online (Sandbox Code Playgroud)
添加CentOS/RHEL 6,64位(x86_64)的仓库:
cd /tmp
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)
第3步
安装yums
yum install php php-cli mod_fastcgi
Run Code Online (Sandbox Code Playgroud)
注意 ,此时如果您尝试运行switch-phpfarm 5.5.11它将无法正常工作,但没关系.我们仍然可以使用不同版本的php运行多个网站
步骤4
确保已创建cgi-bin并配置文件
$ cd /var/www
Run Code Online (Sandbox Code Playgroud)
如果cgi-bin还没有在这里创建它
$ mkdir cgi-bin
Run Code Online (Sandbox Code Playgroud)
对于您打算使用的每个版本的php,请使用其中一个文件.将结尾替换为版本号
vi /var/www/cgi-bin/php.fastcgi.5.5.11
Run Code Online (Sandbox Code Playgroud)
步骤5
在文件php.fastcgi.5.5.11中
#!/bin/bash
PHPRC="/opt/phpfarm/src/php-5.5.11/php.ini-development"
PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=1000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec /opt/phpfarm/inst/bin/php-cgi-5.5.11
Run Code Online (Sandbox Code Playgroud)
第一行
PHPRC="/opt/phpfarm/src/php-5.5.11/php.ini-development"
Run Code Online (Sandbox Code Playgroud)
告诉你巫婆php.ini使用这个在ubuntu中是不同的.最后一行
exec /opt/phpfarm/inst/bin/php-cgi-5.5.11
Run Code Online (Sandbox Code Playgroud)
还需要针对每个特定版本进行更改.我不知道它做了什么,但我知道它需要改变.
步骤6
为apache启用fastcgi文件可执行:apache用户和组
例1
[root@test joe]# chown apache:apache /var/www/cgi-bin/php.fastcgi.5.5.11
[root@test joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.5.11
Run Code Online (Sandbox Code Playgroud)
例2
[root@test joe]# chown apache:apache /var/www/cgi-bin/php.fastcgi.5.3.3
[root@test joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.3.3
Run Code Online (Sandbox Code Playgroud)
例3
[root@test joe]# chown apache:apache /var/www/cgi-bin/php.fastcgi.5.3.1
[root@test joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.3.1
Run Code Online (Sandbox Code Playgroud)
步骤7
编辑httpd.conf文件
以下是/etc/httpd/conf/httpd.conf文件所需的内容.首先找到"NameVirtualHost*:80"并将其作为起点."#"表示该行被注释掉.通过删除#取消注释该行.它现在应该是这样的.
NameVirtualHost *:80
Run Code Online (Sandbox Code Playgroud)
这将允许多个虚拟主机在每个虚拟主机引用中通过其"ServerName"在Apache上运行.我留下了一些评论,告诉你你可以做什么没有.确保/etc/httpd/conf/httpd.conf的底部如下所示.
<VirtualHost *:80>
ServerName test1.com
#ServerAdmin admin@tecadmin.net
DocumentRoot /var/www/html/test1
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/html/test1">
Options +Indexes FollowSymLinks +ExecCGI
AddHandler php5-fastcgi .php
Action php5-fastcgi /cgi-bin/php.fastcgi.5.5.11
AllowOverride All
Order allow,deny
Allow from All
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName test2.com
# ServerAdmin admin@tecadmin.net
DocumentRoot /var/www/html/test2
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/html/test2">
Options +Indexes FollowSymLinks +ExecCGI
AddHandler php5-fastcgi .php
Action php5-fastcgi /cgi-bin/php.fastcgi.5.3.3
AllowOverride All
Order allow,deny
Allow from All
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName test3.org
# ServerAdmin admin@tecadmin.net
DocumentRoot /var/www/html/test3
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/html/test3">
Options +Indexes FollowSymLinks +ExecCGI
AddHandler php5-fastcgi .php
Action php5-fastcgi /cgi-bin/php.fastcgi.5.3.1
AllowOverride All
Order allow,deny
Allow from All
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName test4.net
# ServerAdmin admin@tecadmin.net
DocumentRoot /var/www/html/test6
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
步骤8
在
这里编辑etc/hosts文件是etc/hosts文件中你需要的.
127.0.0.1 localhost test1.com test2.com test3.org test4.net
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Run Code Online (Sandbox Code Playgroud)
第9步
现在重启你的服务器
service httpd restart
Run Code Online (Sandbox Code Playgroud)
步骤10
测试
是否将phpinfo()添加到每个index.php站点,您会注意到所有php版本都不同.最后一个test4.net将使用centos的默认值.另请注意,test3.org和test4.net不是.com的,但仍然可以使用.将来我计划为phpfarm文件制作一个指南,以便你可以安装mysql支持.这是我遇到的另一个问题.如果您发现此处有一些错误或难以使其发挥作用,请发表评论,我会尽快完成.
我的几个通知:
yum install php php-cli mod_fastcgi是不正确的。不应启用 mod_php。也mod_fastcgi可以在没有外部存储库的情况下使用mod_fcgid要为所有未启用 mod_php 的主机设置 php 版本,请将其添加到 httpd.conf
<Directory "/var/www">
Options All +ExecCGI
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php.fastcgi.5.5.18
</Directory>
Run Code Online (Sandbox Code Playgroud)--with-libdir=lib64到 configoptions