Я использую AWS Cloud9 Amazon Web Services, например, Cloud9 IDE. Я пытаюсь выполнить настройку, в которой я могу легко переключать версию PHP веб-интерфейса (не CLI) с 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
Я бы в идеале переключился с phpbrew switch
после того, как у меня установлены оба 5.6.31 и 7. На данный момент я был бы удовлетворен, если бы я мог просто заставить его работать с 5.6.31
На данный момент я переключил «бегуна» (не уверен, что это) из PHP (встроенный веб-сервер) в Apache httpd (PHP, HTML) Вот: https://i.snag.gy/Y6eNHy.jpg Тогда phpinfo()
на самом деле показывал версию phpbrew. Тогда я тоже установлен PHP 7.2.1 но потом все перестало работать. Я получаю много ошибок в консоли C9: https://i.snag.gy/pt5oHN.jpg Красиво, не правда ли? 🙂
Started apache2
/mnt/shared/bin/run-apache2: line 70: 4813 Segmentation fault apache2
Я полностью угробила phpbrew поскольку это не совсем для переключения PHP Apache, просто CLI (по замыслу). Это никогда не должно было работать, смотрите: это все еще запрос функции.
Начал с чистого рабочего пространства Cloud9 PHP / Apache. Я следил за этой статьей Как установить PHP 5.6, PHP 7.1 на Ubuntu 16.04, 14.04 с использованием 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:
$ php7.2 -v
php7.2: symbol lookup error: php7.2: undefined symbol: pcre_jit_exec
Это я исправил, следуя совету «Обновите вашу библиотеку libpcre3 до версии из хранилища».
Оказывается, это было «сдержано», поэтому я должен был сделать этот:
apt-get install libpcre3 libpcre3-dev
PHP 7.2 начал работать! Удивительно, но оригинальный PHP Cloud9 остался без изменений, который живет под 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
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
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
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
Теперь я очень счастлив.
// Обновление версии 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
Вы можете сделать это через файл .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