【问题标题】:How to switch between PHP 5.6 / 7.2 on Cloud9?如何在 Cloud9 上的 PHP 5.6 / 7.2 之间切换?
【发布时间】: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 为什么?当我用它运行它时,它提醒我除非我想要一个系统范围的安装,否则我不应该使用它。但这就是我需要的,不是吗?

标签: php ubuntu cloud9-ide cloud9 phpbrew


【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-07
        相关资源
        最近更新 更多