Corrigir “Call to undefined function”: a extensão que falta

A mensagem “Call to undefined function nome()” diz que o código chamou uma função que o PHP desta pasta não tem. Quase sempre é uma extensão que está desligada nesta versão do PHP, e liga-se em Select PHP Version. A palavra do início do nome da função diz-lhe qual.

Não é uma função “desactivada” por nós: nenhuma função do PHP está desactivada neste servidor (veja exec e shell_exec). É uma função que não foi carregada.

Da função à extensão

A função começa por… Extensão a ligar
mb_ (mb_strlen, mb_substr) mbstring
curl_ curl
imagecreate…, imagejpeg… gd (ou imagick, para o Imagick)
bcadd, bcmul… bcmath
gmp_ gmp
pg_ (pg_connect) pgsql. O PostgreSQL existe; o módulo vem desligado.
imap_, ldap_ imap, ldap
mysql_ (mysql_connect) Nenhuma: estas funções foram removidas do PHP 7. O código é antigo e tem de passar a mysqli ou PDO. Veja ligar ao MySQL pelo PHP.

O mesmo vale para “Class not found”: Imagick, ZipArchive, SoapClient e Redis são classes de extensões (imagick, zip, soap, redis).

Corrigir, passo a passo

1 Anote o nome da função e o ficheiro que a chama, que vêm na mensagem.
2 Confirme que versão do PHP corre naquela pasta (veja ver e ajustar a configuração do PHP). É a causa mais comum de a extensão “estar ligada e não estar”: ligou-a numa versão e o site corre noutra.
3 Em Select PHP Version, escolha essa versão, abra Extensions e marque a extensão da tabela. Veja ligar uma extensão do PHP.
4 Recarregue a página que dava o erro. Se continua, confirme num ficheiro com <?php phpinfo(); que a extensão aparece carregada.

Não sabe a que extensão pertence uma função? Procure o nome dela no php.net: a página de cada função diz a que extensão pertence e a partir de que versão do PHP existe. É mais seguro do que ligar extensões às cegas. E se a extensão não está na lista dessa versão do PHP, experimente outra versão; uma aplicação que exige uma extensão que a conta não oferece é um caso para um VPS.

Mudou a versão do PHP e o erro apareceu agora? Cada versão tem o seu conjunto de extensões ligadas. A que tinha marcada na versão anterior não passa para a nova: marque-a de novo. Veja mudar a versão do PHP sem partir o site.
Uma extensão em falta pode ser um código velho demais. Se a função desapareceu do próprio PHP (é o caso do mysql_*, e de each() e create_function() no PHP 8), nenhuma caixa a faz voltar. Actualize a aplicação ou, enquanto não o puder fazer, use uma versão mais antiga do PHP só para essa pasta.

Ligou a extensão e a função continua em falta? Envie-nos a mensagem, a pasta e a versão do PHP.

Abrir um pedido de suporte

VEJA TAMBÉM

Ligar ou desligar uma extensão do PHP

Ver e ajustar a configuração do PHP

exec e shell_exec funcionam aqui?

Onde está o registo de erros do PHP

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 321,75 MT/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?