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

时间:2018-01-23 13:12:37

标签: php ubuntu cloud9-ide cloud9 phpbrew

我使用AWS Cloud9 Amazon Web Services a.k.a. Cloud9 IDE。我正在尝试实现一个设置,我可以轻松地将前端(而非CLI)PHP版本与PHPBrew在5.6和7之间切换。现在,我只实现了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。我只是从这样的线程中收集了这些线条,看起来很有希望,但我必须遗漏一些东西。

其他信息(评论中要求):

$ 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漂亮,不是吗? :)

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

4 个答案:

答案 0 :(得分:6)

我完全抛弃了 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工作者。

5.6的mbstring将会丢失(运行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

有一行:

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

有一行:

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

有一行:

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

现在我很开心。

答案 1 :(得分: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

答案 2 :(得分:2)

以下内容将在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?

答案 3 :(得分:1)

您可以通过以下添加simle行来通过.htaccess文件执行此操作:

切换到PHP 4.4:

# I use python 2
import Tkinter as tk 
# For Python 3 use import tkinter as tk 

def create_grid(event=None):
    w = c.winfo_width() # Get current width of canvas
    h = c.winfo_height() # Get current height of canvas
    c.delete('grid_line') # Will only remove the grid_line

    # Creates all vertical lines at intevals of 100 except for first and last
    for i in range(100, w - 100, 100):
        c.create_line([(i, 0), (i, h)], tag='grid_line')

    # Creates all horizontal lines at intevals of 100 except for first and last
    for i in range(100, h - 100, 100):
        c.create_line([(0, i), (w, i)], tag='grid_line')

root = tk.Tk()

c = tk.Canvas(root, height=300, width=300, bg='white')
c.pack(fill=tk.NONE, expand=True)

c.bind('<Configure>', create_grid)

root.mainloop()

切换到PHP 5.0:

AddHandler application/x-httpd-php4 .php

切换到PHP 5.1:

AddHandler application/x-httpd-php5 .php

切换到PHP 5.2:

AddHandler application/x-httpd-php51 .php

切换到PHP 5.3:

AddHandler application/x-httpd-php52 .php

切换到PHP 5.4:

AddHandler application/x-httpd-php53 .php

切换到PHP 5.5:

AddHandler application/x-httpd-php54 .php

切换到PHP 5.6:

AddHandler application/x-httpd-php55 .php

切换到PHP 7:

AddHandler application/x-httpd-php56 .php

切换到PHP 7.1:

AddHandler application/x-httpd-php7 .php