Scriptcase 9.12.023 PHP 8.1 trava ao gerar fonte

Bom dia,

Há 3 dias atualizei para a última versão do SC, 9.12.023 PHP 8.1. Consegui fazer o restore do backup dos projetos da versão antiga. O problema é que alguns módulos do projeto travam na hora que vai Gerar o Fonte. Pedi para inspecionar a página e apresentou o seguinte erro

ob_end_flush(): Failed to delete and flush buffer. No buffer to delete or flush | Script: /var/www/html/scriptcase912023/devel/class/generator/gerador.php linha: 46

Alguém poderia me ajudar a resolver isso, por favor?

Stanley Jones

1 Curtida

Caro @Stanley,

Você poderia dar mais detalhes sobre quais módulos travam no momento em que ocorre a geração do código-fonte da aplicação? Se ocorre com aplicações específicas ou independe, se as aplicações são simples ou possuem customizações específicas?

Ficamos no aguardo de mais detalhes para que possamos dar continuidade. De toda forma, sugerimos que caso isso esteja impedindo você de dar continuidade no uso normal da ferramenta, entre em contato com o suporte da ferramenta através do chat para que possa ter um suporte mais detalhado e assertivo.

Nossos cumprimentos!

Obrigado pela atenção amigo.

É muito curioso o erro. Acontece geralmente em módulos do tipo formulário. Teve casos em que alguns que estavam travando ao gerar o fonte, voltaram a gerar novamente depois de várias tentativas logo após excluir os dados de navegação (uso google chrome). Outros porém continuam dando o erro e não importa o que você tente fazer vai continuar falhando ao gerar o fonte. O módulo é um form normal, sem nenhuma adição de código personalizado.

O problema com certeza é no PHP 8.1, disso eu tenho certeza. Quando voltei para o PHP 7.3, ou 7.4 funcionou normalmente, sem nenhum problema. Agora no PHP 8.1 acontece o erro.

Ao inspecionar a página no SC que gera o fonte, quando dá o erro encontrei a seguinte menssagem

ob_end_flush(): Failed to delete and flush buffer. No buffer to delete or flush | Script: /var/www/html/scriptcase912023/devel/class/generator/gerador.php linha: 46

Explicação do chatGPT

O erro relacionado à função ob_end_flush() no PHP 8.1 normalmente acontece porque o buffer de saída já foi encerrado ou não existe no momento em que ob_end_flush() é chamado .

Explicação técnica:

  • A função ob_end_flush() só funciona se houver um buffer de saída ativo.
  • Se nenhum ob_start() tiver sido chamado anteriormente (ou se todos os buffers já tiverem sido encerrados), essa função vai gerar esse erro.
  • Isso pode acontecer em frameworks, bibliotecas ou CMSs (como o Scriptcase), especialmente se o código assume que sempre há um buffer iniciado.

O que mudou no PHP 8.1?

No PHP 8.1, algumas mensagens de erro que antes eram warnings silenciosos agora são fatal errors ou warnings mais verbosos, especialmente sobre manipulação de buffers.

Como evitar:

Antes de chamar ob_end_flush(), verifique se há um buffer ativo:

if (ob_get_level() > 0) {
ob_end_flush();
}