[RESOLVIDO] Erro de sintaxe ocorrendo em qualquer ambiente que não seja Hostgator - Erro: syntax error, unexpected ‘if’ (T_IF), expecting function (T_FUNCTION)

Pessoal, estou quebrando cabeça com o seguinte problema:

Tenho uma hospedagem Hostgator, com PHP 7.4.33 (pelo que vi, usam o LiteSpeed como servidor web).
Nele, tenho uma aplicação feita com o ScriptCase 9 que funciona normalmente.

Estou tentando migrar para uma hospedagem própria na AWS, usando PHP 7.4.33 (mesma versão) e Apache.

Em um programa gerado pelo scriptcase, no arquivo index.php está dando um erro de sintaxe, mas que não ocorre na outra hospedagem (com exatamente a mesma versão do PHP), já estou pra ficar louco e ainda não consegui resolver. Lembro que um tempo atrás eu comentei com o suporte, mas não foi resolvido, infelizmente.

Erro ocorrido:
Parse error: syntax error, unexpected ‘if’ (T_IF), expecting function (T_FUNCTION) or const (T_CONST) in …\grid_cad_pessoas\index.php on line 1806

O erro ocorre no trecho de código abaixo (erro é apontado na linha 1806):

Obs: Já tentei diferentes versões do PHP, e o erro continua. Testei também em uma instalação XAMPP em minha maquina, e também continua. Não entendo por que só roda nas hospedagens do Hostgator.

O Sistema operacional é linux no hostgator e na AWS?
Se não for, pode ser necessário rever a configuração do php. Isso geralmente acontece quando se muda de Linux para Windows.
Compare nos dois servidores a saída do “phpinfo();” para ver se há alguma diferença que possa causar esse erro.

Outra dica de solução é varrer o código em busca de caracteres ocultos.

1 Curtida

Ufa. Finalmente descobri.

Tudo ocorre por que nos servidores da Hostgator, no arquivo php.ini tem uma cofiguração “short_open_tags” que fica ativada por padrão.

Quando ela tá ativada, ela aceita a taga “<?” como tag de abertura de código PHP. Eu tinha usado essa tag em um código customizado em uma grid que fiz.

Na AWS (ou em outras instalações PHP) ela vem desativada por padrão, o que ocasiona o erro, pois o PHP não entende o que é a tag e gera erro, mas gera erro em outro local (local onde ocorre a “quebra de código”).

Para resolver eu ativei a tag, mas também resolveria trocando “<?” por “<?php”.

2 Curtidas