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 的相关文章

  • MySQL:计算日期/时间之间的差异 - 仅在周一至周五“工作周”期间

    我需要计算开始日期 时间和结束日期 时间之间的差异 但是 我只想在 5 天的工作周内执行此操作 不包括周六 周日 做这个的最好方式是什么 我的想法是 从日期开始 我必须获取星期几 如果是工作日 那么我将添加到累加器中 如果不是 那么我不会添
  • 如何检查 ini_set() 是否在全局 PHP.INI 或我的 PHP 脚本中启用?

    我有一个应用程序安装失败 供应商说我可能禁用了 ini set 我怎样才能检查这个 我对此做了一些研究 结果发现有时 ini set 不会返回 FALSE 而是一个空字符串 gabriel1836 指出的 URL 中提到了这一点 检查它是否
  • PHP 数组 - 如何将数组转换为对象? [复制]

    这个问题在这里已经有答案了 我对 PHP 还很陌生 所以请耐心等待 所以我收到这个错误 注意 尝试在此行获取非对象的属性 echo tr td row gt last name td td row gt first name td td r
  • 在 Symfony3 中覆盖 Doctrine2 类型

    我想用Carbon http carbon nesbot com docs 我的 Symfony 3 2 应用程序中的对象而不是 SPL DateTime 对象 我发现了一组 DoctrineExtension 类here https gi
  • 最好的 php DOM 2 数组函数是什么?

    我想解析xml文件 到目前为止 我发现最好的方法是使用 DOMDocument 类 示例 xml 字符串
  • 属性“tablename.title”未定义

    我是伊比 我想做的是上传图像 照片 以及具有更新功能的数据库中的路径条目 我已点击此链接 http www yiiframework com wiki 349 how to upload image photo and path entry
  • 通过CompilerPass注册自定义AttributeBag

    我正在尝试通过将自定义 AttributBags 集成到会话中来整理我的会话变量 在 Symfony 查看相关问题 如何向 symfony 会话添加额外的包 https stackoverflow com questions 4472361
  • 帮我用 PHP 解析这个文件

    Fri Nov 27 10 00 01 EST 2009 974 12506 Fri Nov 27 11 00 01 EST 2009 988 12655 Fri Nov 27 12 00 01 EST 2009 1005 12886 Fr
  • 带有 -noserver 的 GWT

    我正在制作一个使用 PHP 连接到 DB2 数据库的 GWT 项目 当我编译项目并将其部署到服务器 复制 WAR 目录的内容 时 它工作正常 显然在托管模式下我遇到了 SOP 问题 因为 GWT 在端口 8888 上 而 php 脚本在端口
  • php 无法连接到 mysql,错误为 13(但命令行可以)

    我在新安装的服务器中遇到了奇怪的情况 谷歌这次似乎无法帮助我 我无法从我的 php 代码连接到 远程 mysql 当我尝试从同一服务器上的命令行连接时 连接成功 无法连接 无法连接到 MYSQL SERVER 上的 MySQL 服务器 13
  • 如何从谷歌地图中的纬度和经度获取地址位置? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 所以我有纬度和经度就像44 4647452 and 7 3553838 我需要获得如下地址 米兰 意大利 str 肯尼迪 89 我怎样才能
  • 合并两个 MYSQL SELECT 查询[重复]

    这个问题在这里已经有答案了 可能的重复 如何将两个 Post Category 表 MYSQL SELECT 查询合并为一个 https stackoverflow com questions 12972130 how to combine
  • 在 PHP 中搜索多维数组中的值并获取其路径

    这是我的数组 array array 1 gt array title gt Level1 nodes gt array 11 gt array title gt sub1 company1 12 gt array title gt sub
  • PHP Amazon SDK,S3 存储桶访问被拒绝

    我第一次尝试使用 PHP AWS SDK aws aws sdk php 3 19 来使用 S3 我创建了一个存储桶 myfirstbucket jeremyc 我制定了一项政策 Version 2012 10 17 Statement E
  • PHP - 获取类公共变量?

    请考虑下面的代码 class A public function construct class B extends A public a a public b b public c c 如何从父类中获取 B 类的公共变量而不确切知道它们是
  • PHP 中二进制的前缀是什么?

    两者都不是0x nor 0 它是什么 有没有 从 PHP 5 4 开始 二进制数的前缀是 0b For ealier version there is no such prefix Instead you can use 0x for he
  • JpGraph:使用 AccBarPlot 时如何控制 v3.5.0b1 中的 x/y 偏移、边距和颜色?

    一点背景 我正在尝试将使用 Symfony 1 2 构建的项目从一台服务器迁移到另一台服务器 该项目的功能之一是构建图表 最初使用 JpGraph 2 3 5 完成 如果不修改代码 该图表不会按预期显示 我正在寻找一些关于我可能忽略的内容的
  • Laravel - 保存在存储文件夹中的图像不向用户显示

    我有这段代码可以将图像保存在 storage app uploads 文件夹中 image main Image where property id id gt get file request gt file file destinati
  • 危险的 PHP 函数

    我将用户输入的 php 函数存储到 mySQL 数据库中 这些函数需要能够被执行 正如我们所知 这可以并且将会允许黑客先生将一个漂亮的网站变成瑞士奶酪 这些函数很简单 不需要任何高级的 php 编码 它们更多地涉及处理单个数据数组 因此 如
  • php strtotime“上周一”如果今天是周一?

    我想用strtotime last Monday 问题是 如果今天是星期一 它会返回什么 它似乎正在返回上周星期一的日期 在这种情况下我怎样才能让它返回今天的日期 如果您阅读手册 其中有一个很好的示例 它准确地描述了您想要执行的操作http

随机推荐

  • 使用约束对 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 请参阅替代安装的注