+2

Extrato de Horas utilizando Radius e Radius Report

criado por Wagner Quedi Rosa em 05/02/2003 8:39pm
Quinto Passo:

Desenvolver o script que disponibilize ao usuário seu extrato.

Nesta página mostrarei um script que irá gerar o extrato para o usuário.

Criaremos primeiramente um include que irá ter:
- Uma função que se encarregará de iniciar a tabela;
- Uma função que fará o loop com os dados do extrato;
- Uma função para finalizar a tabela.

conteúdo do extrato.inc.php:
<?php 
// função encarregada de iniciar a tabela
function tabelainit($useri, $mesi)
{
    echo '<table border="0" cellpadding="0" cellspacing="1" width="95%" bgcolor="gray">
  			<tr bgcolor="gray" valign="top" align="center">';
    echo "<td bgcolor='#fefefe'><font face='verdana' size='-1' color='navy'>Olá $useri, confira seu uso de internet em $mesi</font></td>";
    echo '
		</tr>
		</table>
		<BR>
		<table border="0" cellpadding="0" cellspacing="1" width="95%" align="center" bgcolor="gray">
			<tr bgcolor="#dcdcdc">
 			  <td width="14%" bgcolor="#dcdcdc"><div align="center"><font face="verdana" size="-1">Data</font></div></td>
			  <td width="14%" bgcolor="#dcdcdc"><div align="center"><font face="verdana" size="-1">Inicio</font></div></td>
			  <td width="14%" bgcolor="#dcdcdc"><div align="center"><font face="verdana" size="-1">Saída</font></div></td>
			  <td width="14%" bgcolor="#dcdcdc"><div align="center"><font face="verdana" size="-1">Tempo</font></div></td>
			  <td width="14%" bgcolor="#dcdcdc"><div align="center"><font face="verdana" size="-1">Total</font></div></td>
			</tr> ';
}

// função encarregada do loop de dados
function tabelaloop($a0, $a1, $a2, $a3, $a4, $a5)
{
    echo "
  			<tr bgcolor=\"gray\">
				<td width=\"14%\" bgcolor=\"white\" valign=\"top\" align=\"center\"><font face=\"verdana\" size=\"-2\" color=\"navy\">$a0</font></td>
				<td width=\"14%\" bgcolor=\"white\" valign=\"top\" align=\"center\"><font face=\"verdana\" size=\"-2\" color=\"navy\">$a1</font></td>
				<td width=\"14%\" bgcolor=\"white\" valign=\"top\" align=\"center\"><font face=\"verdana\" size=\"-2\" color=\"navy\">$a2</font></td>
				<td width=\"14%\" bgcolor=\"white\" valign=\"top\" align=\"center\"><font face=\"verdana\" size=\"-2\" color=\"navy\">$a3</font></td>
 			    <td width=\"14%\" bgcolor=\"white\" valign=\"top\" align=\"center\"><font face=\"verdana\" size=\"-2\" color=\"navy\">$a5</font></td>
			</tr>";
}

// função encarregada de finalizar a tabela
function tabelafim()
{
    echo '</table>';
?>
<br>
<table width="99%" border="1" cellspacing="1" cellpadding="2" align="center" bordercolor="#000000">
  <tr align="center" valign="top"> 
      <td colspan="4" height="14"><font face="Arial, Helvetica, sans-serif" size="2" color="#000000">Obs: 
          O extrato conta as conexões do 1º 
          ao Último dia do mês e é atualizado 
          a cada 2 horas.</font></td>
   </tr>
</table>
<?php 
}
?>

Bom depois do include ter sido feito iremos alterar o script PHP que fizemos na página anterior, o extrato.php.

Agora já temos 3 arquivos, são eles:
1 - login.php -> responsável por captar o login, senha e mês para o extrato.
2 - extrato.php -> responsável por autenticar o usuário e disponibilizar o extrato online.
3 - extrato.inc.php -> responsável pelas funções de início, loop e fim da tabela.

O formato do extrato.php depois de alterado será:

conteúdo do extrato.php:
<html>
<head>
<title>Extrato de Horas</title>
</head>
<body>
<?php 
// usado para iniciar a autenticação
$dsn = "{200.167.191.130/pop:110}";

// funcção que irá verificar se a senha é valida ou nao ..
function authenticate($dsn, $username, $password )
{
    $imap = @imap_open($dsn, $username, $password, OP_HALFOPEN);
    if ($imap) {
        @imap_close($imap);
        return true;
    }
    @imap_close($imap);
    return false;
}

// recebe o login, senha e manda autenticar 
if (authenticate($dsn,$login,$senha)) {
    // Usuário autenticado...
    $dataa = date("Ym");
    $meis = date("m") . "-" . date("Y");
    $arq = "/tarifas/extrato/" . $dataa . "/" . $login;
    $log = "$login";
    if (file_exists("/tarifas/extrato/$extmes/$log")) {
       $fp = file("/tarifas/extrato/$extmes/$log");
    } else {
       echo "<span class='descricao'>Tarifa não disponivel neste período!<BR></span>";
    }
    include("extrato.inc.php");
    tabelainit($login, $extmes);
    for($i2=2; $i2 < count($fp)-2; $i2++) {
        // filtra os dados da tabela.
        $dados[0] = substr($fp[$i2],0,10);
        $dados[1] = substr($fp[$i2],11,8);
        $dados[2] = substr($fp[$i2],20,8);
        $dados[3] = substr($fp[$i2],29,7);
        $dados[4] = substr($fp[$i2],38,4);
        $dados[5] = substr($fp[$i2],43,7);
        $dados[6] = substr($fp[$i2],51,10);
        if (substr($dados[0],0,8) == "Multiple") {
            $i2++;
            $dados[0] = substr($fp[$i2],0,10);
            $dados[1] = substr($fp[$i2],11,8);
            $dados[2] = substr($fp[$i2],20,8);
            $dados[3] = substr($fp[$i2],29,7);
            $dados[4] = substr($fp[$i2],38,4);
            $dados[5] = substr($fp[$i2],43,7);
            $dados[6] = substr($fp[$i2],51,10);
            echo "<td colspan='100%' width='100%' bgcolor='white' valign='top' align='left'><font face=\"verdana\" size=\"-1\" color=\"navy\">Acesso Simultâneo Detectado:</font></td>";
            tabelaloop("$dados[0]", "$dados[1]", "$dados[2]", "$dados[3]", "$dados[4]", "$dados[5]", "$dados[6]");
        } elseif ($dados[0] != "----------") {
            tabelaloop($dados[0], $dados[1], $dados[2], $dados[3], $dados[4], $dados[5], $dados[6]);
        }
    }
    echo "</table>";
    echo "<table border=0 cellpadding=0 cellspacing=1 width=95% bgcolor=gray>";
    echo "<tr bgcolor=gray valign=top align=left><td bgcolor=#fefefe>";
    echo "<font face=verdana size=-1 color=navy>";
    $i2++;
    echo "$fp[$i2]";
    echo "</font></td></tr>";
    tabelafim();
} else {
    // Usuário ou senha inválido
    echo "Login ou Senha Invalido";
}
?>
</body>
</html>

O mais difícil já está feito... na próxima página veremos um script para os administradores. Como assim? um script para que o administrador do servidor de acesso remoto possa ter um controle de quantas horas no total cada ususário utilizou...

(Próxima página :: Script para Administração)

Comentários:

Mostrando 1 - 10 de 33 comentários
Viniciu Silva disse:
Ola pessoal, depois que migrei de sendmail para qmail, meu extrto nao funciona mais... alguem pode me dar alguma ajuda ???
23/03/2005 8:27pm (~19 anos atrás)

Iniciamos a migração de toda a base para o freeradius, incluindo o postfix junto.
06/08/2004 5:01pm (~20 anos atrás)

amigo .. meu radius ta programado para todo dia 1 ele rezetar o detail e guardar o antigo compactado .. acho que só isso resolveria o problema ..
14/06/2004 3:30pm (~20 anos atrás)

Tudo funciona bem, desde que o arquivo detail tenha logs do dia 1/jan a 31/12 do mesmo ano, senao mistura tudo. Isso se deve a problemas com o radiusreport que processa a opcao -d somente o mes e esquece do ano. A solucao seriam duas, alterar o script do radiusreport, mais dificil :) ou separar anualmente o arquivo detail.
01/05/2004 3:50pm (~20 anos atrás)

David Muniz disse:
Estou usando o script no COnecetiva 8 mas não consigo autenticar de jeito nehnhum.

26/12/2003 11:05am (~20 anos atrás)

Olá!
Por enquanto estou usando somente a primeira parte do artigo que não prescisa de PHP...
Numa parte do script eu presciso informar onde está o arquivo detail...
/var/log/radacct/ras/detail...
só que eu tenho três subdiretórios dentro do diretório radacct e consequentemente três arquivos detail... Como é que eu faço pra juntar, ou informar no script para que ele pegue as informações contidas nesses três arquivos????
Valeu!
Gumesson
05/12/2003 10:23am (~20 anos atrás)

amigo estarei disponibilizando esse sistema daqui uns dias aqui ... mas entre em contato comigo pelo mail webmaster@quedinet.com.br que te ajudo a modificar, pois preciso de informações de como é mostrado o numero do tel no seus arquivos de dados do extrato ...
23/04/2003 12:03pm (~21 anos atrás)

esse erro aparece pq não foi gerado os arquivos do extrato através do radrep ..
para gerar os arquivos de todos os meses verifique no comentario anterior ao seu que está descrito como proceder.. qualquer problema me avisa...
10/03/2003 12:36pm (~21 anos atrás)

use esse comando

#mkdir /tarifas/extrato/ANOMES

#tarifas/radiusrep/radrep -t -l all -f /local/do/seu/detail -d MES -o /tarifas/extrato/ANOMES

subistitua o ano e o mes pelo ano e mes que vc deseja ..

cara.. so que tem um probleminha se vc colocar o MES 02 ele vai gerar 02 de 2003 se vc colocar 04 ele gera 04 de 2002 (pois ainda nao passamos pelo mes 04 de 2003

ainda nao achei uma solução para gerar os meses de 01 de 2002 nem 02 2002 nem 03 2002

mas ja adianta um bocado ..

qualquer coisa é so falar..
05/03/2003 8:28pm (~21 anos atrás)

sobre como eliminar uma parte vc pode usar esse comando ..
<?
$login = "xxx@teste.com.br";
$dados = explode("@", $login);
echo $dados[0]; //aparecerá o login
echo $dados[1]; //aparecerá o dominio
?>

qualquer coisa me da um toque,.. fui ...
03/03/2003 7:19pm (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)