Статьи

Обновление вашего Linux-сервера до PHP 7.0

Конечный продукт
Что вы будете создавать

Изображение на обложке через PONTIER

PHP 7 был выпущен в декабре прошлого года. После того как вы протестировали свой код на локальном уровне, пришло время обновить рабочий сервер. Как правило, я обнаружил, что большинство моих сайтов работают на нем хорошо.

Тем не менее, я подозреваю, что не так много сайтов были обновлены. Часто более безопасно и легче оставаться на старых выпусках. Фактически, опрос сайтов WordPress показал, что немногие имеют:

«По состоянию на ноябрь 2016 года 52,9% веб-сайтов WordPress используют версию PHP меньше PHP 5.5. Только 3,4% веб-сайтов WordPress используют PHP 7, текущую основную версию PHP». через PHP Compatibility Checker .

Но PHP 7 вышел уже почти год.

В сегодняшнем выпуске я расскажу вам о моем рекомендуемом подходе к обновлению до PHP 7 в Ubuntu 14.x и решении проблем с PHPMyAdmin, с которым столкнулись многие ранние обновления.

В настоящее время, если вы используете WordPress, установите плагин PHP Compatibility Checker, чтобы избежать неожиданных проблем с массивом плагинов.

Я всегда благодарен за ваши идеи и отзывы. Если у вас есть вопрос или предложение по теме, пожалуйста, оставьте свои мысли в комментариях ниже.

Вы также можете связаться со мной через Twitter @reifman напрямую. Это особенно верно для популярных сценариев обновления, таких как этот, где собственный опыт и вклад пользователей будут уникальными и ценными.

Я попытался использовать некоторые стандартные руководства по обновлению PHP 7 и столкнулся с рядом различных проблем. Таким образом, сценарии, которыми я делюсь с вами ниже, неоднократно тестировались, и я верю, что то, что я представляю, будет работать для вас.

Опять же, я очень благодарен Digital Ocean , который позволяет легко создавать резервные копии моего сервера и многократно создавать тестовые экземпляры для запуска с нуля.

Давайте начнем.

На этом этапе вы можете записать ваши настройки PHP .ini и, возможно, сделать резервную копию файла php.ini, поскольку позже вам потребуется перенести их в PHP 7.

Это должно помочь вам найти ваш файл .ini:

1
$ php —ini

Это показало мне:

1
2
3
4
5
6
$ php —ini
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php5/20121212/newrelic.so’ — /usr/lib/php5/20121212/newrelic.so: cannot open shared object file: No such file or directory in Unknown on line 0
Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File: /etc/php5/cli/php.ini
Scan for additional .ini files in: /etc/php5/cli/conf.d

Для Apache мой был в /etc/php5/apache2 .

Во-первых, давайте очистим все наши старые пакеты PHP. Я обнаружил, что лучше всего сделать это тщательно, охватывая не только PHP5, но также 5.5 и 5.6, с которыми я экспериментировал на своем сервере.

1
2
3
4
5
$ sudo apt-get -y purge php php-common php-mcrypt php-mbstring
$ sudo apt-get -y purge php5 php5-common php5-cli libapache2-mod-php5 php5-curl php5-gd php5-imap php5-intl php5-json php5-mcrypt php5-mysql php5-pspell php5-readline php5-sqlite
$ sudo apt-get -y purge php5.5 php5.5-common php5.5-mcrypt php5.5-mbstring
$ sudo apt-get -y purge php5.6 php5.6-common
$ sudo apt-get autoremove

Когда я не удалил все эти варианты PHP, я столкнулся с проблемами, пытаясь настроить PHP 7. Если у вас есть простой подход, пожалуйста, поделитесь им в комментариях.

Обновление до PHP7 PPA для PHP70 от Ondej Sur
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ sudo add-apt-repository ppa:ondrej/php
 Co-installable PHP versions: PHP 5.5, 5.6, PHP 7.0 and batteries included.
 
You can get more information about the packages at https://deb.sury.org
 
For PHP 5.4 on Ubuntu 12.04 use: ppa:ondrej/php5-oldstable
 
BUGS&FEATURES: This PPA now has a issue tracker: https://deb.sury.org/#bug-reporting
 
PLEASE READ: If you like my work and want to give me a little motivation, please consider donating regularly: https://donate.sury.org/
 
WARNING: add-apt-repository is broken with non-UTF-8 locales, see https://github.com/oerdnj/deb.sury.org/issues/56 for workaround:
 
# LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
 More info: https://launchpad.net/~ondrej/+archive/ubuntu/php
Press [ENTER] to continue or ctrl-c to cancel adding it
 
gpg: keyring `/tmp/tmpj6czswxr/secring.gpg’ created
gpg: keyring `/tmp/tmpj6czswxr/pubring.gpg’ created
gpg: requesting key E5267A6C from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpj6czswxr/trustdb.gpg: trustdb created
gpg: key E5267A6C: public key «Launchpad PPA for Ondřej Surý» imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK

А затем я обновил свои пакеты и дистрибутив и очистил все оставшиеся файлы:

1
2
3
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get autoremove

Вы можете увидеть такие ошибки:

1
2
3
The link /vmlinuz.old is a damaged link
Removing symbolic link vmlinuz.old
 you may need to re-run your boot loader[grub]

Я решил перезагрузиться в этот момент, и это, похоже, сработало:

1
$ sudo reboot

Далее мы устанавливаем PHP7 и все его пакеты:

1
sudo apt-get install php7.0 php7.0-mysql libapache2-mod-php7.0 php-apcu php7.0-gd php7.0-mcrypt php-memcache php7.0-curl php7.0-tidy php-xml php-json php7.0-mbstring php-gettext libmcrypt-dev mcrypt php-gd libmcrypt4 libmhash2 libtidy5 libxslt1.1 php-apcu-bc php-pear php7.0-mbstring php7.0-xml

На этом этапе вы захотите перенести любые измененные настройки в ваши файлы конфигурации в /etc/php/7.0/apache2/php.ini .

Мне также нужно было добавить extension=apc.so в мой файл php.ini:

1
$ sudo nano /etc/php/7.0/apache2/php.ini

Я вставил это здесь:

01
02
03
04
05
06
07
08
09
10
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll
extension=apc.so

На этом этапе, если вы используете PHPMyAdmin, у вас возникнут проблемы с перезагрузкой Apache. Если это так, вам нужно отключить PHPMyAdmin:

1
$ sudo nano /etc/apache2/apache2.conf

Закомментируйте строку, которая загружает его внизу:

01
02
03
04
05
06
07
08
09
10
11
# Include of directories ignores editors’ and dpkg’s backup files,
# see README.Debian for details.
 
# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf
 
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
 
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
# Include /etc/phpmyadmin/apache.conf

Затем я включил mcrypt и mbstring а затем перезапустил Apache:

1
2
3
$ sudo phpenmod mcrypt
$ sudo phpenmod mbstring
$ sudo service apache2 restart

Я проверил это на сервере с приложениями, построенными только на HTML, для PHP и для Yii1.x, и все они работали.

Далее, давайте восстановим установку PHPMyAdmin. Многие люди боролись с этим.

Сначала я добавил хранилище пакетов по nijel :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
$ sudo add-apt-repository ppa:nijel/phpmyadmin
 Latest phpMyAdmin packages — https://www.phpmyadmin.net/.
 
There are some notable changes:
 
* it currently requires updated PHP packages, you can get packages from https://launchpad.net/~ondrej/+archive/ubuntu/php/
* it does include embedded copies of PHP libraries
 
If you like phpMyAdmin, you can support it’s further development at https://www.phpmyadmin.net/donate/ or https://www.phpmyadmin.net/sponsors/, thanks!
 More info: https://launchpad.net/~nijel/+archive/ubuntu/phpmyadmin
Press [ENTER] to continue or ctrl-c to cancel adding it
 
gpg: keyring `/tmp/tmp6zix40vr/secring.gpg’ created
gpg: keyring `/tmp/tmp6zix40vr/pubring.gpg’ created
gpg: requesting key 06ED541C from hkp server keyserver.ubuntu.com
gpg: /tmp/tmp6zix40vr/trustdb.gpg: trustdb created
gpg: key 06ED541C: public key «Launchpad PPA for Michal Čihař» imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK

Затем я обновил пакеты и установил PHPMyAdmin:

1
2
$ sudo apt-get update
$ sudo apt-get install phpmyadmin

Обратите внимание, что это все равно перезагрузит кучу старых пакетов PHP 5.x, но PHPMyAdmin в конечном итоге будет работать.

Затем я раскомментировал строку PHPMyAdmin, которую мы комментировали выше.

1
$ sudo nano /etc/apache2/apache2.conf

Вот:

01
02
03
04
05
06
07
08
09
10
11
# Include of directories ignores editors’ and dpkg’s backup files,
# see README.Debian for details.
 
# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf
 
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
 
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Include /etc/phpmyadmin/apache.conf

И я перезапустил Apache:

1
$ sudo service apache2 restart

Это установило PHPMyAdmin обратно в папку по умолчанию, которая очень небезопасна и взломана. Пожалуйста, следуйте инструкциям по установке и использованию PHPMyAdmin с WordPress, чтобы лучше защитить вашу установку.

После этого я создал небольшой phpinfo(); файл для проверки активности PHP 7:

Обновление до выхода PHP 7 phpinfo

Обновление до PHP 7 на моем существующем Ubuntu 14.x было проблематичным и требовало большого количества изменений по сравнению с опубликованными скриптами. Я надеюсь, что сегодняшний урок будет вам полезен.

Если вам понравилось это, пожалуйста, следите за новыми учебниками из серии «Программирование с Yii2» и « Построение стартапа с помощью PHP» , в которых описывается процесс создания моего запуска, Meeting Planner .

Вы также можете следить за мной @reifman в Твиттере или проверять обновления на странице моего инструктора .