mess_erro[101] = "Não foi possível estabelecer uma conexão com o servidor LDAP."; $this->mess_erro[102] = "Não foi possível autenticar no servidor LDAP."; $this->mess_erro[103] = "A pesquisa não retornou resultado."; $this->mess_erro[104] = "Não foi possível estabelecer uma conexão com o Banco de Dados."; $this->mess_erro[105] = "Falha na seleção da base de dados."; $this->mess_erro[106] = "Falha na execução do SQL."; $this->mess_erro[107] = "Usuário ou senha inválida!"; $this->mess_erro[108] = "Ocorreu um erro durante a execução do Bind."; $this->mess_erro[109] = "Ocorreu um erro durante a execução do cursor."; $this->mess_erro[150] = "Diretório cache sem permissão de gravação ou inexistente."; $this->mess_erro[200] = "Registro cancelado."; } public function erro($cod,$nv,$observ="") { if( !DEBUG and $nv != 3 ) { $observ = ""; } $this->ultimo_erro = $cod; if($nv == 1) { print $this->mess_erro[$cod]; } if($nv == 2 or $nv == 3) { print "
\n"; print "\n"; print "\n"; print "
\n"; print "Erro[".$cod."]: ".$this->mess_erro[$cod]." $observ
"; exit(); } if($nv == 5) { return $this->mess_erro[$cod]." - ".$observ; } } } class banco { public $link; private $ultimo_sql; private $resultado; private $pacotes; private $bindvars; private $sep_numerico; private $erros; private $permissoes; private $pasta_base; private $nivel; // Número de subdiretorios abaixao da pasta_base private $json_saida = false; public function __construct() { $this->erros = new erros(); //encontrar pasta base $this->pasta_base = $this->_encontrarArquivo(PASTA_BASE,$this->nivel); if ( TIPO_ACESSO == "E" and AUTENTICAR_EXTERNO ) { if ( !$_SESSION["num_pessoa"] ) { $this->_logon(); } else if ( !$_SESSION['tempo_restante']= $this->_ler_tempo_andamento_sessao(APLICATIVO."-" .$_SESSION['num_pessoa']."-".$_SERVER["REMOTE_ADDR"]) ) { exit(); } } if ( TIPO_ACESSO == "I" ) { // Forcar login quando usa acesso interno primeira vez na sessao $this->_GetLogin($login_nome,$login_senha); if ( strlen($login_nome) < 1 || strlen($login_senha) < 1 or ( defined('PROJETO') and !isset($_SESSION[APLICATIVO]["login"]) and !is_array($_SESSION[APLICATIVO]["login"]) ) ) { $this->_logon(); } else if ( !$_SESSION['tempo_restante']= $this->_ler_tempo_andamento_sessao(APLICATIVO."-" .$login_nome."-".$_SERVER["REMOTE_ADDR"]) ) { exit(); } } return 1; } private function _microtime() { return microtime(true); } public function getbase() { return $this->pasta_base; } private function _ler_tempo_andamento_sessao($identificador) { if ( SESSAO_TEMPO_MAX > 0 ) { if ( $identificador ) { $sessao = $this->pasta_base."cache/SESSOES/".$identificador.".cache"; } if ( !file_exists($sessao) or ($tr=SESSAO_TEMPO_MAX-time()+filemtime($sessao)) < 0 ) { $this_nivel=null; if ( $tr < 0 ) { $mens_autenticar[0] = "Sessão expirada!"; } if ( file_exists(str_repeat('../',$this_nivel).'includes/tela_login.inc') ) { include(str_repeat('../',$this_nivel).'includes/tela_login.inc'); } else if ( file_exists($this->pasta_base.'includes/tela_login.inc') ) { include($this->pasta_base.'includes/tela_login.inc'); } session_destroy(); if ( file_exists($sessao) ) { @unlink($sessao); } return null; } else if ( SESSAO_TEMPO_MAX > 0 ) { return intval($tr/60)." min. e ".($tr%60)." seg."; } } else { return "Sem restrição de tempo de sessão"; } } private function _gravar_hora_inicio_sessao($identificador) { if ( SESSAO_TEMPO_MAX > 0 ) { if ( !is_writable($this->pasta_base."cache") or !filetype($this->pasta_base."cache")=="dir" ) { return $this->erros->erro(150,5); } else if ( !file_exists($this->pasta_base."cache/SESSOES") ) { mkdir($this->pasta_base."cache/SESSOES"); } $t=time(); $h=opendir($this->pasta_base."cache/SESSOES"); while($file=readdir($h)) { $path=$this->pasta_base."cache/SESSOES/".$file; if ( $t-filemtime($path) > (SESSAO_TEMPO_MAX>0?SESSAO_TEMPO_MAX:7200) ) { @unlink($path); } } closedir($h); if ( !file_exists($this->pasta_base."cache/SESSOES/".$identificador.".cache") ) { $fp = fopen($this->pasta_base."cache/SESSOES/".$identificador.".cache", "w"); fwrite($fp,"Sessão: ".date("d-m-Y H:i:s")); fclose($fp); } } return null; } private function _logon() { $mens=null; $BANCO_TNS = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.2.10)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ibamamma1)))"; if ( TIPO_ACESSO == "E" ) { if ( defined('CONEXAO_PERSISTENTE') and CONEXAO_PERSISTENTE ) { $this->link = @oci_pconnect(BANCO_USUARIO,BANCO_SENHA,$BANCO_TNS); } else { $this->link = @oci_connect(BANCO_USUARIO,BANCO_SENHA,$BANCO_TNS); } if ( !$this->link ) { return $this->erros->erro(104,5); } if ( defined('AUTENTICAR_EXTERNO') and AUTENTICAR_EXTERNO ) { if ( (isset($_POST['login_cpf']) and strlen($_POST['login_cpf']) > 1) or (isset($_POST['login_senha']) and strlen($_POST['login_senha']) > 1) ) { $bvars_logon = array("CPF_CNPJ_NUM_PESSOA"=>ereg_replace("[^0-9]","",$_POST['login_cpf']) ,"SENHA" => $_POST['login_senha'] ,"DES_BROWSER" => $_SERVER["HTTP_USER_AGENT"] ,"NUM_IP_CLIENTE" => ($_SERVER["HTTP_X_FORWARDED_FOR"]?$_SERVER["HTTP_X_FORWARDED_FOR"].',':'').$_SERVER["REMOTE_ADDR"]); $mens_autenticar = $this->executar_pacote_func_proc(AUTENTICAR_EXTERNO,$bvars_logon,-1); if ( !is_array($mens_autenticar) ) { $_SESSION['SEQ_SESSAO'] = $bvars_logon['SEQ_SESSAO']; $this->commit(); $epf=explode(".",strtoupper(AUTENTICAR_EXTERNO)); $esquema_pacote = $epf[0].".".$epf[1]; $funcao = $epf[2]; $parametros = $this->pacotes[$esquema_pacote]->funcoes[$funcao]->parametros; foreach($parametros as $v) { if ( preg_match('/OUT/i',$v->sentido) ) { $nome = preg_replace("'^P_'","",$v->nome); $var_sessao = strtolower($nome); $_SESSION[$var_sessao] = $bvars_logon[$nome]; } } $this->_gravar_hora_inicio_sessao(APLICATIVO."-".$_SESSION['num_pessoa']."-".$_SERVER["REMOTE_ADDR"]); } } if ( $_SESSION['num_pessoa'] ) { $_SESSION['tempo_restante']= $this->_ler_tempo_andamento_sessao(APLICATIVO."-".$_SESSION['num_pessoa']. "-".$_SERVER["REMOTE_ADDR"]); if ( !$_SESSION['tempo_restante'] ) { exit(); } } else { $this_nivel=null; if ( file_exists(str_repeat('../',$this_nivel).'includes/tela_login.inc') ) { include(str_repeat('../',$this_nivel).'includes/tela_login.inc'); } else if ( file_exists($this->pasta_base.'includes/tela_login.inc') ) { include($this->pasta_base.'includes/tela_login.inc'); } exit(); } } } else if ( TIPO_ACESSO == "I" ) { if ( (isset($_POST['login_cpf']) && strlen($_POST['login_cpf'] ) > 1 ) or ( isset($_POST['login_senha']) && strlen( $_POST['login_senha'] ) > 1 )) { $login_nome = ereg_replace("[^0-9]","",$_POST['login_cpf']); $login_senha = $_POST['login_senha']; $guardar = TRUE; } else { $this->_GetLogin($login_nome,$login_senha); } if ( strlen($login_nome) < 1 || strlen($login_senha) < 1 || $login_senha === substr($login_nome,0,6) || !$this->link=@oci_connect($login_nome,$login_senha,$BANCO_TNS) ) { $erro = oci_error(); $msgErro = preg_replace("'^ORA[^:]+:'","",$erro['message']); $this_nivel=null; if ( file_exists(str_repeat('../',$this_nivel).'includes/tela_login.inc') ) { include(str_repeat('../',$this_nivel).'includes/tela_login.inc'); } else if ( file_exists($this->pasta_base.'includes/tela_login.inc') ) { include($this->pasta_base.'includes/tela_login.inc'); } session_destroy(); exit(); } if ( isset($guardar) ) { $this->_StoreLogin($login_nome,$login_senha); $this->_gravar_hora_inicio_sessao(APLICATIVO."-".$login_nome."-".$_SERVER["REMOTE_ADDR"]); } if ( !$_SESSION['tempo_restante']= $this->_ler_tempo_andamento_sessao(APLICATIVO. "-".$login_nome."-".$_SERVER["REMOTE_ADDR"]) ) { exit(); } if ( !isset($_SESSION['APLICATIVO']) or $_SESSION['APLICATIVO'] != APLICATIVO ) { $_SESSION['APLICATIVO'] = APLICATIVO; $sql = "begin sisreg.pr_funcionario_sessao(:des_aplicativo,:des_browser,:num_ip_cliente,:seq_sessao); end;"; $bvars=array("DES_APLICATIVO"=>APLICATIVO ,"DES_BROWSER"=>$_SERVER['HTTP_USER_AGENT'] ,"NUM_IP_CLIENTE"=>(isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FORWARDED_FOR"].',':'').$_SERVER['REMOTE_ADDR'] ,"SEQ_SESSAO"=>null ); $this->executar($sql,$bvars); $_SESSION['SEQ_SESSAO'] = $bvars['SEQ_SESSAO']; $this->commit(); } if ( isset($_SESSION['permissoes']) ) { $this->permissoes=$_SESSION['permissoes']; } else { $sql = "select role from session_roles"; unset($bvars); $mens = $this->executar_recuperar($sql,$bvars,$res,$nrows); if (isset($this->permissoes)) { unset($this->permissoes); } for ( $i = 0; $i < $nrows; $i++ ) { $vals = $res['ROLE'][$i]; if ( ereg("^SCI_",$vals) ) { $vals = ereg_replace("SCI_","",$vals); $vals = ereg_replace("_G_","_",$vals); $vals = ereg_replace("MOV_INT","MOVINT",$vals); $val = split("_",$vals); $sistema = $val[0]; $grupo = $val[1]; $this->permissoes[$sistema][$grupo] = 1; } } $_SESSION['permissoes']=$this->permissoes; } if ( !isset($_SESSION['login']) ) { $this->executar_pacote_func_proc("sistrut.pk_utl.dados_funcionario",$dados); $_SESSION['num_pessoa'] = $dados['NUM_PESSOA']; $_SESSION['login'] = $dados['NOM_PESSOA']; $_SESSION['unidade_ibama'] = $dados['NOM_UNIDADE_IBAMA']; $_SESSION['cod_unidade_ibama'] = $dados['COD_UNIDADE_IBAMA']; $_SESSION['sig_unidade_ibama'] = $dados['SIG_UNIDADE_IBAMA']; $_SESSION['cod_uf'] = $dados['COD_UF']; $_SESSION['num_cpf'] = $login_nome; } if ( defined('PROJETO') and !isset($_SESSION[APLICATIVO]["login"]["num_cpf"]) ) { $bvars = array('NUM_CPF'=>$login_nome); $err=$this->executar_pacote_func_proc(ESQUEMA.".PKG_SEGURANCA.SEL_FUNCIONARIO_LOGIN",$bvars,-1); if( !is_array($err) ) { if((integer)$bvars['CURSOR']["NUM_PESSOA"][0]==0) { $msgErro="num_pessoa não encontrado"; } else { $bvars_perfil=array("SEQ_PROJETO"=>PROJETO, "NUM_PESSOA"=>$bvars['CURSOR']["NUM_PESSOA"][0]); if( !$this->executar_pacote_func_proc(ESQUEMA.".PKG_SEGURANCA.SEL_PERFIL_PESSOA",$bvars_perfil,-1) ) { if((string)$bvars_perfil["PERFIS"] == "") { $msgErro="Usuário sem perfil de acesso"; } else { $_SESSION[APLICATIVO]["modulo"] = ""; $_SESSION[APLICATIVO]["login"]["perfis"] = $bvars_perfil["PERFIS"]; $_SESSION[APLICATIVO]["login"]["maior_nivel"] = $bvars_perfil["MAIOR_NIVEL"]; $_SESSION[APLICATIVO]["login"]["num_cpf"] = $login_nome; $_SESSION[APLICATIVO]["login"]["nom_pessoa"] = $bvars['CURSOR']["NOM_PESSOA"][0]; $_SESSION[APLICATIVO]["login"]["num_pessoa"] = $bvars['CURSOR']["NUM_PESSOA"][0]; $_SESSION[APLICATIVO]["login"]["cod_orgao_pai"] = $bvars['CURSOR']["COD_ORGAO_PAI"][0]; // 1-IBAMA 2-ICMBio if( !isset($bvars['CURSOR']["COD_UF_EXERCICIO"][0]) || (string)$bvars['CURSOR']["COD_UF_EXERCICIO"][0]=="") { //if( !isset($res["COD_UF_EXERCICIO"][0]) || (string)$res["COD_UF_EXERCICIO"][0]=="") { $_SESSION[APLICATIVO]["login"]["cod_uf"] = $bvars['CURSOR']["COD_UF"][0]; $_SESSION[APLICATIVO]["login"]["nom_unidade_ibama"] = $bvars['CURSOR']["NOM_UNIDADE_IBAMA"][0]; $_SESSION[APLICATIVO]["login"]["cod_unidade_ibama"] = $bvars['CURSOR']["COD_UNIDADE_IBAMA"][0]; $_SESSION[APLICATIVO]["login"]["sig_unidade_ibama"] = $bvars['CURSOR']["SIG_UNIDADE_IBAMA"][0]; } else { $_SESSION[APLICATIVO]["login"]["cod_uf"] = $bvars['CURSOR']["COD_UF_EXERCICIO"][0]; $_SESSION[APLICATIVO]["login"]["nom_unidade_ibama"] = $bvars['CURSOR']["NOM_UNIDADE_EXERCICIO"][0]; $_SESSION[APLICATIVO]["login"]["cod_unidade_ibama"] = $bvars['CURSOR']["COD_UNIDADE_EXERCICIO"][0]; $_SESSION[APLICATIVO]["login"]["sig_unidade_ibama"] = $bvars['CURSOR']["SIG_UNIDADE_EXERCICIO"][0]; } } } } } else { $msgErro = $err[0]; } if ( isset($msgErro) && $msgErro ) { if ( preg_match("'PKG_SEGURANCA não encontrado'",$msgErro) > 0 ) { $msgErro = "Usuário sem acesso a esse sistema"; } $this_nivel=null; if ( file_exists(str_repeat('../',$this_nivel).'includes/tela_login.inc') ) { include(str_repeat('../',$this_nivel).'includes/tela_login.inc'); } else if ( file_exists($this->pasta_base.'includes/tela_login.inc') ) { include($this->pasta_base.'includes/tela_login.inc'); } unset($_SESSION[APLICATIVO]); $_SESSION[APLICATIVO] = false; exit(); } } } return $mens; } private function _ajustar_separador_decimal($var,$num_chars=null) { if ( $num_chars == null ) { $num_chars=$this->pacotes['nls']->numeric_characters; } if ( is_numeric($var) and $num_chars == ',.' ) { return preg_replace("'\.'",",",strval($var)); } else if ( preg_match("'^ *[+-]?(\d+|\d{1,3}(\.\d{3})*)(,\d+)? *$'",$var) and !preg_match("'^ *[+-]?\d+(\.\d+)? *$'",$var) ) { $var = preg_replace("'\.'","",$var); if ( $num_chars == '.,' ) { return preg_replace("','",".",$var); } else { return $var; } } else if ( preg_match("'^ *[+-]?(\d+|\d{1,3}(,\d{3})*)(\.\d+)? *$'",$var) and !preg_match("'^ *[+-]?\d+(\,\d+)? *$'",$var) ) { $var=preg_replace("','","",$var); if ( $num_chars == ',.' ) { return preg_replace("'\.'",",",$var); } else { return $var; } } else { return $var; } } private function _bind($bvar,$tipo,$tamanho,$tipo_orig="",$esquema="") { if ( $tipo== "CLOB" ) { $this->bindvars[$bvar] = oci_new_descriptor($this->link, OCI_D_LOB); oci_bind_by_name($this->resultado,":".$bvar,$this->bindvars[$bvar],-1,OCI_B_CLOB); } else if ( $tipo== "BLOB" ) { $this->bindvars[$bvar] = oci_new_descriptor($this->link, OCI_D_LOB); oci_bind_by_name($this->resultado,":".$bvar,$this->bindvars[$bvar],-1,OCI_B_BLOB); } else if ( $tipo== "REF CURSOR" ) { $this->bindvars[$bvar] = oci_new_cursor($this->link); oci_bind_by_name($this->resultado,":".$bvar,$this->bindvars[$bvar],-1,OCI_B_CURSOR); } else if ( $tipo== "VARRAY" ) { $tam = (isset($this->bindvars[$bvar])?sizeof($this->bindvars[$bvar]):0); $tam = ($tam>=0?$tam:0); $this->bindvars[$bvar] = oci_new_collection($this->link,$tipo_orig,$esquema); oci_bind_by_name($this->resultado,":".$bvar,$this->bindvars[$bvar],$tam,OCI_B_NTY); } else { if ( $tipo == "DATE" ) { $tamanho=strlen($this->bindvars[$bvar]); } if ( $tipo == "NUMBER" ) { $tamanho=(isset($tamanho) && $tamanho>0?$tamanho:50); $this->bindvars[$bvar] = $this->_ajustar_separador_decimal($this->bindvars[$bvar]); } if ( !$tamanho ) { if ( is_numeric($this->bindvars[$bvar]) ) { $tamanho=32; } else { $tamanho=1000; } } if ( !oci_bind_by_name($this->resultado,":".$bvar,$this->bindvars[$bvar],$tamanho) ) { return $this->erros->erro(108,5,"[$bvar] -> ".$this->bindvars[$bvar]); } } return null; } private function _gravar_cache_resultado($sql_pac_fnc_prc,$params_entrada,$res,$tempo_cache) { if ( $tempo_cache < 0 ) { return null; } // O nome do arquivo de cache é definido pelo hash do query ou pelo nome do pacote/função // e pelo hash dos parametros de entrada. // No arquivo cache gravamos os bvars de saida da função // Se se tratar de query comum, calcular hash. if ( ereg(' ',$sql_pac_fnc_prc) ) { $pac_func_proc = md5($sql_pac_fnc_prc); } else { $pac_func_proc = strtoupper($sql_pac_fnc_prc); } // Gerar nome de arquivo usando nome do pacote e hash dos paramtros $nome_arquivo = md5(serialize($params_entrada)).".cache"; // Tentar abrir arquivo, serializar dados e colocar em cache // Se não for possível colocar em arquivo ou quando tempo_cache=0, use SESSION umask(0002); if ( $tempo_cache > 0 and is_writable($this->pasta_base."cache") and filetype($this->pasta_base."cache")=="dir" ) { if ( !file_exists($this->pasta_base."cache/".$pac_func_proc) ) { mkdir($this->pasta_base."cache/".$pac_func_proc); } else { // Remover arquivos cache de outras pesquisas ja vencidas $t=time(); $h=opendir($this->pasta_base."cache/".$pac_func_proc); while($file=readdir($h)) { $path=$this->pasta_base."cache/".$pac_func_proc."/".$file; if($t-filemtime($path)>$tempo_cache) { @unlink($path); } } closedir($h); } if ( is_writable($this->pasta_base."cache/".$pac_func_proc) and filetype($this->pasta_base."cache/".$pac_func_proc)=="dir" and ( is_writable($this->pasta_base."cache/".$pac_func_proc."/".$nome_arquivo) or !file_exists($this->pasta_base."cache/".$pac_func_proc."/".$nome_arquivo) ) ) { $fp = fopen($this->pasta_base."cache/".$pac_func_proc."/".$nome_arquivo, "w"); fwrite($fp,serialize($res)); fclose($fp); } } else { $_SESSION['dados'][$pac_func_proc][$nome_arquivo]=$res; } return null; } private function _ler_cache_resultado($sql_pac_fnc_prc,$params_entrada,$tempo_cache) { if ( $tempo_cache < 0 ) { return null; } else { // Se se tratar de query comum, calcular hash. if ( ereg(' ',$sql_pac_fnc_prc) ) { $pac_func_proc = md5($sql_pac_fnc_prc); } else { $pac_func_proc = strtoupper($sql_pac_fnc_prc); } // Gerar nome de arquivo usando nome do pacote e hash dos paramtros $arquivo = md5(serialize($params_entrada)).".cache"; $nome_arquivo = $pac_func_proc."/".$arquivo; //Tentar abrir arquivo cache ou ler da sessão if ( $tempo_cache > 0 and is_readable($this->pasta_base."cache/".$nome_arquivo) and (time() - filemtime($this->pasta_base."cache/".$nome_arquivo)) < $tempo_cache ) { $fp = fopen($this->pasta_base."cache/".$nome_arquivo, "r"); $dados = unserialize(fread($fp,filesize($this->pasta_base."cache/".$nome_arquivo))); fclose($fp); return $dados; } else if ( isset($_SESSION['dados'][$pac_func_proc][$arquivo]) ) { return $_SESSION['dados'][$pac_func_proc][$arquivo]; } } } private function _remover_comentario(&$res,$lin) { $lin = preg_replace("'--.*'","",trim($lin)); $lin = preg_replace("'/\*.*?\*/'","",$lin); if ( preg_match("'/\*.*'",$lin) ) { $lin = preg_replace("'/\*.*'","",$lin); $ln = $lin; while ( !preg_match("'\*/'",$ln) ) { $lne = each($res['TEXT']); if ( !$lne ) { break; } list(,$ln) = $lne; } $ln = preg_replace("'.*?\*/'","",trim($ln)); $lin.=$ln; } return $lin; } public function executar($SQL,&$bvars) { if ( !$this->link ) { $this->_logon(); } if ( is_resource($this->resultado) ) { oci_free_statement($this->resultado); } $this->resultado = oci_parse($this->link, $SQL); $this->ultimo_sql = $SQL; if ( is_array($bvars) ) { unset($this->bindvars); foreach($bvars as $campo=>$valor) { $this->bindvars[$campo]=$valor; if ( is_numeric( $valor ) ) { $length=32; } else if ( isset(${$campo}) ) { $length=strlen( ${$campo} ); } else { $length=null; } $tipo=null; $this->_bind($campo,$tipo,$length); } } if ( ! $res=oci_execute($this->resultado,OCI_DEFAULT)) { $erro = oci_error($this->resultado); oci_rollback($this->link); if ( is_array($this->bindvars) ) { foreach ($this->bindvars as $k=>$v) { $erro_bind.= ($erro_bind?",":"").":".$k."=".(isset($v) && $v?$v:"<sem valor>")." "; } } return $this->erros->erro(106,5,"[$SQL]
[ $erro_bind ]
".$erro['code']." - ".$erro['message']); } $bvars = $this->bindvars; return null; } public function executar_recuperar($SQL,&$bvars,&$registro,&$nlinhas,$tempo_cache=-1) { $bvars_entrada = $bvars; $registro = $this->_ler_cache_resultado($SQL,$bvars_entrada,$tempo_cache); if ( is_array($registro) ) { reset($registro); list($k,$v) = each($registro); return count($v); } else { $mens = $this->executar($SQL,$bvars); if ( !$mens ) { $nlinhas = oci_fetch_all($this->resultado,$registro); $this->_gravar_cache_resultado($SQL,$bvars_entrada,$registro,$tempo_cache); } return $mens; } if ( is_resource($this->resultado) ) { oci_free_statement($this->resultado); } } private function _parse_package($esquema_pacote) { /* Este M\351todo faz parsing do pacote e cria um objeto em php */ umask(0002); /* Obter o separador decimal que o Oracle usa nesta sessão */ if ( is_readable($this->pasta_base."cache/nls") and time() - filemtime( $this->pasta_base."cache/nls" ) < CACHE_REFRESH ) { $fp = fopen($this->pasta_base."cache/nls", "r"); $this->pacotes['nls'] = unserialize(fread($fp,filesize($this->pasta_base."cache/nls"))); fclose($fp); } else if ( isset($_SESSION['pacotes']['nls']) ) { $this->pacotes['nls'] = $_SESSION['pacotes']['nls']; } if ( defined('DEBUG') ) { $start = $this->_microtime(); } if ( !isset($this->pacotes['nls']) or !is_object($this->pacotes['nls']) ) { $sql = "select VALUE from NLS_SESSION_PARAMETERS where PARAMETER=:PAR"; $bvars = array("PAR"=>"NLS_NUMERIC_CHARACTERS"); $mens = $this->executar_recuperar($sql,$bvars,$res,$linhas); if ( $mens ) { return $mens; } if ( $linhas > 0 ) { $this->pacotes['nls']->numeric_characters=$res['VALUE'][0]; } if ( isset($this->pacotes['nls']) and is_object($this->pacotes['nls']) ) { if ( ( is_writable($this->pasta_base."cache") and filetype($this->pasta_base."cache")=="dir" ) and ( is_writable($this->pasta_base."cache/nls") or !file_exists($this->pasta_base."cache/nls")) ) { $fp = fopen($this->pasta_base."cache/nls", "w"); fwrite($fp,serialize($this->pacotes['nls']) ); fclose($fp); } else { $_SESSION['pacotes']['nls']=$this->pacotes['nls']; } } } if ( is_readable($this->pasta_base."cache/".strtoupper($esquema_pacote)) and time() - filemtime( $this->pasta_base."cache/".strtoupper($esquema_pacote) ) < CACHE_REFRESH ) { $fp = fopen($this->pasta_base."cache/".strtoupper($esquema_pacote), "r"); $this->pacotes[$esquema_pacote] = unserialize(fread($fp,filesize($this->pasta_base."cache/".strtoupper($esquema_pacote)))); fclose($fp); } else if ( isset($_SESSION['pacotes'][$esquema_pacote]) ) { $this->pacotes[$esquema_pacote] = $_SESSION['pacotes'][$esquema_pacote]; } if ( !isset($this->pacotes[$esquema_pacote]) or !is_object($this->pacotes[$esquema_pacote]) ) { $esquema_pacote=strtoupper($esquema_pacote); $e_p=explode(".",$esquema_pacote); $esquema = $e_p[0]; /* Primeiro vamos ler os tipos para collections Para poder usar estes tipos, eles devem ser declarados dentro do esquema, mas fora dos pacotes, caso contrario a função oci_new_collection não consegue pegar a definição. */ $sql = "select distinct upper(name) name from all_source where owner=:ESQUEMA and type='TYPE' and upper(text) like '%VARRAY%'"; $bvars=array("ESQUEMA"=>strtoupper($e_p[0])); $mens=$this->executar_recuperar($sql,$bvars,$res,$nl); if ( $mens ) { return $mens; } foreach ( $res['NAME'] as $nome ) { $sql = "select name,replace(upper(text),'\"','') text from all_source where owner=:ESQUEMA and name=:NOME and type='TYPE'"; $bvars=array("ESQUEMA"=>strtoupper($e_p[0]),"NOME"=>$nome); $mens=$this->executar_recuperar($sql,$bvars,$res1,$nl1); if ( $mens ) { return $mens; } $lin=""; while ( list(,$ln) = each($res1['TEXT']) ) { $lin.= $this->_remover_comentario($res1,trim($ln))." "; } if ( preg_match("'TYPE\s+".$nome."\s+[AI]S\s+VARRAY\s*\(\s*(\d+)\s*\)\s+OF\s+(\w+)(\s*\(\s*(\d+)\s*\))*.*$'" ,trim($lin),$matches) ) { $this->pacotes[$esquema_pacote]->tipos[$nome]->nome="VARRAY"; $this->pacotes[$esquema_pacote]->tipos[$nome]->array_tam=$matches[1]; $this->pacotes[$esquema_pacote]->tipos[$nome]->array_tip_dado=$matches[2]; if ( isset($matches[4]) and $matches[4] ) { $this->pacotes[$esquema_pacote]->tipos[$nome]->array_tip_dado_tam=$matches[4]; } } } $sql = "select replace(upper(text),'\"','') text from all_source where owner=:ESQUEMA and name=:PKG and type='PACKAGE'"; $bvars=array("ESQUEMA"=>strtoupper($e_p[0]), "PKG"=>strtoupper($e_p[1])); $mens=$this->executar_recuperar($sql,$bvars,$res,$nl); if ( $mens ) { return $mens; } $lin_resto=null; while ( list(,$lin) = each($res['TEXT']) ) { $lin = $this->_remover_comentario($res,$lin_resto.trim($lin))." "; $lin_resto=0; if ( preg_match("'(TYPE|FUNCTION|PROCEDURE)\s+'",$lin) ) { while ( !preg_match("'(TYPE|FUNCTION|PROCEDURE)\s+(\w+)\s*([^;]+);(.*)'",$lin,$matches) ) { list(,$ln)=each($res['TEXT']); $lin = $this->_remover_comentario($res,$lin.trim($ln))." "; } $nome = $matches[2]; $lin_resto = $matches[4]; if ( $matches[1]=="TYPE" and preg_match("'REF\s+CURSOR'",$matches[3]) ) { $this->pacotes[$esquema_pacote]->tipos[$nome]->nome="REF CURSOR"; } if ( $matches[1]=="FUNCTION" ) { $retorno = preg_split("'\s*RETURN\s+'",$matches[3]); if ( count($retorno) > 1 ) { $this->pacotes[$esquema_pacote]->funcoes[$nome]->retorno=$retorno[1]; $matches[3] = $retorno[0]; } else { $retorno2 = preg_split("'\s+'",$retorno[0]); $this->pacotes[$esquema_pacote]->funcoes[$nome]->retorno=$retorno2[1]; } } if ( ( $matches[1]=="FUNCTION" or $matches[1]=="PROCEDURE" ) and preg_match("'[(]'",$matches[3]) ) { $matches[3] = trim(preg_replace ("'(^[^(]*\(|\).*$)'","",$matches[3])); $campos = preg_split("'\s*,\s*'",$matches[3]); $i = 0; foreach ($campos as $k=>$v) { $v=preg_replace("'\s*%TYPE'","%TYPE",$v); // resolver problema dos espaços antes %TYPE $c=preg_split("'\s+'",$v); $l=count($c)-1; $tipo=trim($c[$l]); // remover CR/LF $tam=null; if ( isset($this->pacotes[$esquema_pacote]->tipos[$tipo]) ) { $c[$l] = $this->pacotes[$esquema_pacote]->tipos[$tipo]->nome; if ( isset($this->pacotes[$esquema_pacote]->tipos[$tipo]->tamanho) ) $tam = $this->pacotes[$esquema_pacote]->tipos[$tipo]->tamanho; } else if ( preg_match("'%TYPE'",$tipo) ) { $cols = preg_replace("'%TYPE'","",$tipo); $col=explode(".",$cols); $n=count($col); $sql = "begin $esquema.tipo_dados(:data_type,:data_length,:tabela,:coluna,null); end;"; $bvars=array("TABELA"=>strtoupper($col[$n-2]) ,"COLUNA"=>strtoupper($col[$n-1]) ,"DATA_TYPE"=>"" ,"DATA_LENGTH"=>"" ); if ( $n == 3 ) { $sql = preg_replace("'null'",":esquema",$sql); $bvars["ESQUEMA"] = $col[0]; } $mens=$this->executar($sql,$bvars); if ( $mens ) { return 'TIPO_DADOS - Tabela: '.strtoupper($col[$n-2]).' Coluna: '.strtoupper($col[$n-1]).' - '.$mens; } $c[$l] = $bvars["DATA_TYPE"]; $tam = $bvars["DATA_LENGTH"]; $this->pacotes[$esquema_pacote]->tipos[$tipo]->nome = $c[$l]; $this->pacotes[$esquema_pacote]->tipos[$tipo]->tamanho = $tam; } $this->pacotes[$esquema_pacote]->funcoes[$nome]->parametros[$i]->nome = $c[0]; if ($l > 1 ) { $this->pacotes[$esquema_pacote]->funcoes[$nome]->parametros[$i]->sentido = $c[1]; } else { $this->pacotes[$esquema_pacote]->funcoes[$nome]->parametros[$i]->sentido = "IN"; } if ($l == 3 ) { $this->pacotes[$esquema_pacote]->funcoes[$nome]->parametros[$i]->sentido.= " ".$c[2]; } $this->pacotes[$esquema_pacote]->funcoes[$nome]->parametros[$i]->tipo = $c[$l]; $this->pacotes[$esquema_pacote]->funcoes[$nome]->parametros[$i]->tipo_orig = $tipo; $this->pacotes[$esquema_pacote]->funcoes[$nome]->parametros[$i++]->tamanho = $tam; unset($tam); } } } } if ( defined('DEBUG') ) { $fim = $this->_microtime(); $fp = fopen($this->pasta_base."logs/timing".date("Ymd").".log","a"); $log = date('Y-m-d H:i:s',$start).' - '.($fim-$start).' - '.$esquema_pacote.' - parse_package - '.(isset($_SESSION['num_pessoa'])?$_SESSION['num_pessoa']:null)."\n"; if ( DEBUG == 2 and ($fim-$start) > 3 ) { fwrite($fp,$log); } else if ( DEBUG == 1 ) { fwrite($fp,$log); } fclose($fp); } if ( isset($this->pacotes[$esquema_pacote]) and is_object($this->pacotes[$esquema_pacote]) ) { if ( ( is_writable($this->pasta_base."cache") and filetype($this->pasta_base."cache")=="dir" ) and ( is_writable($this->pasta_base."cache/".strtoupper($esquema_pacote)) or !file_exists($this->pasta_base."cache/".strtoupper($esquema_pacote))) ) { $fp = fopen($this->pasta_base."cache/".strtoupper($esquema_pacote), "w"); fwrite($fp,serialize($this->pacotes[$esquema_pacote]) ); fclose($fp); } else { $_SESSION['pacotes'][$esquema_pacote]=$this->pacotes[$esquema_pacote]; } return null; } else { return "Pacote $esquema_pacote não encontrado"; } } } public function ativarJsonSaida() { $this->json_saida = true; } public function desativarJsonSaida() { $this->json_saida = false; } public function executar_pacote_func_proc($esquema_pacote_funcao,&$dados,$tempo_cache=-1,$porlinha=false) { $registro = $this->_ler_cache_resultado($esquema_pacote_funcao,$dados,$tempo_cache); if ( is_array($registro) ) { $dados = $registro; return null; } else { if ( !$this->link ) { $this->_logon(); } $bvars_entrada = $dados; $epf=explode(".",strtoupper($esquema_pacote_funcao)); $esquema_pacote = $epf[0].".".$epf[1]; if ( $erro = $this->_parse_package($esquema_pacote) ) { $mens[] = $erro; return $mens; } $funcao = $epf[2]; if ( !is_object($this->pacotes[$esquema_pacote]->funcoes[$funcao]) ) { $mens[] = "Procedure/Função $funcao não encontrado no pacote $esquema_pacote"; @unlink($this->pasta_base."cache/".strtoupper($esquema_pacote)); unset($_SESSION['pacotes'][$esquema_pacote]); return $mens; } $parametros = $this->pacotes[$esquema_pacote]->funcoes[$funcao]->parametros; $this->sql = "BEGIN \n "; if ( isset($this->pacotes[$esquema_pacote]->funcoes[$funcao]->retorno) ) { $this->sql.= ":RETORNO := "; } $this->sql.= "$esquema_pacote_funcao"; if ( is_array($parametros) ) { $this->sql.= "("; foreach ($parametros as $k=>$v ) { if (!preg_match("'\($'",$this->sql)) { $this->sql.=","; } $nome = preg_replace("'^P_'","",$v->nome); $this->sql.=":$nome"; } $this->sql.= ")"; } $this->sql.=";\nEND;"; if ( is_resource($this->resultado) ) { oci_free_statement($this->resultado); } $this->resultado = oci_parse($this->link, $this->sql); $this->ultimo_sql = $this->sql; unset($this->bindvars); // detectar se os nomes do dados estão em caixa baixa ou caixa alta $dado_chave_case=null; if ( is_array($dados) ) { list($k,$v) = each($dados); if ( strtoupper($k) == $k ) { $dado_chave_case='U'; } else if ( strtolower($k) == $k ) { $dado_chave_case='L'; } else { $dado_chave_case=null; } } if ( isset($this->pacotes[$esquema_pacote]->funcoes[$funcao]->retorno) ) { $this->_bind("RETORNO",$this->pacotes[$esquema_pacote]->funcoes[$funcao]->retorno,32*1024); } if ( is_array($parametros) ) { foreach ($parametros as $k=>$v ) { $nome = preg_replace("'^P_'","",$v->nome); if ( $dado_chave_case == 'U' ) { $nome = strtoupper($nome); } else if ( $dado_chave_case == 'L' ) { $nome = strtolower($nome); } if ( isset($dados[$nome]) and preg_match("'IN'",$v->sentido) ) { $this->bindvars[$nome] = $dados[$nome]; if ( !$v->tamanho ) $v->tamanho=-1; } else if ( preg_match("'SEQ_SESSAO'i",$nome) > 0 and preg_match("'IN'",$v->sentido) > 0 ) { $this->bindvars[$nome] = $_SESSION['SEQ_SESSAO']; $v->tamanho=-1; } else { unset($this->bindvars[$nome]); $this->bindvars[$nome] = null; } $this->_bind($nome ,$v->tipo ,$v->tamanho,$v->tipo_orig,$epf[0]); if ( $v->tipo=="CLOB" or $v->tipo=="BLOB" and preg_match("'IN'",$v->sentido) and $dados[$nome] ) { if ( !$this->bindvars[$nome]->writeTemporary($dados[$nome]) ) { $this->rollback(); $this->bindvars["RETORNO"].=($this->bindvars["RETORNO"]?";":"")."Impossível gravar LOB temporario $nome"; } } if ( $v->tipo == "VARRAY" and isset($dados[$nome]) and is_array($dados[$nome]) and preg_match("'IN'",$v->sentido) ) { /* TODO: Adicionar alerta se a quantidade de registros ultrapassar o valor declarado no VARRAY */ $tam = sizeof($dados[$nome]); $tammax = $this->pacotes[$esquema_pacote]->tipos[$v->tipo_orig]->array_tam; $array_tipo_dado = $this->pacotes[$esquema_pacote]->tipos[$v->tipo_orig]->array_tip_dado; unset($tamregmax); if ( preg_match("'CHAR'",$array_tip_dado) ) { $tamregmax = $this->pacotes[$esquema_pacote]->tipos[$v->tipo_orig]->array_tip_dado_tam; } if ( $tam > $tammax ) { $mens[]="Campo $nome contém $tam registros. Permitido $tammax registros ou ajustar TYPE ".$epf[0].".$v->tipo_orig!"; } else { foreach($dados[$nome] as $v1) { if ( isset($tamregmax) && strlen($v1)>$tamregmax ) { $mens[] = "Campo $nome contém registro \"$v1\" com mais de $tamregmax carateres. Ajustar TYPE ".$epf[0].".$v->tipo_orig"; } else { if ( $array_tipo_dado == "NUMBER" ) { $v1 = $this->_ajustar_separador_decimal($v1,'.,'); } } $this->bindvars[$nome]->append($v1); } } $dados[$nome]=null; } } } if ( isset($mens) and is_array($mens) ) return $mens; if ( defined('DEBUG') ) $start = $this->_microtime(); if ( ! $res=oci_execute($this->resultado,OCI_DEFAULT)) { $erro = oci_error($this->resultado); oci_rollback($this->link); @unlink($this->pasta_base."cache/".strtoupper($esquema_pacote)); unset($_SESSION['pacotes'][$esquema_pacote]); foreach ($this->bindvars as $k=>$v) { if ( preg_match('/SENHA/',$k)>0 and strlen($v) > 0 ) { $erro_bind.= ($erro_bind?",":"").":".$k."="."<não disponível> "; } elseif ( is_object($v) ) { $erro_bind.= ($erro_bind?",":"").":".$k."=".preg_replace('/\n/','',print_r($dados[$k],true))." "; } else { $erro_bind.= ($erro_bind?",":"").":".$k."=".($v?$v:"<sem valor>")." "; } } $mens[] = "[$this->sql]
[ $erro_bind ]
".$erro['code']." - ".$erro['message']; $fp = fopen($this->pasta_base."logs/error".date("Ymd").".log","a"); $log = date('Y-m-d H:i:s',$start).' '.$esquema_pacote_funcao.' '.$_SESSION['num_pessoa']." [$this->sql] [$erro_bind] ".$erro['code']."-".$erro['message']."\n"; $log = preg_replace('/\n/',' ',$log)."\n"; fwrite($fp,$log); fclose($fp); } if ( isset($mens) and is_array($mens) ) { return $mens; } if ( defined('DEBUG') ) { $fim = $this->_microtime(); $fp = fopen($this->pasta_base."logs/timing".date("Ymd").".log","a"); $log = date('Y-m-d H:i:s',$start).' - '.($fim-$start).' - '.$esquema_pacote_funcao.' - '.(isset($_SESSION['num_pessoa'])?$_SESSION['num_pessoa']:null)."\n"; if ( DEBUG == 2 and ($fim-$start) > 3 ) { fwrite($fp,$log); } else if ( DEBUG == 1 ) { fwrite($fp,$log); } fclose($fp); } if ( is_array($parametros) ) { foreach ($parametros as $k=>$v ) { $nome = preg_replace("'^P_'","",$v->nome); if ( $dado_chave_case == 'U' ) { $nome = strtoupper($nome); } else if ( $dado_chave_case == 'L' ) { $nome = strtolower($nome); } if ( ($v->tipo=="CLOB" or $v->tipo=="BLOB") and is_object($this->bindvars[$nome]) and preg_match("'OUT'",$v->sentido) ) { if ( $dados[$nome] ) { @$this->bindvars[$nome]->save($dados[$nome]); } else { @$dados[$nome]=$this->bindvars[$nome]->load(); } } else if ( $v->tipo=="REF CURSOR" ) { if ( defined('DEBUG') ) { $start = $this->_microtime(); } if ($res=@oci_execute($this->bindvars[$nome],OCI_DEFAULT)) { if ( $porlinha ) { $flgs=OCI_FETCHSTATEMENT_BY_ROW; } else { $flgs=OCI_FETCHSTATEMENT_BY_COLUMN; } oci_fetch_all($this->bindvars[$nome],$dados[$nome],0,-1,$flgs); oci_free_statement($this->bindvars[$nome]); if ( $this->json_saida and is_array($dados[$nome]) ) { foreach ( $dados[$nome] as $k0=>$v ) { foreach ( $v as $k1=>$dado ) { if ( is_string($dados[$nome][$k0][$k1]) ) { $dados[$nome][$k0][$k1] = utf8_encode($dados[$nome][$k0][$k1]); } } } $dados[$nome] = json_encode($dados[$nome]); } } if ( defined('DEBUG') ) { $fim = $this->_microtime(); $fp = fopen($this->pasta_base."logs/timing".date("Ymd").".log","a"); $log = date('Y-m-d H:i:s',$start).' - '.($fim-$start).' - '.$esquema_pacote_funcao.' cursor:'.$nome.' - '.(isset($_SESSION['num_pessoa'])?$_SESSION['num_pessoa']:null)."\n"; if ( DEBUG == 2 and ($fim-$start) > 3 ) { fwrite($fp,$log); } else if ( DEBUG == 1 ) { fwrite($fp,$log); } fclose($fp); } } else if ( $v->tipo=="VARRAY" ) { $array_tipo_dado = $this->pacotes[$esquema_pacote]->tipos[$v->tipo_orig]->array_tip_dado; for ( $i=0; $i<$this->bindvars[$nome]->size();$i++) { if ( $array_tipo_dado == "NUMBER" ) { $dados[$nome][]=$this->_ajustar_separador_decimal($this->bindvars[$nome]->getelem($i)); } else { $dados[$nome][]=$this->bindvars[$nome]->getelem($i); } } $this->bindvars[$nome]->free(); } else { $dados[$nome] = $this->bindvars[$nome]; } if ( $this->json_saida and is_array($dados[$nome]) ) { foreach ( $dados[$nome] as $k0=>$v ) { if ( is_string($dados[$nome][$k0]) ) { $dados[$nome][$k0] = utf8_encode($dados[$nome][$k0]); } } $dados[$nome] = json_encode($dados[$nome]); } } } $mens=null; if ( is_resource($this->resultado) ) { oci_free_statement($this->resultado); } if ( isset($this->bindvars["RETORNO"]) ) { $mens = explode(";",$this->bindvars["RETORNO"]); } if ( !isset($mens) or !is_array($mens) ) { $this->_gravar_cache_resultado($esquema_pacote_funcao,$bvars_entrada,$dados,$tempo_cache); } return $mens; } } public function executar_pkg_funcao($esquema_pacote_funcao,&$dados) { /* * Este método foi implementado para permitir que esta classe funciona * com aplicativos existentes. * Para novos aplicativos use a função executar_pacote_func_proc */ return $this->executar_pacote_func_proc($esquema_pacote_funcao,$dados); } public function executar_recuperar_pkg_funcao($esquema_pacote_funcao,&$dados,&$registro) { /* * Este método foi implementado para permitir que esta classe funciona * com aplicativos existentes. * Para novos aplicativos use a função executar_pacote_func_proc */ $mens = $this->executar_pkg_funcao($esquema_pacote_funcao,$dados); $epf = explode(".",strtoupper($esquema_pacote_funcao)); $esquema_pacote = $epf[0].".".$epf[1]; $funcao = $epf[2]; $parametros = $this->pacotes[$esquema_pacote]->funcoes[$funcao]->parametros; $registro=null; if ( is_array($parametros) ) { foreach ($parametros as $k=>$v ) { $nome = preg_replace("'^P_'","",$v->nome); if ($v->tipo=="REF CURSOR" and is_array($dados[$nome]) ) { list(,$v) = each($dados[$nome]); if ( count($v) > 0 ) { $registro=$dados[$nome]; } unset($dados[$nome]); break; } } } // echo "esquema_pacote_funcao: $esquema_pacote_funcao
"; // echo "
"; print_r($registro); echo "
"; return $mens; } public function commit() { if ( $this->link ) { oci_commit($this->link); } } public function rollback() { if ( $this->link ) { oci_rollback($this->link); } } public function encerrar() { if ( is_resource($this->resultado) ) { oci_free_statement($this->resultado); } if ( is_resource($this->link) ) { oci_close($this->link); } } public function encerrar_sessao() { $this->encerrar(); if ( TIPO_ACESSO == 'E' ) { @unlink($this->pasta_base."cache/SESSOES/".APLICATIVO."-" .$_SESSION['num_pessoa']."-".$_SERVER["REMOTE_ADDR"]); } if ( TIPO_ACESSO == 'I' ) { $this->_GetLogin($login_nome,$login_senha); @unlink($this->pasta_base."cache/SESSOES/".APLICATIVO."-" .$login_nome."-".$_SERVER["REMOTE_ADDR"]); } session_destroy(); } private function _encontrarArquivo($arquivo,&$i) { for( $i=0;$i<10;$i++) { $path = str_repeat('../',$i); if( file_exists($path.$arquivo ) ) { return $path.$arquivo; break; } } } /* generate a random string (length $len) */ private function _randomstr( $len ) { $c = ""; for( $i = 0; $i < $len; $i++ ) { $c .= chr( rand( 0, 255 ) ); } return $c; } /* A random key */ private function _randomkey( $len ) { srand( ( double )microtime() * 1000000 ); return $this->_randomstr( $len ); } /* Retrieve login informations */ private function _GetLogin(&$username,&$password) { if( isset($_SESSION['serverauth']) and strlen($_SESSION['serverauth']) > 0 and isset($_COOKIE['cookieauth']) and strlen($_COOKIE['cookieauth']) > 0 ) { $key=base64_decode(stripslashes($_COOKIE['cookieauth'])); if( strlen( $key ) > 0 ) { $edata=stripslashes($_SESSION['serverauth']); $data=criptografia::rc4($key,$edata,"de"); if( strlen( $data ) > 0 ) { $chr1pos = strpos( $data, chr( 1 ) ); if( $chr1pos > 0 ) { $username = substr( $data, 0, $chr1pos ); $password = substr( $data, $chr1pos + 1 ); } } } return 1; } else return 0; } /* Store login informations */ private function _StoreLogin($username,$password) { /* Generate a mask and store the result */ $data = $username . chr(1) . $password; $key = $this->_randomkey(32); /* Store encrypted username and password */ $_SESSION['serverauth'] = criptografia::rc4($key,$data,"en"); /* Store the mask */ SetCookie( "cookieauth",base64_encode($key),0,"/"); $_COOKIE['cookieauth']=base64_encode($key); return 1; } // Limpar cache public function limparCache($pacoteFuncao=null,$params_entrada=null) { if ( $pacoteFuncao!=null) { if ( ereg(' ',$pacoteFuncao ) ) { $pacoteFuncao = md5($pacoteFuncao); } else { $pacoteFuncao=strtoupper($pacoteFuncao); } if ( $pacoteFuncao and is_array($params_entrada) ) { $arquivo = md5(serialize($params_entrada)).".cache"; @unlink($this->pasta_base."cache/".$pacoteFuncao."/".$arquivo); unset($_SESSION['dados'][$pacoteFuncao][$arquivo]); return; } if ( ereg('\*$',$pacoteFuncao) ) { $regex = '^'.ereg_replace('\*','',$pacoteFuncao); if ( is_array($_SESSION['dados']) ) { foreach($_SESSION['dados'] as $k=>$v) { if ( ereg($regex,$k) ) { unset($_SESSION['dados'][$k]); } } } if ( is_array($_SESSION['pacotes']) ) { foreach($_SESSION['pacotes'] as $k=>$v) { if ( ereg($regex,$k) ) { unset($_SESSION['pacotes'][$k]); } } } $globarg = $this->pasta_base."cache/".$pacoteFuncao; } else { unset($_SESSION['dados'][$pacoteFuncao]); unset($_SESSION['pacotes'][$pacoteFuncao]); $globarg = $this->pasta_base."cache/".$pacoteFuncao."/*"; } } else { unset($_SESSION['dados']); unset($_SESSION['pacotes']); $globarg = $this->pasta_base."cache/*"; } if ($objs = glob($globarg)) { foreach($objs as $obj) { if ( is_dir($obj) and preg_match("'/CVS$'",$obj) === 0 ) { if($objs1 = glob($obj."/*")) { foreach($objs1 as $obj1) { @unlink($obj1); } } rmdir($obj); } else if ( $obj) { @unlink($obj); } } } } } class criptografia { public static function rc4($pwd, $data, $case) { if ($case == 'de') { $data = urldecode($data); } $key[] = ""; $box[] = ""; $temp_swap = ""; $pwd_length = 0; $pwd_length = strlen($pwd); for ($i = 0; $i <= 255; $i++) { $key[$i] = ord(substr($pwd, ($i % $pwd_length), 1)); $box[$i] = $i; } $x = 0; for ($i = 0; $i <= 255; $i++) { $x = ($x + $box[$i] + $key[$i]) % 256; $temp_swap = $box[$i]; $box[$i] = $box[$x]; $box[$x] = $temp_swap; } $temp = ""; $k = ""; $cipherby = ""; $cipher = ""; $a = 0; $j = 0; for ($i = 0; $i < strlen($data); $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $temp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $temp; $k = $box[(($box[$a] + $box[$j]) % 256)]; $cipherby = ord(substr($data, $i, 1)) ^ $k; $cipher .= chr($cipherby); } if ($case == 'de') { $cipher = urldecode(urlencode($cipher)); } else { $cipher = urlencode($cipher); } return $cipher; } public static function hash_senha($senha) { return "{MD5}".base64_encode(pack("H*",md5($senha))); } } ?> limparCache(); $_POST["modulo"]=null; } /** * Recupera um pacote do Banco, deve ser usado caso tenha um pacote com uma função que retorne um cursor * * @param string $pacote Nome do pacote ESQUEMA.PK_PACOTE.FUNCAO * @param array $bvars Parâmetro de entrada * @param array $res Parâmetro de saída * @param integer $tempo_cache Tempo de vida do pacote em segundos * @return unknown */ Function recuperarPacote($pacote,&$bvars,&$res,$tempo_cache=-1){ if(is_array($bvars) ) $bvars=array_change_key_case($bvars, CASE_UPPER); $mens = $GLOBALS['conexao']->executar_pacote_func_proc($pacote,$bvars,$tempo_cache); if($bvars['CURSOR']) { $res = $bvars['CURSOR']; if (count($res[key($res)])==0 ) { $res=null; } } return $mens; } Function executarPacote($pacote,&$bvars,$tempo_cache=-1){ if(is_array($bvars) ) $bvars=array_change_key_case($bvars, CASE_UPPER); $mens=$GLOBALS['conexao']->executar_pacote_func_proc($pacote,$bvars,$tempo_cache); if ( !$mens ) $GLOBALS['conexao']->commit(); else $GLOBALS['conexao']->rollback(); return $mens; } function encontrarArquivo($arquivo) { for( $i=0;$i<10;$i++) { $path = str_repeat('../',$i); if( file_exists($path.$arquivo ) ) { return $path.$arquivo; break; } } return null; } function encontrarArquivoNivel($arquivo,&$i) { for( $i=0;$i<10;$i++) { $path = str_repeat('../',$i); if( file_exists($path.$arquivo ) ) { return $path.$arquivo; break; } } return null; } ?>