如何在 Cloud9 上的 PHP 5.6 / 7.2 之间切换?

Posted

技术标签:

【中文标题】如何在 Cloud9 上的 PHP 5.6 / 7.2 之间切换?【英文标题】:How to switch between PHP 5.6 / 7.2 on Cloud9? 【发布时间】:2018-07-02 07:49:35 【问题描述】:

我使用 AWS Cloud9 Amazon Web Services 又名 Cloud9 IDE。我正在尝试实现一个设置,我可以随时使用 phpBrew 在 5.6 和 7 之间轻松切换前端(不是 CLI)PHP 版本。目前,我只实现了 bash 有 5.6.31,前端 phpinfo() 说 PHP 版本 5.5.9-1ubuntu4.17,这显然是我不想看到的。我已经设法在另一个显示 PHP 版本 5.6.31 的工作区上执行此操作,但我害怕触摸该工作区以冒险尝试切换到 PHP 7。我不知道我是如何实现制作 PHPBrew版本系统级 PHP...

我已阅读相关主题和问题,但它们对我没有帮助。我现在是这样设置的:

curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew 
chmod +x phpbrew
sudo mv phpbrew /usr/local/bin/phpbrew
phpbrew -v
phpbrew init
echo '[[ -e /home/ubuntu/.phpbrew/bashrc ]] && source /home/ubuntu/.phpbrew/bashrc' >> ~/.bashrc 

sudo apt-get update
sudo apt-get install apache2-dev
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install libmcrypt-dev libreadline-dev
sudo phpbrew install php-5.6.31 +default +dbs +mb +iconv +apxs2=/usr/bin/apxs2

请注意,我根本不知道自己在做什么,我从未使用过 Linux。我刚刚从这样的线程中收集了这些行,它们看起来很有希望,但我一定错过了一些东西。

其他信息(在 cmets 中要求):

$ cat /etc/apache2/mods-available/php5.load
LoadModule php5_module        /usr/lib/apache2/modules/libphp5.6.31.so

$ phpbrew list
* php-5.6.31 

在我安装了 5.6.31 和 7 之后,我最好切换到 phpbrew switch。现在,如果我能让它与 5.6.31 一起工作,我会很满意

目前,我所做的是将“跑步者”(不确定那是什么)从 PHP(内置 Web 服务器) 切换到 Apache httpd(PHP、html 这里:https://i.snag.gy/Y6eNHy.jpg 然后phpinfo() 实际上显示的是 phpbrew 版本。然后我也installed PHP 7.2.1 但后来一切都停止了工作。我在 c9 的控制台中收到很多错误:https://i.snag.gy/pt5oHN.jpg Beautiful,不是吗? :)

Started apache2
/mnt/shared/bin/run-apache2: line 70:  4813 Segmentation fault      apache2

【问题讨论】:

您想如何进行切换?如果对您有用,可以使用 nginx + PHP-FPM 运行两个并行版本?对于 apache,我将不得不检查? 你也可以使用这里讨论的方法来处理 apache oanhnn.github.io/2015-09-22/… 另外,不要将phpbrew installsudo 一起运行。 请在您的主题中提供cat /etc/apache2/mods-available/php5.load 的输出。此外,如果您可以共享构建日志,这将很有帮助。当您运行install 时,通常phpbrew 会写入构建日志所在的路径。 -/home/USER/.phpbrew/build/VERSION-WHICH-YOU-WANT-TO-BUILD/build.log。另外,请在安装后附上phpbrew list的输出,以确保您的安装成功。这是了解您的安装出了什么问题的最少信息。谢谢。 @mrDinkelman 为什么?当我用它运行它时,它提醒我除非我想要一个系统范围的安装,否则我不应该使用它。但这就是我需要的,不是吗? 【参考方案1】:

我已经完全放弃了 phpbrew,因为它并不是真正用于切换 Apache 的 PHP,而只是 CLI(按设计)。它从来不应该工作,请参阅:this is still a feature request。

从一个干净的 Cloud9 PHP/Apache 工作区开始。我关注了这篇文章How to Install PHP 5.6, PHP 7.1 on Ubuntu 16.04, 14.04 using PPA,基于此,结果是这样的:

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php5.6
sudo apt-get install -y php7.2

然后验证:

php5.6 -v
php7.2 -v

安装php7.2后遇到error:

$ php7.2 -v
php7.2: symbol lookup error: php7.2: undefined symbol: pcre_jit_exec

我按照“将您的 libpcre3 库升级到存储库中的版本”的建议进行了修复。

原来那是“保留”,所以我不得不这样做this:

apt-get install libpcre3 libpcre3-dev

PHP 7.2 开始工作了!令人惊讶的是,Cloud9 的原始 PHP 原封不动地保留在 php5 下,并且可以随时使用。所以我现在可以处理 3 个不同的版本。是的,phpinfo() 每次都显示我想要的版本!甚至不需要重新运行 Cloud9 工作线程。

mbstring 将在 5.6 中丢失(运行 phpmyadmin 时遇到问题):

sudo apt-get install php5.6-mbstring

php.ini 文件位于:

sudo find . -name 'php.ini'
./php/7.2/apache2/php.ini
./php/7.2/cli/php.ini
./php/5.6/apache2/php.ini
./php/5.6/cli/php.ini
./php5/fpm/php.ini
./php5/apache2/php.ini
./php5/cli/php.ini

从任何东西切换到 7.2 PHP

sudo a2dismod php5
sudo a2dismod php5.6
sudo a2enmod php7.2
sudo service apache2 restart

1 行:

sudo a2dismod php5 && sudo a2dismod php5.6 && sudo a2enmod php7.2 && sudo service apache2 restart

从任何东西切换到 5.6 PHP

sudo a2dismod php5
sudo a2dismod php7.2
sudo a2enmod php5.6
sudo service apache2 restart

1 行:

sudo a2dismod php5 && sudo a2dismod php7.2 && sudo a2enmod php5.6 && sudo service apache2 restart

从 Cloud9 切换到原始 PHP

sudo a2dismod php7.2
sudo a2dismod php5.6
sudo a2enmod php5
sudo service apache2 restart

1 行:

sudo a2dismod php7.2 && sudo a2dismod php5.6 && sudo a2enmod php5 && sudo service apache2 restart

现在我很开心。

【讨论】:

【参考方案2】:

// PHP版本升级(从5.6到7.2)

sudo add-apt-repository ppa:ondrej/php -y
sudo apt-get update -y

sudo apt-get install php7.2 php-pear php7.2-curl php7.2-dev php7.2-gd php7.2-mbstring php7.2-zip php7.2-mysql php7.2-xml -y

sudo mv /etc/apache2/envvars /etc/apache2/envvars.bak
sudo apt-get remove libapache2-mod-php5 -y
sudo apt-get install libapache2-mod-php7.2 -y
sudo cp /etc/apache2/envvars.bak /etc/apache2/envvars

sudo a2dismod php5
sudo a2enmod php7.2

sudo service apache2
sudo service apache2 restart

【讨论】:

虽然这些命令/代码可能会解决问题,但最好对这些命令的作用以及它们解决问题的原因提供一些解释。您也可以正确格式化代码。【参考方案3】:

以下将在 CLoud9 上升级到 PHP 7.2:

sudo add-apt-repository ppa:ondrej/php -y
sudo apt-get update -y
sudo apt-get install php7.2 php-pear php7.2-curl php7.2-dev php7.2-gd php7.2-mbstring php7.2-zip php7.2-mysql php7.2-xml
sudo apt-get install libapache2-mod-php7.2 -y

sudo a2dismod php5
sudo a2enmod php7.2
sudo service apache2 restart

来源:How to upgrade PHP to 7.2 on ubuntu?

【讨论】:

【参考方案4】:

你可以通过 .htaccess 文件在下面添加一个简单的行来做到这一点:

切换到 PHP 4.4:

AddHandler application/x-httpd-php4 .php

切换到 PHP 5.0:

AddHandler application/x-httpd-php5 .php

切换到 PHP 5.1:

AddHandler application/x-httpd-php51 .php

切换到 PHP 5.2:

AddHandler application/x-httpd-php52 .php

切换到 PHP 5.3:

AddHandler application/x-httpd-php53 .php

切换到 PHP 5.4:

AddHandler application/x-httpd-php54 .php

切换到 PHP 5.5:

AddHandler application/x-httpd-php55 .php

切换到 PHP 5.6:

AddHandler application/x-httpd-php56 .php

切换到 PHP 7:

AddHandler application/x-httpd-php7 .php

切换到 PHP 7.1:

AddHandler application/x-httpd-php71 .php

【讨论】:

以上是关于如何在 Cloud9 上的 PHP 5.6 / 7.2 之间切换?的主要内容,如果未能解决你的问题,请参考以下文章

让 Cloud9 (Ubuntu 14.04) 与 PHP 7.0 和 phpMyAdmin 一起运行

markdown 如何在PHP 7.1和PHP 5.6之间的Laravel Valet中切换PHP版本

如何在symfony项目中将php版本从7.0降级到5.6?

如何在CentOS 6.7上将PHP 5.3升级到PHP 5.6

在FreeBSD上使用PHP-7是否安全可靠?

php5.5.6如何配置