Jump to content
Fórum Script Brasil
  • 0

Obter Log de Impressões do Windows


Tankeiro

Question

Olá

Gostaria de saber se é possivel obter o nome do arquivo, data e hora de um arquivo que foi impresso no Windows e registrar em um banco de dados do PHP MySQL?

Quero cadastrar automaticamente o log de impressoes feitas no Windows no banco de dados MySQL usando PHP em tempo real (Uso o Laragorn sempre ligado)

Tem como?

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

acho que seria algo +- assim:
 

<?php
// Configurações
$spoolDirectory = 'C:\Windows\System32\spool\PRINTERS'; // Diretório de spool de impressão
$intervaloVerificacao = 60; // Intervalo de verificação em segundos
$databaseHost = 'localhost'; // Host do banco de dados MySQL
$databaseUsername = 'seu_usuario'; // Nome de usuário do banco de dados MySQL
$databasePassword = 'sua_senha'; // Senha do banco de dados MySQL
$databaseName = 'nome_do_banco'; // Nome do banco de dados MySQL

// Função para verificar o diretório de spool de impressão
function verificarDiretorioSpool($diretorio) {
    if (!is_dir($diretorio)) {
        echo "O diretório de spool de impressão não existe.\n";
        return;
    }
    
    $arquivos = scandir($diretorio);
    if ($arquivos === false) {
        echo "Erro ao escanear o diretório de spool de impressão.\n";
        return;
    }

    foreach ($arquivos as $arquivo) {
        if ($arquivo !== '.' && $arquivo !== '..') {
            echo "Novo arquivo de log de impressão encontrado: $arquivo\n";
            analisarArquivoLogImpressao("$diretorio/$arquivo");
        }
    }
}

// Função para analisar o arquivo de log de impressão
function analisarArquivoLogImpressao($caminhoArquivo) {
    $linhas = file($caminhoArquivo);
    if ($linhas === false) {
        echo "Erro ao ler o arquivo de log de impressão: $caminhoArquivo\n";
        return;
    }

    foreach ($linhas as $linha) {
        $informacoesImpressao = extrairInformacoesImpressao($linha);
        if ($informacoesImpressao !== false) {
            inserirRegistroBancoDados($informacoesImpressao);
        }
    }
}

// Função para extrair informações de uma linha do log de impressão
function extrairInformacoesImpressao($linha) {
    // Suponha que o formato da linha seja: "nome_arquivo, data, hora"
    $dados = explode(',', $linha);
    if (count($dados) < 3) {
        echo "Formato de linha inválido: $linha\n";
        return false;
    }

    $nomeArquivo = trim($dados[0]);
    $data = trim($dados[1]);
    $hora = trim($dados[2]);

    // Validação adicional, se necessário
    if (empty($nomeArquivo) || empty($data) || empty($hora)) {
        echo "Informações de impressão inválidas: $linha\n";
        return false;
    }

    // Retornar um array associativo com as informações
    return array(
        'nome_arquivo' => $nomeArquivo,
        'data' => $data,
        'hora' => $hora
    );
}

// Função para inserir um registro no banco de dados
function inserirRegistroBancoDados($informacoes) {
    global $databaseHost, $databaseUsername, $databasePassword, $databaseName;
    $conexao = new mysqli($databaseHost, $databaseUsername, $databasePassword, $databaseName);
    if ($conexao->connect_error) {
        echo "Erro ao conectar ao banco de dados: " . $conexao->connect_error . "\n";
        return;
    }

    $sql = "INSERT INTO registros_impressao (nome_arquivo, data, hora) VALUES (?, ?, ?)";
    $stmt = $conexao->prepare($sql);
    if (!$stmt) {
        echo "Erro ao preparar a consulta SQL: " . $conexao->error . "\n";
        $conexao->close();
        return;
    }
    
    $stmt->bind_param("sss", $informacoes['nome_arquivo'], $informacoes['data'], $informacoes['hora']);
    if (!$stmt->execute()) {
        echo "Erro ao inserir registro de impressão no banco de dados: " . $conexao->error . "\n";
    } else {
        echo "Registro de impressão inserido no banco de dados com sucesso.\n";
    }

    $stmt->close();
    $conexao->close();
}

// Loop principal
while (true) {
    verificarDiretorioSpool($spoolDirectory);
    sleep($intervaloVerificacao);
}

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...