1
Good afternoon,
I created a code in PHP to read a . CSV containing Name, Email and IP. The goal is to consult the Geolocation API of http://ip-api.com/ and return me the state corresponding to the IP "ex:RJ", after this is inserted in the table of the corresponding state database.
Well everything works the API is consulted I have the return, write in the database and everything else, but at the end of the list import in the case the . CSV comes across the following message:
Here comes the code:
1 - this is index.php
<!DOCTYPE html>
<html lang="pt-br">
<head>
<!-- Meta tags Obrigatórias -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<title>Importar Csv</title>
</head>
<body>
<div class="container mt-3">
<h2>Upload CSV</h2>
<p>Arquivo CSV contendo Nome, Email e IP sem cabaçalho!</p>
<p>A importação pode demorar dependendo da quantidade de consultas de IP que devem ser realizadas, a API suporta 150 requisições a cada 60 segundos então pegue um café e aguarde, Quando a importação terminar uma mensagem será exibida!</p>
<form action="importar.php" method="post" enctype="multipart/form-data">
<p>Arquivo CSV:</p>
<div class="custom-file mb-3">
<input type="file" class="custom-file-input" id="exampleFormControlFile1" name="file">
<label class="custom-file-label" for="customFile">Escolher Arquivo</label>
</div>
<div class="mt-3">
<button type="submit" class="btn btn-primary">Enviar</button>
</div>
</form>
</div>
<!-- JavaScript (Opcional) -->
<!-- jQuery primeiro, depois Popper.js, depois Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
</body>
</html>
2 - here’s the import.php
<?php
//conexãO COM O BANCO DE DADOS
$conn = new mysqli("localhost","root","","csv");
//A função mysqli_set_charset () especifica o conjunto de caracteres padrão a ser usado ao enviar dados de e para o servidor de banco de dados.
mysqli_set_charset($conn, "utf8");
//A função date_default_timezone_set () define o fuso horário padrão usado por todas as funções de data / hora no script.
date_default_timezone_set('America/Sao_Paulo');
//Verificação se o arquivo é csv
$arquivo = $_FILES["file"]["tmp_name"];
$nome = $_FILES["file"]["name"];
//A função explode () divide uma string em uma matriz.
$ext = explode(".", $nome);
//A função end () move o ponteiro interno para e produz o último elemento na matriz.
$extensao = end($ext);
if($extensao != "csv"){
echo "Extensão inválida";
}else{
$objeto = fopen($arquivo, 'r');
$cont =0;
while(($dados = fgetcsv($objeto, 1000, ";"))!==FALSE)
{
//contador para saber quantas vezes foi executado o sistema
$cont = $cont + 1;
$nome = utf8_encode($dados[0]);
$email = utf8_encode($dados[1]);
$ip = utf8_encode($dados[2]);
// echo $ip;
// Inicializa uma nova sessão e retorna um identificador cURL para uso com as funções curl
$ch = curl_init();
// Define uma opção no manipulador de sessão cURL fornecido.
curl_setopt($ch, CURLOPT_URL, "http://ip-api.com/json/".$ip);
// TRUE para retornar a transferência como uma string do valor de retorno
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 7);
// Tempo maximo limite para solicitação
curl_setopt($ch, CURLOPT_TIMEOUT, 7);
// Pegue o URL e passe para o navegador
$content = trim(curl_exec($ch));
// Fechar o recurso cURL e liberar recursos do sistema
curl_close($ch);
$regiao = json_decode($content)->region;
//concatenação do valor para criar valor de variavel unico para a comparação
$state = "state-".strtolower($regiao)."-class";
$acre = 'state-ac-class';
$alagoas = 'state-al-class';
$amapa = 'state-ap-class';
$amazonas = 'state-am-class';
$bahia = 'state-ba-class';
$ceara = 'state-ce-class';
$distrito_federal = 'state-df-class';
$espirito_santo = 'state-es-class';
$goias = 'state-go-class';
$maranhao = 'state-ma-class';
$mato_grosso = 'state-mt-class';
$mato_grosso_do_sul = 'state-ms-class';
$minas_gerais = 'state-mg-class';
$para = 'state-pa-class';
$paraiba = 'state-pb-class';
$parana = 'state-pr-class';
$pernambuco = 'state-pe-class';
$piaui = 'state-pi-class';
$rio_de_janeiro = 'state-rj-class';
$rio_grande_do_norte = 'state-rn-class';
$rio_grande_do_sul = 'state-rs-class';
$rondonia = 'state-ro-class';
$roraima = 'state-rr-class';
$santa_catarina = 'state-sc-class';
$sao_paulo = 'state-sp-class';
$sergipe = 'state-se-class';
$tocantins = 'state-to-class';
if($state == $alagoas){
$result = $conn->query("INSERT INTO alagoas(nome, email) VALUES('$nome','$email')");
}
else if($state == $acre){
$result = $conn->query("INSERT INTO acre(nome, email) VALUES('$nome','$email')");
}
else if($state == $amapa){
$result = $conn->query("INSERT INTO amapa(nome, email) VALUES('$nome','$email')");
}
else if($state == $amazonas){
$result = $conn->query("INSERT INTO amazonas(nome, email) VALUES('$nome','$email')");
}
else if($state == $bahia){
$result = $conn->query("INSERT INTO bahia(nome, email) VALUES('$nome','$email')");
}
else if($state == $ceara){
$result = $conn->query("INSERT INTO ceara(nome, email) VALUES('$nome','$email')");
}
else if($state == $distrito_federal){
$result = $conn->query("INSERT INTO distrito_federal(nome, email) VALUES('$nome','$email')");
}
else if($state == $espirito_santo){
$result = $conn->query("INSERT INTO espirito_santo(nome, email) VALUES('$nome','$email')");
}
else if($state == $goias){
$result = $conn->query("INSERT INTO goias(nome, email) VALUES('$nome','$email')");
}
else if($state == $maranhao){
$result = $conn->query("INSERT INTO maranhao(nome, email) VALUES('$nome','$email')");
}
else if($state == $mato_grosso){
$result = $conn->query("INSERT INTO mato_grosso(nome, email) VALUES('$nome','$email')");
}
else if($state == $mato_grosso_do_sul){
$result = $conn->query("INSERT INTO mato_grosso_do_sul(nome, email) VALUES('$nome','$email')");
}
else if($state == $minas_gerais){
$result = $conn->query("INSERT INTO minas_gerais(nome, email) VALUES('$nome','$email')");
}
else if($state == $para){
$result = $conn->query("INSERT INTO para(nome, email) VALUES('$nome','$email')");
}
else if($state == $paraiba){
$result = $conn->query("INSERT INTO paraiba(nome, email) VALUES('$nome','$email')");
}
else if($state == $parana){
$result = $conn->query("INSERT INTO parana(nome, email) VALUES('$nome','$email')");
}
else if($state == $pernambuco){
$result = $conn->query("INSERT INTO pernambuco(nome, email) VALUES('$nome','$email')");
}
else if($state == $piaui){
$result = $conn->query("INSERT INTO piaui(nome, email) VALUES('$nome','$email')");
}
else if($state == $rio_de_janeiro){
$result = $conn->query("INSERT INTO rio_de_janeiro(nome, email) VALUES('$nome','$email')");
}
else if($state == $rio_grande_do_norte){
$result = $conn->query("INSERT INTO rio_grande_do_norte(nome, email) VALUES('$nome','$email')");
}
else if($state == $rio_grande_do_sul){
$result = $conn->query("INSERT INTO rio_grande_do_sul(nome, email) VALUES('$nome','$email')");
}
else if($state == $rondonia){
$result = $conn->query("INSERT INTO rondonia(nome, email) VALUES('$nome','$email')");
}
else if($state == $roraima){
$result = $conn->query("INSERT INTO roraima(nome, email) VALUES('$nome','$email')");
}
else if($state == $santa_catarina){
$result = $conn->query("INSERT INTO santa_catarina(nome, email) VALUES('$nome','$email')");
}
else if($state == $sao_paulo){
$result = $conn->query("INSERT INTO sao_paulo(nome, email) VALUES('$nome','$email')");
}
else if($state == $sergipe){
$result = $conn->query("INSERT INTO sergipe(nome, email) VALUES('$nome','$email')");
}
else if($state == $tocantins){
$result = $conn->query("INSERT INTO tocantins(nome, email) VALUES('$nome','$email')");
}else{
$result = $conn->query("INSERT INTO semip(nome, email) VALUES('$nome','$email')");
}
//Atrasa a execução do programa por um dado número de milionésimos de segundos pois a API só permite 150 consultas por minuto.
usleep(50000);
}
if($result)
{
echo "Dados filtrados e inseridos com sucesso em suas respectivas bases de dados!";
}else{
echo "Erro ao inserir os dados </br>";
}
//Ao fim da execução mostra a quantia de vezes que foi executado
echo "</br>FIM DA EXECUÇÃO DO PROGRAMA, FORAM FEITAS: *".$cont."* CONSULTAS A API!";
}
?>
PS: I’m testing everything Localhost
Does anyone know how to fix this?
line 66 is here but I’m not getting to fix
$regiao = json_decode($content)->region;
Your $content has the property of the Region in return, would it be good to see if it comes empty before putting somewhere? If isset, Try catch would be very useful there..
– Darlei Fernando Zillmer