Carregando o arquivo...

"; ob_flush(); flush(); sleep(1); $arqcsv = $_FILES['i3GEOuploadcsv']['tmp_name']; $nomePrefixo = str_replace(" ","_",removeAcentos($_FILES['i3GEOuploadcsv']['name'])); $nomePrefixo = $nomePrefixo."_".(nomeRandomico(4)); $Arquivo = $_FILES['i3GEOuploadcsv']['tmp_name']; $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo); if($status != 1){ echo "

Ocorreu um erro no envio do arquivo";exit; } if(!file_exists($dir_tmp."/".$nomePrefixo)){ echo "

Ocorreu algum problema no envio do arquivo ".$dir_tmp."/".$nomePrefixo;paraAguarde();exit; } $arqcsv = $dir_tmp."/".$nomePrefixo; //pega os parametros de conexao include("classe_metaestat.php"); $m = new Metaestat(); $conexao = $m->listaConexao($_POST["i3GEOuploadcsvcodigoconexao"],true); //pega a lista de colunas e identifica o separador utilizado $handle = fopen ($arqcsv, "r"); $cabecalho = fgets($handle); $buffer = str_replace('"','',$cabecalho); $buffer = str_replace("'",'',$buffer); $buffer = str_replace("\n",'',$buffer); $buffer = str_replace("\r",'',$buffer); $colunas = explode(";",$buffer); $separador = ";"; if(count($colunas) == 1){ $colunas = explode(",",$buffer); $separador = ","; } echo "

Separador de colunas identificado: ".$separador."

"; echo "

Total de colunas: ".count($colunas)."

"; fclose ($handle); //le o csv em um array $handle = fopen ($arqcsv, "r"); $linhas = array(); $ncolunas = count($colunas); while (!feof($handle)) { $buffer = fgets($handle); if($buffer != $cabecalho){ //$buffer = str_replace('"','',$buffer); $buffer = str_replace("'",'',$buffer); $buffer = str_replace("\n",'',$buffer); $buffer = str_replace("\r",'',$buffer); if($buffer != ""){ $temp = explode($separador,$buffer); if(count($temp) == $ncolunas){ $linhas[] = $temp; } else{ echo "

A linha abaixo apresentou um erro - número de colunas não bate com o cabeçalho

"; var_dump($temp); exit; } } } } fclose ($handle); //decobre o tipo de coluna $testar = 50; if(count($linhas) < $testar){ $testar = count($linhas); } $tipoColuna = array(); for ($j=0; $j<$ncolunas;$j++){ $tipo = "numeric"; for ($i=0; $i<$testar;$i++){ $s = $linhas[$i]; $v = $s[$j]; if(!empty($v) && !is_numeric($v)){ $tipo = "varchar"; } } $tipoColuna[$colunas[$j]] = $tipo; } echo "
Tipos das colunas:
";
			var_dump($tipoColuna);
			echo "
"; ob_flush(); flush(); sleep(1); try { $dbh = new PDO('pgsql:dbname='.$conexao["bancodedados"].';user='.$conexao["usuario"].';password='.$conexao["senha"].';host='.$conexao["host"].';port='.$conexao["porta"]); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } //encoding do banco de dados $sql = "SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname = '".$conexao["bancodedados"]."'"; $res = $dbh->query($sql,PDO::FETCH_ASSOC); $encodingdb = $res->fetchAll(); $encodingdb = $encodingdb[0]; $encodingdb = $encodingdb["pg_encoding_to_char"]; if($encodingdb == "UTF8"){ $encodingdb = "UTF-8"; } if($encodingdb == "LATIN1"){ $encodingdb = "ISO-8859-1"; } echo "

Codificação do banco: ".$encodingdb."

"; //gera o script para criar a tabela e verifica se ja existe $sql = "SELECT table_name FROM information_schema.tables where table_schema = '".$_POST["i3GEOuploadcsvesquema"]."' AND table_name = '".$_POST["tabelaDestinocsv"]."'"; $res = $dbh->query($sql,PDO::FETCH_ASSOC); if(count($res->fetchAll())>0){ $tabelaExiste = true; } else{ $tabelaExiste = false; } $sqltabela = array(); if($tabelaExiste == false && $_POST["tipoOperacao"] == "criar"){ $sql = "CREATE TABLE ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]."("; $temp = array(); foreach($colunas as $coluna){ $temp[] = strtolower($coluna)." ".$tipoColuna[$coluna]; } if($_POST["colunaxcsv"] != "" && $_POST["colunaycsv"] != ""){ $temp[] = "the_geom geometry"; $colunas[] = "the_geom"; } $sql .= implode(",",$temp).") WITH(OIDS=FALSE)"; $sqltabela[] = $sql; $sqltabela[] = "ALTER TABLE ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]." OWNER TO ".$conexao["usuario"]; if(!empty($_POST["comentarioCsv"])){ $enc = mb_detect_encoding($texto); $_POST["comentarioCsv"] = mb_convert_encoding($_POST["comentarioCsv"],$encodingdb,$enc); $sqltabela[] = "COMMENT ON TABLE ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]." IS '".addcslashes($_POST["comentarioCsv"])."'"; } echo "
Sql tabela:
";
				var_dump($sqltabela);
				echo "
"; ob_flush(); flush(); sleep(1); } if($tabelaExiste == true && $_POST["tipoOperacao"] == "criar"){ echo "A tabela existe. Não pode ser criada."; exit; } //se a tabela existe e e para remover os registros if($tabelaExiste == true && $_POST["tipoOperacao"] == "apagar"){ $sqltabela[] = "delete from ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]; } if($tabelaExiste == true && $_POST["tipoOperacao"] == "apagar" && $_POST["i3GEOuploadcsvesquema"] != "i3geo_metaestat"){ echo "Não é possível executar essa operação nesse esquema."; exit; } //gera o script para inserir os dados echo "
Preparando inclusão de dados"; ob_flush(); flush(); sleep(1); $linhasql = array(); $insert = "INSERT INTO ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]."(".strtolower(implode(",",$colunas)).")"; $nlinhas = count($linhas); $valorX = 0; $valorY = 0; $escapar = "',<,>,%,#,@,(,)"; for ($i=0; $i<$nlinhas;$i++){ $s = $linhas[$i]; $s = str_replace('"','',$s); $enc = mb_detect_encoding($s); if($enc != ""){ $s = mb_convert_encoding($s,$encodingdb,$enc); } $vs = array(); for ($j=0; $j<$ncolunas;$j++){ $escape = ""; if($tipoColuna[$coluna] == "varchar"){ $texto = $s[$j]; $enc = mb_detect_encoding($texto); $textosl = addcslashes($texto,$escapar); if($textosl != $texto){ $escape = "E"; } if($enc != "" && $enc != $encodingdb){ $textosl = "$escape'".mb_convert_encoding($textosl,$encodingdb,$enc)."'"; } else{ $textosl = "$escape'".$textosl."'"; } if($textosl == "''"){ $textosl = 'null'; } $vs[] = $textosl; } else{ $valor = $s[$j]; if($valor == "" || (empty($valor) && $valor != 0)){ $valor = 'nulo'; } $vs[] = $valor; } if(strtolower($colunas[$j]) == strtolower($_POST["colunaxcsv"])){ $valorX = $s[$j]; } if(strtolower($colunas[$j]) == strtolower($_POST["colunaycsv"])){ $valorY = $s[$j]; } } if($_POST["colunaxcsv"] != "" && $_POST["colunaycsv"] != ""){ $vs[] = "ST_PointFromText('POINT(". str_replace(",",".",$valorX)." ".str_replace(",",".",$valorY).")',4326)"; } $str = implode(",",$vs); $str = str_replace("nulo",'null',$str); $linhasql[] = $insert."VALUES(".$str.")"; } echo "
";
			//var_dump($linhasql);exit;

			echo "
Incluindo dados"; echo ""; ob_flush(); flush(); sleep(1); if($_POST["incluiserialcsv"] == "on"){ $linhasql[] = "alter table ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]." add gid serial CONSTRAINT ".$_POST["tabelaDestinocsv"]."_gid_pkey PRIMARY KEY"; echo "
alter table ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]." add gid serial CONSTRAINT ".$_POST["tabelaDestinocsv"]."_gid_pkey PRIMARY KEY"; } foreach($sqltabela as $linha){ try { $dbh->query($linha); } catch (PDOException $e) { echo 'Erro: ' . $e->getMessage(); } } $bdcon = pg_connect('dbname='.$conexao["bancodedados"].' user='.$conexao["usuario"].' password='.$conexao["senha"].' host='.$conexao["host"].' port='.$conexao["porta"]."options='-c client_encoding=LATIN1'"); foreach($linhasql as $linha){ try { $res = $dbh->query($linha); if($res == false){ $res = pg_query($bdcon,$linha); if($res == false){ $linha = remove_accents($linha); $res = $dbh->query($linha); if($res == false){ $res = pg_query($bdcon,$linha); if($res == false){ echo "

Erro em: ".$linha; } } else{ echo "

Linha com acentos removidos: ".$linha; } } } } catch (PDOException $e) { echo 'Erro: ' . $e->getMessage(); } } $sql = "select * from ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]; $q = $dbh->query($sql,PDO::FETCH_ASSOC); $r = $q->fetchAll(); if($nlinhas != count($r)){ echo ""; } echo "
Registros existentes no CSV: ". $nlinhas; echo "
Registros na tabela final: ". count($r); echo "
Feito!!!
Faça o reload da página"; } else{ echo "

Erro ao enviar o arquivo. Talvez o tamanho do arquivo seja maior do que o permitido.

"; } ?>