Boa tarde pessoal,
Resolvi postar aqui um problema que temos há algum tempo aqui na empresa em relação as LIBs.
Estamos rodando a LIB consumindo a AcbrLibNfe no Linux com PHP, mas meu receio é em produção porque existe esse problema de qualquer parâmetro inválido, mata o servidor e ocorre um problema de memória, já coloquei em uma máquina local linux, já coloquei na AWS, ocorre a mesma coisa.
O erro que acontece no c++ é o seguinte:
Em todos os lugares que pesquisei (incluindo gpt), é dito que isso é um problema de memória (ponteiro).
Muitas pessoas tiveram o mesmo problema, o exato erro Segmentation Fault(11), no php, ele aparece da seguinte forma:
Mesmo colocando o código dentro de um try {} catch {} o erro acontece.
Alegam que o erro é o Xvfb não ter sido iniciado corretamente. Não é isso, se o Xvfb não for iniciado a extensão também não inicia.
Só para lembrar, o Xvfb é o emulador da parte gráfica para versões do Linux que não possuem interface visual (como na aws).
Com o comando abaixo eu verifico o status do serviço do Xvfb:
Para contornar o problema da lib de não retornar o erro, o primeiro passo foi criar as classes da pasta Meta para que o php valide todas as informações que são passadas para extensão:
Mas mesmo assim, em alguns casos ocorrem erros, acredito que seja pelo fato de parte da documentação estar errada ou desatualizada, um exemplo, é a Lib CRY_CAPICOM que está na documentação como opção válida, porém, ao definí-la na extensão, o erro Segmentation Fault acontece:
Isso está extremamente lento, (descobrir as combinações válidas). Além do fato de que eu também preciso validar o tipo de dado (string, boolean, number etc) para passar para a extensão pois se o tipo de dado estiver errado, a extensão também para de funcionar.
Na classe NFeConfig.php eu faço todas as validações iniciais (apenas as iniciais, pois todo o código precisa de validações para contornar o bug da extensão). Todos os caminhos de arquivos e diretórios tem que ser validados pois um caminho inexistente também gera o erro.
O erro está no c++, corrigindo lá o erro no php deixará de acontecer.
Se você quiser eu posso criar um zip aqui com os arquivos para que testem aí.
Eu terei que criar um arquivo de instruções para que consigam fazer funcionar.