Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

  • Consultores
Postado

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!!!
image.png.c66a8e350a15080739793c08a9f4af

  • Curtir 3
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.