apache centos 上的多个 php

2024-04-16

如何在 Centos 6.5 上同时运行多个 php 版本?

就是这样。

要求
Centos 6.5(可能适用于 6.6 和 7)
Apache Apache/2.2.15(可能与其他版本一起使用)

本指南安装和使用
FASTCGI(请参阅替代安装的注释)
PHPFARM

此安装是这样完成的,因此它将与 iredmail 兼容。
您可以使用此设置在服务器上安装 iredmail。

Step 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/

对于您想要运行的每个 php 版本。但是,如果您想要自定义模块(例如 mysql 支持),请跳过此部分并查看其下面的部分。

$ ./compile.sh 5.3.1
$ ./compile.sh 5.3.3
$ ./compile.sh 5.5.11

如果出现编译错误,请重新启动并再次尝试./compile.sh 5.3.1 当我遇到这个问题时,这对我有用

MYSQL 和模块支持
为 php 版本 5.5.14 的自定义 phpfarm 安装获取 MySQL 支持(和其他模块)的步骤。这些说明适用于任何版本,只需将 5.5.14 重命名为 5.4.3 等即可。当然,您需要连接一个 mysql 服务器才能使用 php 中的 mysql 模块。
这些步骤需要按此顺序完成
Step 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/"

Step 1B
确保您有这些路径并且日期时间正确

cd /opt/phpfarm/src
vi default-custom-php.ini

date.timezone=America/Halifax
include_path=".:/opt/phpfarm/inst/php-$version/pear/php/"

Step 1C
特别注意这一行

--with-config-file-path=/opt/phpfarm/inst/php-5.5.11/lib/ \

需要根据您正在使用的版本进行调整。作为根用户

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"

Step 1D
现在以 root 身份编译。当您编译 5.5.14 或任何其他具有各自版本号的版本时,Phpfarm 将自动查找名为 custom-options-5.5.14.sh 的文件。

./compile.sh 5.5.14

稍后,当您使用 phpinfo() 查看网页时;功能,您将在页面上看到对这些模块的支持和不同的“配置命令”文本。


如果这些步骤未按顺序完成,您可能需要重新执行。 为了再次执行此操作,请首先从 src 文件夹和 inst 文件夹中删除文件。

rm -rf /opt/phpfarm/inst/php-5.5.14

rm -rf /opt/phpfarm/src/php-5.5.14

rm 将删除文件夹,-rf 代表 r 递归和 f 强制。 参考:http://linuxcommand.org/lc3_man_pages/rm1.html http://linuxcommand.org/lc3_man_pages/rm1.html


如果您有错误,请检查此网站。还有其他的,但我发现这个很有用。

http://crybit.com/20-common-php-compilation-errors-and-fix-unix/ http://crybit.com/20-common-php-compilation-errors-and-fix-unix/


mysql 和模块支持参考

使用 PHP Farm 激活 php 扩展时出现问题 https://stackoverflow.com/questions/26028229/issue-activating-a-php-extension-using-php-farm


Step 2
将 phpfarm 添加到您的个人资料中

对于 root 和非 root 用户,将其添加到 .bashrc 的底部。 .bashrc 文件可以在用户根文件夹中找到,或者 cd ~/ 然后 ls -all 你应该会看到它。

PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin"

将其添加到 root 和非 root 用户的 .bashrc 文件后,也在终端中执行此操作

export PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin"

现在退出终端并重新登录。尝试这个命令

switch-phpfarm 5.5.11

你应该能够在不同的 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]#

添加 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

Step 3
安装百胜

yum install php php-cli mod_fastcgi

NOTE此时,如果您尝试运行 switch-phpfarm 5.5.11,它将无法正常工作,但没关系。我们仍然可以使用不同版本的 php 运行多个网站

Step 4
确保您的 cgi-bin 已创建并且文件已配置

$ cd  /var/www

如果 cgi-bin 不存在,请创建它

$ mkdir cgi-bin

对于您打算使用的每个版本的 php,请创建这些文件之一。将结尾替换为版本号

vi /var/www/cgi-bin/php.fastcgi.5.5.11

step 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

第一行

PHPRC="/opt/phpfarm/src/php-5.5.11/php.ini-development"

告诉你 php.ini 使用这个在 ubuntu 中是不同的。最后一行

exec /opt/phpfarm/inst/bin/php-cgi-5.5.11

还需要针对每个特定版本进行更改。我不确定它的作用,但我知道它需要改变。

Step 6
启用 fastcgi 文件对 apache: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

实施例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

实施例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

Step 7
编辑 httpd.conf 文件
以下是 /etc/httpd/conf/httpd.conf 文件所需的内容。 首先找到“NameVirtualHost *:80”并以此为起点。“#”表示该行被注释掉。通过删除 # 取消注释该行。现在应该看起来像这样。

NameVirtualHost *:80

这将允许多个虚拟主机通过每个虚拟主机引用中的“ServerName”在 Apache 上进行操作。我留下了一些评论来告诉你你可以做什么。确保 /etc/httpd/conf/httpd.conf 的底部如下所示。

<VirtualHost *:80>
    ServerName test1.com
   #ServerAdmin [email protected] /cdn-cgi/l/email-protection
    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 [email protected] /cdn-cgi/l/email-protection
    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 [email protected] /cdn-cgi/l/email-protection
    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 [email protected] /cdn-cgi/l/email-protection
    DocumentRoot /var/www/html/test6
</VirtualHost>

Step 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

Step 9

现在重新启动您的服务器

service httpd restart

Step 10
Testing
如果您将 phpinfo() 添加到每个 index.php 站点,您会注意到所有 php 版本都会不同。最后一个 test4.net 也将使用 centos 的默认值。另请注意,test3.org 和 test4.net 不是 .com,但仍然可以工作。将来我计划为 phpfarm 文件制作一个指南,以便您可以安装 mysql 支持。这是我遇到的另一个问题。如果您发现其中存在一些错误或难以使其正常工作,请发表评论,我会尽快处理。


我的几个通知:

  1. yum install php php-cli mod_fastcgi是不正确的。不应启用 mod_php。还mod_fastcgi可以在没有外部存储库的情况下使用mod_fcgid
  2. 对于 PHP 5.2 和 libxml>=1.2.9 您必须应用此补丁libxml29_compat.补丁 http://help.digipower.vn/getattachment.php?data=MjMzfGxpYnhtbDI5X2NvbXBhdC5wYXRjaA%3D%3D
  3. 要为所有未启用 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>
    
  4. 在 64 位系统上编译时,由于 lib64 文件夹,编译失败,因此您应该添加--with-libdir=lib64到配置选项
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

apache centos 上的多个 php 的相关文章

随机推荐

  • 使用约束对 UIView 框架进行动画处理

    我在 UIView 中有一个元素 它有一个约束 规定它应该始终距离视图底部 10 像素 然后 我尝试为该视图的高度设置动画 使其看起来从屏幕上滑下 根据约束 元素应始终距视图底部 10 像素 当我像这样添加视图时 这是正确的 printVi
  • Clojure 中的相互递归定义

    如何在 Clojure 中进行相互递归定义 下面是 Scala 中使用递归定义查找素数的代码 val odds Stream Int cons 3 odds map 2 val primes Stream Int cons 2 odds f
  • 自定义 Jackson HttpMessageConverter 在 Spring 4.2 中不再工作

    我正在将应用程序从 Spring Platform 版本 1 1 3 RELEASE 更新到 2 0 1 RELEASE 这会将 Spring Framework 版本从 4 1 7 升级到 4 2 4 将 Jackson 从 2 4 6
  • 还有人在初始化 Cloud Engine 时遇到“未知错误”吗?

    我正在尝试使用他们最近发布的 启动器 在 Google 云平台上启动 Discourse 实例 https cloud google com launcher details bitnami launchpad discourse q di
  • Webpack突然崩溃了

    一周前 它运行良好 现在 没有任何更改 相同的电脑和完全相同的文件 与存储库没有差异 之后npm install它不再工作并崩溃并出现以下错误 user machine workspace work project npm run buil
  • 使用 lubridate 和 mutate 将日期格式从 %y-%m-%d %h:%m:%s 更改为 %Y%M%D

    我有一个tbl df有两列开始时间 and StopTime 两者都是dttm 我想改变它的格式 y m d h m s to y m d 我试过了 data lt mutate data StartTime ymd StartTime S
  • jquery focusout事件缺少相关目标信息

    我有一个绑定到的文本输入focusin focusout events element focusin function e focusout function e var to e relatedTarget e toElement un
  • 将视频嵌入到从应用程序的 Documents 文件夹加载到 UIWebView 中的 html 文件中

    我有一个名为的 html 文件videoplay html包含以下内容 p This is demo html file for playing movie file embedded p p p
  • 使用 pandas 将字符串列更改为多个布尔列

    我有一个两列的数据集 我想对其进行重塑 看看这个假的 df df pd DataFrame Alex Apple Bob Banana Clark Citrus Diana Banana Elisa Apple Frida Citrus G
  • PHP登录将密码存储在txt中[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在 我知道将密码存储在文本文件中并不安全 但不用担心 安全不是我的目标 这就像那些 hackme 网站之一 所以 我需要知道 如何将
  • 如何测试 sbt 解析器

    在我的本地计算机上 我有一个常春藤缓存 该缓存已通过处理多个项目而被填充 图书馆X使用解析器加载Y在项目中A 同一个图书馆X项目中使用的B 解析这个库没有问题 因为它在我的本地缓存中 当我的一位同事加载项目时B他得到了图书馆的错误X无法解决
  • 使用 SQL 查找给定 x、y 坐标的填充矩形

    给定以下填充的 x y 坐标 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 4 0 4 1 5 0 5 1 如何编写 SQL 查询来确定所有填充的矩形 矩形由其左上角和右下角定义 期望的结果 x1 y1 x2 y2
  • UWP StoreProductQueryResult 不返回任何产品

    我们无法返回 Windows 应用商店应用程序的附加产品列表 我们在 Windows 应用商店中有一个包含 3 个订阅附加组件的应用程序 这些附加组件被标记为隐藏 因为我们不希望它们只能通过我们的应用程序在商店中可见 我们正在开发针对 Wi
  • 通过键盘快捷键重新缩进 XML

    我正在浏览数百个 xml 文件 当我在记事本 中打开它们时 我必须对每个文件执行 HTML Tidy gt re indent XML 对于一个文件来说 这一步骤并不会花费太长的时间 但是加起来就会产生很多很多的文件 有没有办法将其放在记事
  • Linux 上的 mpc / mpd:如何播放本地 wav 文件

    我正在尝试将本地文件添加到 mpd 通过 mpc 并播放它 我的平台是OpenWRT嵌入式linux 因此 从手册页来看 它指出 mpc add
  • 如何将 .sql 文件的内容读入 R 脚本以运行查询?

    我已经尝试过readLines和read csv功能 但随后不起作用 以下是该内容的内容my script sql file SELECT EmployeeID FirstName LastName HireDate City FROM E
  • Node Express 中的 res.sendfile 并传递数据

    有没有办法从 Node JS 应用程序重定向到 HTML 文件 例如 res sendFile http expressjs com api html res sendFileExpress 并将 JSON 数据传递到 html 文件 我知
  • Bash 子 shell:括号:() VS 美元括号:$()

    在 bash 中 两者 and 创建一个子shell 彼此之间有什么区别 它们的典型用途是什么 只是创建一个复合命令 运行括号内的命令 做同样的事情 但也替换输出 来自文档 list list在子shell环境中执行 变量赋值和内置 影响
  • Docker Swarm如何实现卷共享?

    Docker Swarm 可以管理两种类型的存储 volume and bind While bindDocker 文档不建议这样做 因为它在本地目录 在每个 swarm 节点上 与任务之间创建了绑定 volume没有提到实现 所以我不明白
  • apache centos 上的多个 php

    如何在 Centos 6 5 上同时运行多个 php 版本 就是这样 要求Centos 6 5 可能适用于 6 6 和 7 Apache Apache 2 2 15 可能与其他版本一起使用 本指南安装和使用FASTCGI 请参阅替代安装的注