Resolver problemas
PrestaShop: «An exception occurred while establishing a connection to figure out your platform version»
Se, ao instalar ou atualizar o PrestaShop, no passo que trabalha com a base de dados, aparecer um erro como este:
[WARNING] Some commands could not be registered. An exception occurred in ConnectionFactory.php while establishing a connection to figure out your platform version. You can circumvent this by setting a 'server_version' configuration value. For further information, visit: https://github.com/doctrine/DoctrineBundle/issues/673. In AbstractMySQLDriver.php, an exception occurred in driver: SQLSTATE[HY000] [2026] SSL connection error: SSL_CTX_set_default_verify_paths failed. The same error is repeated in Exception.php and PDOConnection.php: SQLSTATE[HY000] [2026] SSL connection error: SSL_CTX_set_default_verify_paths failed.
o problema não é o MySQL nem os certificados do servidor: é um número mal interpretado na configuração do PrestaShop. Não lhe acontecerá se instalar com o instalador automático de aplicações do cPanel, mas, se lhe aparecer, tem duas soluções.
Porque acontece
O PrestaShop 1.7 e as versões 8.0 e 8.1 ativam a opção do MySQL MULTI_STATEMENTS escrevendo o seu número, 1013, em app/config/doctrine.yml. Esse número está correto com a extensão do PHP baseada no mysqlnd, mas a extensão pdo_mysql clássica numera as suas opções de outra forma: para ela, MULTI_STATEMENTS é a 1016 e a 1013 é o caminho dos certificados SSL (SSL_CAPATH).
Assim, o PrestaShop acaba por passar um caminho de certificados inválido à ligação, a ligação SSL falha e o Doctrine não consegue descobrir a versão do MySQL. Daí o SSL_CTX_set_default_verify_paths failed.
O PrestaShop corrigiu-o na 8.2, que usa o nome da constante em vez do número. Se atualizar a partir de uma versão anterior, o erro pode aparecer durante a atualização.
Solução 1: ativar a extensão nd_pdo_mysql (recomendada)
Substitua a extensão pdo_mysql pela nd_pdo_mysql em cPanel > Select PHP Version, no separador das extensões:
- Desmarque pdo_mysql.
- Marque nd_pdo_mysql.

As alterações são guardadas automaticamente. A nd_pdo_mysql faz o mesmo que a pdo_mysql, mas usa a numeração que o PrestaShop espera (1013), pelo que não tem de mexer em nenhum ficheiro.
Se o seu domínio usar uma versão de PHP diferente da geral da conta, faça a alteração nessa versão. Tem a explicação em várias versões de PHP por diretório ou domínio.
Solução 2: editar o app/config/doctrine.yml
Use-a apenas se não puder alterar a extensão. Abra app/config/doctrine.yml com o gestor de ficheiros do cPanel e procure a secção options:
options: # PDO::MYSQL_ATTR_INIT_COMMAND 1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))" # PDO::MYSQL_ATTR_MULTI_STATEMENTS 1013: '%env(const:runtime:_PS_ALLOW_MULTI_STATEMENTS_QUERIES_)%'
Substitua o 1013 por 1016:
options: # PDO::MYSQL_ATTR_INIT_COMMAND 1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))" # PDO::MYSQL_ATTR_MULTI_STATEMENTS 1016: '%env(const:runtime:_PS_ALLOW_MULTI_STATEMENTS_QUERIES_)%'
Respeite a indentação com espaços: o YAML não admite tabulações. Depois esvazie a cache apagando o conteúdo de var/cache/ e repita a instalação ou a atualização.
O 1016 só está correto com a pdo_mysql. Se mais tarde ativar a nd_pdo_mysql, volte a colocar o 1013.
Verificar que funciona
Repita a instalação ou a atualização: o passo da base de dados deve ser concluído sem o aviso de platform version. Se a atualização tiver ficado a meio, reveja antes o seu registo e, se for preciso, restaure a cópia que fez antes de começar.
Também lhe pode ser útil
- Conflito com a tabela «system» do Drupal no MySQL 8 (erro 1064) Resolva o erro 1064 do Drupal 6 e 7 com o MySQL 8 causado pela tabela system, palavra reservada: atu...
- Joomla 1.0 e 1.5 com o MySQL 8, erro com a palavra reservada «groups» Faça com que um Joomla 1.0 ou 1.5 funcione com o MySQL 8 escapando a palavra reservada groups nas co...
- Erro "Argument X passed OrderProductForViewing must be of the type string" Identifique o argumento e a linha exatos que entregam NULL ao visualizar uma encomenda do PrestaShop...
- Erro "Shop not found at line xxx in file classes/shop/Shop.php" Localize a origem de Shop not found revendo o URL pedido, shop_url e o âmbito de PS_SHOP_DEFAULT ant...
Algo não bate certo ou mudou? Diga-nos e revemos.