Изображение на обложке через 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 5
На этом этапе вы можете записать ваши настройки 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
.
Удалить PHP5 и связанные пакеты
Во-первых, давайте очистим все наши старые пакеты 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 и PHPMyAdmin
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
Далее мы устанавливаем 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
На этом этапе, если вы используете 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
Далее, давайте восстановим установку 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 обратно в папку по умолчанию, которая очень небезопасна и взломана. Пожалуйста, следуйте инструкциям по установке и использованию PHPMyAdmin с WordPress, чтобы лучше защитить вашу установку.
Убедитесь, что PHP 7 запущен
После этого я создал небольшой phpinfo();
файл для проверки активности PHP 7:
В заключение
Обновление до PHP 7 на моем существующем Ubuntu 14.x было проблематичным и требовало большого количества изменений по сравнению с опубликованными скриптами. Я надеюсь, что сегодняшний урок будет вам полезен.
Если вам понравилось это, пожалуйста, следите за новыми учебниками из серии «Программирование с Yii2» и « Построение стартапа с помощью PHP» , в которых описывается процесс создания моего запуска, Meeting Planner .
Вы также можете следить за мной @reifman в Твиттере или проверять обновления на странице моего инструктора .