Consultores Renato Rubinho Postado 5 Novembro Consultores Postado 5 Novembro Olá pessoal, Na Rev-35964 foi enviada uma implementação para os programas de exemplo em PHP consumirem as bibliotecas do ACBr em servidores que não possuam ambiente gráfico. Caso o servidor não possua ambiente gráfico e tente carregar as Lib via FFI no PHP, o Servidor Web (Apache por exemplo) deverá acusar o erro cannot open display. A solução é instalar um emulador de ambiente gráfico como o Xvfb: https://www.geeksforgeeks.org/how-to-install-xvfb-on-ubuntu/ Além de instalar o emulador, também é necessário adicionar o comando a seguir, antes de carregar a Lib com o FFI. putenv("DISPLAY=:1"); As alterações foram na ACBrComum.php, conforme destacado a seguir: function verificaAmbienteGrafico() { $verificaX11 = shell_exec('pgrep Xorg 2>&1') !== null; $displayX11 = getenv('DISPLAY') !== false; if ($verificaX11 || $displayX11) { // Ambiente grafico X11 return 1; } else { $verificaXVFB = shell_exec('pgrep Xvfb 2>&1') !== null; $displayXVFB = strpos(getenv('DISPLAY'), ':99') !== false; if ($verificaXVFB || $displayXVFB) { // Emulador XVFB return 2; } else { // Sem ambiente grafico return 0; } } } Implementada função verificaAmbienteGrafico() para identificar se existe ambiente gráfico real, emulado ou se não existe ambiente gráfico. function CarregaContents($importsPath, $dllPath) { $modoGrafico = verificaAmbienteGrafico(); if ( $modoGrafico === 0) { throw new Exception("Ambiente gráfico não identificado"); return -10; } if ($modoGrafico === 2){ // comando necessário para carregar as bibliotecas do ACBr no PHP com FFI e ambiente gráfico emulado putenv("DISPLAY=:1"); } $ffi = FFI::cdef( file_get_contents($importsPath), $dllPath ); return $ffi; } Na função CarregaContents(), que é responsável por carregar as bibliotecas através do FFI, foi implementada a verificação do ambiente gráfico e adicionado o comando necessário quando houver apenas o ambiente gráfico emulado. Com esses ajustes os programas de exemplo em PHP que disponibilizamos devem funcionar corretamente em servidores com emulador de ambiente gráfico. Até mais!!! 3
Recommended Posts