Classe php para trabalhar com oracle

Compartilho com todos a classe criada por mim para utilização com oracle, todos estão livres para utilizar, copiar e modificar, mas por favor, peço que mantenahm os créditos, pois dediquei um bom de pesquisa nisso!

final class oracle
{

		/*
		 * Classe para conexão e queries a banco oracle
		 * Criado em 02/10/2011 por Felipe Braz
		 * Versão 1.1
		 * Duvidas sugestões: fbraz3 [arroba] gmail.com
		 * Copia/modificação livre desde que se mantenham os créditos
		*/

        public $oci_error;

		private $conexao  = null;
        private $username = null;
        private $password = null;
        private $uri      = null;

		public function get_instance($username, $password, $uri)
		{
			$this->username = $username;
			$this->password = $password;
			$this->uri		= $uri;
			return $this;
		}

        public function __construct()
        {
            //Sem construtor
        }

        public function connect()
        {
                if (!$this->conexao = @oci_connect($this->username, $this->password, $this->uri)) {
                        $this->oci_error = @oci_error($this->conexao);
                        die("Erro ao conectar ao Oracle " . $this->oci_error['text']);
                }
        }       

        public function query($sql)
        {
                $stmt = @oci_parse($this->conexao, $sql);
                $r = @oci_execute($stmt);
                $this->oci_error = oci_error($stmt);
                return $r;
        }
}

Exemplos de uso:

Instanciar conexão ao banco com os seguintes dados:
Banco de dados: testeoracle
Senha: s3nh40r4cl3
URL de conexao: 10.1.1.1/oracle

$obj = new oracle;
$obj->get_instance('testeoracle','s3nh40r4cl3','10.1.1.1/oracle')->connect();

Uma vez conectado pode-se efetuar uma query livre usando o método query()

$res = $obj->query("SELECT * FROM USUARIOS");
var_dump($res);

Para obter todos os dados da tabela, pode-se usar a função do php oci_fetch_array()

$res = $obj->query("SELECT * FROM USUARIOS");
while($r = oci_fetch_array($res))
{
   echo $r['usuario']."n";
}

Os erros retornados ficam no atributo publico oci_error.

Exemplo de tratamento de erro:

//conexão
$obj = new oracle;
$obj->get_instance('testeoracle','s3nh40r4cl3','10.1.1.1/oracle')->connect();

//Consulta na tabela USUARIOS
$res = $obj->query("SELECT * FROM USUARIOS");

//Se retornou erro, debuga ele e mata o script
if($obj->oci_error)
{
	print_r($obj->oci_error);
	die();
}

//Loop para obter todos os dados da tabela
while($r = oci_fetch_array($res))
{
   echo $r['usuario']."n";
}

COmo podem ver, a classe é bem simples, porém extremamente funcional para uso com oracle.

Function para retornar todos os IPs de um range

Esses tempos tive a necessidade de obter uma lista de todos os ips contidos em um range.

Se fossem somente ranges /24 seria muito fácil, porém para o sistema que eu estava desenvolvendo havia necessidade de escalabilidade, podendo ser inserido qualquer range como /16 /30 /28, etc.

Depois de procurar muito no oráculo google achei algo que se aproximava do que eu precisava, a classe net/ipv4 do PEAR, eu digo que se aproximava porque ela retorna o primeiro e o último IP de qualquer range, mas não a lista completa.

Com a classe ipv4 em mãos, resolví escrever a function abaixo que me retorna a lista completa:

function calculateIpRange($cidr) {
        $cidr = trim($cidr);
        if(!preg_match("/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}/", $cidr)){
                return Array(false, 'O IP deve estar no formato XXX.XXX.XXX.XXX/XX --> Exemplo 192.168.0.50/28');
        }
        if(!@include_once 'Net/IPv4.php')
        {
                return Array(false, 'Classe Net_IPv4 não está instalada --> http://pear.php.net/package/Net_IPv4/');
        }

        if(!is_callable('Net_IPv4', 'parseAddress'))
        {
                return Array(false, 'Metodo Net_IPv4::parseAddress inexistente');
        }
        $ip_calc = Net_IPv4::parseAddress($cidr);
        if($ip_calc->message)
        {
                return Array(False, $ip_calc->message);
        }

        $s = sprintf("%u",ip2long($ip_calc->network));
        $e = sprintf("%u",ip2long($ip_calc->broadcast));
        for($i=$s;$i<=$e;$i++){
                $r[] = long2ip($i);
        }
        return Array(
                true,
                'info' => Array(
                        'total' => sizeof($r),
                        'source'        => $cidr,
                        'network' => $ip_calc->network,
                        'broadcast' => $ip_calc->broadcast,
                        'netmask'       => $ip_calc->netmask
                ),
                'data' => $r
        );
}

NOTA: Este método necessita da classe net/ipv4 do pear instalada no servidor, o que pode ser realizado com o comando abaixo:

pear install Net_IPv4-1.3.4

Na dúvida, consulte seu provedor para instalação da mesma no servidor 😉

———————————————-
Posted Listening: “Starblind – Iron Maiden”