Correr um script Perl ou CGI na sua hospedagem: permissões, fins de linha e o erro 500 que se segue

cPanel & WHM··· 99 visualizações· 4 min de leitura

A resposta curta: os scripts Perl e CGI (muitos formulários e contadores antigos) funcionam na hospedagem, mas são exigentes: o ficheiro tem de ter permissão de execução (755), a primeira linha tem de apontar para o Perl certo, as linhas têm de acabar como no Linux (LF), e o script tem de começar por escrever um cabeçalho. Falhar qualquer uma dá o mesmo erro: 500.

Um script mínimo que deve funcionar

Crie um ficheiro chamado teste.cgi com este conteúdo:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<h1>Funciona</h1>";

Envie-o para a pasta cgi-bin do site (ou para a pasta onde os CGI estão ativos), dê-lhe a permissão 755 e abra o-seu-dominio.com/cgi-bin/teste.cgi. Se aparece «Funciona», o resto é o seu script.

As causas do erro 500, por ordem

Causa Como a reconhece O que fazer
Falta o cabeçalho O registo diz «Premature end of script headers». A primeira coisa que o script escreve tem de ser Content-type: text/html seguido de uma linha vazia.
Permissão errada O ficheiro não tem a permissão de execução, ou está demasiado aberto (777). Ponha 755 no script e na pasta: Permissões de ficheiros.
Caminho do Perl errado A primeira linha (#!/usr/bin/perl) não existe neste servidor. Confirme o caminho do Perl no seu servidor (num terminal, which perl) ou pergunte-nos.
Fins de linha do Windows (CRLF) O script foi escrito no Windows e enviado como binário: a primeira linha fica «/usr/bin/perl^M» e não existe. Grave o ficheiro com fins de linha Unix (LF) no editor, ou envie-o em modo de texto pelo FTP.
Erro no próprio código O registo mostra uma linha do script. Corra-o no terminal: perl -c teste.cgi verifica a sintaxe.
Módulo Perl em falta «Can’t locate ... in @INC». Veja os módulos no cPanel, ou peça-nos que o instalemos.
Scripts antigos são um risco. Muitos nunca foram atualizados e têm falhas conhecidas (formulários que deixam enviar e-mail a qualquer pessoa, por exemplo). Antes de os usar, veja se há uma alternativa atual: Um formulário seguro e sem spam. Para ler o registo, veja Ler as páginas de Erros.
Para tudo o que corre aqui, incluindo o Perl, veja Que tecnologias correm aqui. E para o erro 500 em geral: Erro 500.

O script continua a dar 500? Abra um pedido com o endereço, o caminho do ficheiro e a linha do registo.

Abrir pedido de suporte

Onde ver na sua conta

Não indicamos aqui o caminho do Perl, porque é a própria conta que lho diz. Use estas verificações:

  • Caminho do Perl. Se «Terminal» (ou «Acesso SSH») aparecer no seu cPanel, a conta tem SSH: escreva which perl e use a resposta na primeira linha do script. Se nenhum aparecer, ponha o caminho habitual no test.cgi e, se falhar, abra um ticket.
  • A pasta cgi-bin está ativa? Não o dê por adquirido. Envie o test.cgi deste artigo para a pasta cgi-bin com a permissão 755: se escrever a mensagem, o CGI funciona ali.
  • Módulos Perl. Se o seu cPanel mostrar o ícone «Módulos Perl» na secção «Software», ele lista os módulos instalados; se o ícone não existir, peça-nos o módulo de que precisa.
  • O erro verdadeiro. A página «Erros» do cPanel mostra a linha do registo, como Premature end of script headers.

VEJA TAMBÉM

Que tecnologias correm aqui: PHP, Node, Python, Perl, jogos e os limites

Erro 500 (Internal Server Error): descobrir a causa, passo a passo

Permissões de ficheiros explicadas: o que querem dizer 755, 644 e 777

Ler as páginas de Erros e de Acesso Bruto do cPanel quando uma página falha

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

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

Ver planos
Esta resposta foi útil? A sua resposta ajuda-nos a melhorar este artigo.