如何在 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 install
与sudo
一起运行。
请在您的主题中提供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?