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 = ",";
}
//var_dump($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);
$temp = explode($separador,$buffer);
if(count($temp) == $ncolunas)
$linhas[] = $temp;
}
}
fclose ($handle);
//decobre o tipo de coluna
$testar = 10;
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"; } //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"]; echo "
"; 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 "
"; //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(); } } foreach($linhasql as $linha){ try { $res = $dbh->query($linha); if($res == false){ echo "
Erro em: ".$linha; } } catch (PDOException $e) { echo 'Erro: ' . $e->getMessage(); } } echo "
Registros existentes no CSV: ". $nlinhas; $sql = "select * from ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]; $q = $dbh->query($sql,PDO::FETCH_ASSOC); $r = $q->fetchAll(); 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.
"; } ?>