Pular para o conteúdo principal
PHP 8

Atualizando seu Drupal para usar PHP 8.0

Está utilizando Drupal com PHP 7.4 e quer migrar para PHP 8.0 com segurança? Veio ao lugar certo!

Segue abaixo o passo a passo para você atualizar seu PHP para 8.0 verificando as dependências de sua instalação antes de atualizar.

Presumo que tenha conhecimento mínimo de terminal, drush e composer. Caso não tenha, entre em contato conosco através do chat ou formulário de contato e podemos marcar uma agenda para te ajudar a fazer a atualização!

 

Como verificar se minha instalação do Drupal é compatível com PHP 8?

composer why-not php 8

O comando acima vai mostrar quais as bibliotecas; seja módulo, tema ou qualquer uma de suas dependências que impedem que você atualize para php 8.0.

"Why not" (por que não) vai nos dizer porque não podemos instalar php 8 no nosso projeto.

Vale lembrar que o composer vai apenas verificar as bibliotecas (e suas dependências) que estão no arquivo composer.json do seu projeto. Caso tenha algum modulo ou tema customizado, por exemplo, não saberemos através deste comando se ele está preparado ou não para o php 8. Podem, também, haver casos de bibliotecas que não especificaram incompatibilidades com o php 8 no composer.json deles.

Quando eu rodei em um dos meus projetos, por exemplo, acusou que a biblioteca `sentry/sentry 1.7` era incompatível com o php 8.

Mas eu não tinha essa biblioteca no composer.json do meu projeto. E agora?

Perguntamos então pro composer, por que temos essa biblioteca?

composer why sentry/sentry 1.7

Composer respondeu que sentry/sentry 1.7 é uma dependência de drupal/raven.

Atualizando o módulo do drupal/raven com o comando:

composer update drupal/raven -W

Utilizamos "-W" para atualizar também as dependências do módulo (isso inclui a biblioteca sentry/sentry)

Rodamos então:

drush updb

Para verificar se não tem nenhuma 

E pronto.

Rodamos de novo:

composer why-not php 8

Agora verificamos que não temos nenhum motivo para não atualizar o php 8.

 

Mas... e as minhas customizaçoes?

Ah sim, módulos e temas custom. Precisamos verificar se nada que você fez irá quebrar ao atualizar o php.

Para isso usamos PHPCS e PHP Compatibility.

Como eu presumo que já saiba utilizar PHPCS vou pular essa parte da configuração.

A gente instala a biblioteca do PHP Compatibility:

composer require --dev phpcompatibility/php-compatibility

Para facilitar nossa vida, a gente pode adicionar os comandos aos scripts do composer:

"scripts": {
        [...],
        "test-module-compatibility": [
            "phpcs -p web/modules/custom --standard=PHPCompatibility"
        ],
        "test-theme-compatibility": [
            "phpcs -p web/themes/custom --standard=PHPCompatibility"
        ]
 }

Perceba que estamos olhando dentro das pastas web/modules/custom e web/themes/custom, se quiser, podemos olhar todos os modulos e temas simplesmente alterando a pasta para web/modules e web/themes.

Para checar os modulos executamos o seguinte comando:

composer test-module-compatibility

Se tivermos algum erro ou aviso veremos algo do tipo no console:

FILE: ../web/modules/custom/mymodule/src/ControllerFile.php
----------------------------------------------------------------------
FOUND 0 ERRORS AND 7 WARNINGS AFFECTING 5 LINES
----------------------------------------------------------------------
 371 | WARNING | INI directive 'track_errors' is deprecated since PHP 7.2
 371 | WARNING | The variable '$php_errormsg' is deprecated since PHP 7.2; Use error_get_last() instead
 371 | WARNING | The variable '$php_errormsg' is deprecated since PHP 7.2; Use error_get_last() instead
 372 | WARNING | INI directive 'track_errors' is deprecated since PHP 7.2
 373 | WARNING | The variable '$php_errormsg' is deprecated since PHP 7.2; Use error_get_last() instead
 379 | WARNING | The variable '$php_errormsg' is deprecated since PHP 7.2; Use error_get_last() instead
 381 | WARNING | INI directive 'track_errors' is deprecated since PHP 7.2
----------------------------------------------------------------------

A primeira linha mostra qual o arquivo que tem os erros ou avisos.

A primeira coluna mostra qual a linha problemática. A segunda coluna mostra o tipo da mensagem, se é aviso ou erro. Nesse caso são todos avisos. A terceira coluna mostra a descrição do erro, e em certos casos até sugere como consertar.

O ideal é que não tenha nem avisos (warnings) ao rodar esse comando.

Em seguida fazemos a mesma coisa com o tema:

composer test-module-compatibility

Ao rodar esse comando você pode se deparar com mensagens de que o phpcs não consegue verificar um arquivo (CSS ou JS) por conta de estar minificado. Mas neste caso estamos apenas verificando a versão do PHP, então não precisamos nos preocupar com arquivos CSS ou JS.

Verifique apenas se recebe mensagem sobre arquivos PHP parecidos com o do comando do módulo que rodamos acima.

Após ajusta-los, a sua instalação estará pronta para ser atualizada para PHP 8.0.