Introdução
PHP 7 foi lançado dezembro passado. Após testar o código localmente, é hora de atualizar o servidor de produção. Geralmente, a maioria dos sites funcionam bem nele.
Contudo, suspeitamos que não muitos sites atualizaram. É mais seguro e fácil continuar em versões anteriores. Na verdade, uma pesquisa de sites WordPress mostrou que alguns tem:
“Até Novembro de 2016, 53.9% dos sites WordPress rodam versões PHP menores que 5.5 Apenas, 3.4% dos sites rodam PHP 7, a versão atual do PHP.” via PHP Compatibility Checker.
Mas PHP 7 já está aí há quase um ano.
Nesse episódio, mostraremos uma abordagem para atualizar para PHP 7 no Ubuntu 14.x e resolver problemas com PHPMyAdmin, que muitos vanguardistas enfrentaram.
Por hora, se usamos WordPress, devemos instalar o plugin PHP Compatibility Checker para garantir que não encontraremos problemas inesperados com nossos Plugins.
Sempre gostamos de suas ideias e comentários. Se tiverem perguntas ou sugestões de tópicos, por favor, publique seus pensamentos na seção de comentários.
Atualizando o Servidor
Tentamos usar alguns guias padrões para atualizar para PHP 7 e acabamos lidando com problemas diferentes. Logo, os scripts abaixo foram testados repetidamente e acreditamos que funcionarão bem.
Note Quaisquer Customizações ao PHP 5
A essa altura, talvez queiramos dar uma olhada nas mudanças do PHP .ini e fazer cópia do arquivo php.ini já que precisaremos depois, par migrá-lo para PHP 7.
Isso deve ajudarnos a encontrar o arquivo .ini:
| 
 1 
 | 
$ php --ini | 
Isso mostrou-nos:
| 
 1 
2 
3 
4 
5 
6 
 | 
$ php --iniPHP 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 0Configuration File (php.ini) Path: /etc/php5/cliLoaded Configuration File:         /etc/php5/cli/php.iniScan for additional .ini files in: /etc/php5/cli/conf.d... | 
Para o Apache, o nosso foi /etc/php5/apache2.
Remover Pacotes PHP5 e Relacionados
Primeiro, removamos os pacotes antigos do PHP. Acreditamos ser melhor fazê-lo com cuidado, cobrindo não apenas o PHP5, mas o 5.5 e o 5.6, os quais experimentamos em um servidor.
| 
 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 | 
Quando não removemos todas as variações do PHP, enfrentamos problemas para configurar o PHP 7. Se tiverem alguma abordagem mais simples, por favor, compartilhe.
Adicionando um Arquivo de Pacotes Pessoais para PHP7 e 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.orgFor PHP 5.4 on Ubuntu 12.04 use: ppa:ondrej/php5-oldstableBUGS&FEATURES: This PPA now has a issue tracker: https://deb.sury.org/#bug-reportingPLEASE 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/phpPress [ENTER] to continue or ctrl-c to cancel adding itgpg: keyring `/tmp/tmpj6czswxr/secring.gpg' createdgpg: keyring `/tmp/tmpj6czswxr/pubring.gpg' createdgpg: requesting key E5267A6C from hkp server keyserver.ubuntu.comgpg: /tmp/tmpj6czswxr/trustdb.gpg: trustdb createdgpg: key E5267A6C: public key "Launchpad PPA for Ondřej Surý" importedgpg: Total number processed: 1gpg:               imported: 1  (RSA: 1)OK | 
E então, atualizamos nossos pacotes, distribuições e limpamos os arquivos remanescentes:
| 
 1 
2 
3 
 | 
$ sudo apt-get update$ sudo apt-get dist-upgrade$ sudo apt-get autoremove | 
Talvez vejamos erros como esse:
| 
 1 
2 
3 
 | 
The link /vmlinuz.old is a damaged linkRemoving symbolic link vmlinuz.old  you may need to re-run your boot loader[grub] | 
Preferimos reiniciar e isso parece resolver o problema:
| 
 1 
 | 
$ sudo reboot | 
Instalando PHP7
Agora, instalamos o PHP7 e todos seus pacotes:
| 
 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 | 
No mometo, quereremos migrar todas as mudanças das configurações nos arquivos de configuração para /etc/php/7.0/apache2/php.ini.
Também precisamos adicionar extension=apc.so no arquivo:
| 
 1 
 | 
$ sudo nano /etc/php/7.0/apache2/php.ini | 
Colocamos isso aqui:
| 
 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.dllextension=apc.so | 
Desabilitando PHPMyAdmin
Agora, se tivermos PHPMyadmin, teremos problemas ao reiniciar o Apache. Se for o caso, precisamos desabilitar o PHPMyAdmin:
| 
 1 
 | 
$ sudo nano /etc/apache2/apache2.conf | 
Comentemos a linha que o carrega, lá no final:
| 
 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 | 
Então, habilitamos mcrypt e mbstring e reiniciamos Apache:
| 
 1 
2 
3 
 | 
$ sudo phpenmod mcrypt$ sudo phpenmod mbstring$ sudo service apache2 restart | 
Testmos num servidor rodando alguns apps construídos apenas com HTML, PHP e Yii1.x e todos funcionaram.
Resintalando PHPMyAdmin
É hora de repararmos a instalação do PHPMyAdmin. Muitas pessoas encontram problemas.
Primeiro, adicionamos o repositório do pacote de 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/. Based on packages available in Debian.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 librariesIf 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/phpmyadminPress [ENTER] to continue or ctrl-c to cancel adding itgpg: keyring `/tmp/tmp6zix40vr/secring.gpg' createdgpg: keyring `/tmp/tmp6zix40vr/pubring.gpg' createdgpg: requesting key 06ED541C from hkp server keyserver.ubuntu.comgpg: /tmp/tmp6zix40vr/trustdb.gpg: trustdb createdgpg: key 06ED541C: public key "Launchpad PPA for Michal Čihař" importedgpg: no ultimately trusted keys foundgpg: Total number processed: 1gpg:               imported: 1  (RSA: 1)OK | 
Então, atualizamos os pacotes e instalamos PHPMyAdmin:
| 
 1 
2 
 | 
$ sudo apt-get update$ sudo apt-get install phpmyadmin | 
Note que isso recarregará vários pacotes antigos do PHP 5.x, mas o PHPMyAdmin funcionará.
Por fim, descomentamos a linha do PHPMyAdmin que comentamos anteriormente.
| 
 1 
 | 
$ sudo nano /etc/apache2/apache2.conf | 
Aqui:
| 
 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 | 
E reiniciamos o Apache:
| 
 1 
 | 
$ sudo service apache2 restart | 
Protegendo a Instalação do PHPMyAdmin
A reinstalação do PHPMyAdmin pô-lo de volta ao local padrão, que é bem inseguro e hackeável. Sigamos Instalando e Usando PHPMyAdmin Com WordPress para proteger melhor a instalação.
Verificando se PHP 7 Está Executando
Finalmente, criamos um pequeno script com phpinfo(); para verificar se o PHP 7 está ativo:

Finalizando
Atualizar para o PHP 7 num Ubuntu 14.x foi problemático e requereu muitas mudanças dos scripts publicados para funcionar. Espero que tenham curtido o tutorial.