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 --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 ... |
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.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 |
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 link Removing 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.dll extension=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 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 |
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.