Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Doug2531

Gerar Vários arquivos CSV e compactá-los em ZIP

Recommended Posts

Olá.

 

Primeiramente, sou novato em PHP, então peguem leve.

Já procurei muito na internet mas não achei uma maneira de fazer isso:

Eu estou gerando um total de 24 arquivos em CSV, onde os dados estão sendo buscados através de uma consulta no MySQL. Eu tinha criado um link para baixar arquivo por arquivo, mas me pediram para disponibilizar o download dos 24 de uma vez, porém não estou conseguindo fazer isso.

 

Há algum modo de fazer isso?

 

 

Fiz 24 arquivos como este, cada um gerando um arquivo CSV diferente:

<?php
 
//include('db.php');
session_start();
 
$servername = "127.0.0.1:3306";
$username = "root";
$password = "";
$dbname = "xxxxxxxxxxxx";
$dbname2 = "xxxxxxxxxxxxx";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$conn2 = new mysqli($servername, $username, $password, $dbname2);
if ($conn2->connect_error) {
    die("Connection failed: " . $conn2->connect_error);
}
 
$conn->query("SET NAMES 'utf8'");
$conn->query('SET character_set_connection=utf8');
$conn->query('SET character_set_client=utf8');
$conn->query('SET character_set_results=utf8');
 
$conn2->query("SET NAMES 'utf8'");
$conn2->query('SET character_set_connection=utf8');
$conn2->query('SET character_set_client=utf8');
$conn2->query('SET character_set_results=utf8');
 
//header to give the order to the browser
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename=Agencias.csv');
 
//select table to export the data
//$select_table=mysql_query('select * from export_table');
//$rows = mysql_fetch_assoc($select_table);
$queryAgencias = "SELECT DISTINCT a.Agencia_Banco, a.Agencia_Numero, a.Agencia_Tipo, a.Agencia_nome, a.Sr_Banco, a.Sr_Numero, a.Agencia_CEP, a.Agencia_UF, a.Agencia_Encerrada,
    a.Agencia_Bairro, a.Agencia_Localidade, a.Agencia_Data_Abertura, a.Agencia_Data_Encerramento, a.idOficio
    FROM agencia a INNER JOIN processo on a.Agencia_Numero = processo.Conta_Agencia WHERE a.idOficio = " . $_SESSION['id_res'] . "
    ORDER BY a.Agencia_Banco, a.Agencia_Numero, a.Agencia_Tipo, a.Agencia_nome, a.Sr_Banco, a.Sr_Numero;";
$select_table = $conn->query($queryAgencias);
$rows = $select_table->fetch_assoc();
 
if ($rows) {
    getcsv(array_keys($rows));
}
while ($rows) {
    getcsv($rows);
    $rows = $select_table->fetch_assoc();
}
 
// get total number of fields present in the database
function getcsv($no_of_field_names) {
    $separate = '';
 
 
// do the action for all field names as field name
    foreach ($no_of_field_names as $field_name) {
        if (preg_match('/\\r|\\n|;|"/', $field_name)) {
            $field_name = '' . str_replace('', $field_name) . '';
        }
        echo $separate . $field_name;
 
//sepearte with the comma
        $separate = ';';
    }
 
//make new row and line
    echo "\r\n";
}
 
?>

E aqui eu gero o link para baixar um por um:

<a href="GerarCSV/Agencias.php"> Agencias </a>
<br>
<a href="GerarCSV/Bloquetos.php"> Bloquetos </a>
<br>
<a href="GerarCSV/CadastroContestadas.php"> Cadastro Contestadas </a>
<br>
<a href="GerarCSV/CadastroCreditadas.php"> Cadastro Creditadas </a>
<br>
<a href="GerarCSV/CompraSaque.php"> Compra Saque </a>
<br>
<a href="GerarCSV/Consulta_ATM_SALA_X_AGENCIA.php"> Consulta ATM SALA X AGÊNCIA </a>
<br>
<a href="GerarCSV/Conta_IP.php"> Conta IP </a>
<br>
<a href="GerarCSV/ContaVitima_ContaDestino.php"> ContaVitima ContaDestino </a>
<br>
<a href="GerarCSV/Convenio_Loterico.php"> Convenio Loterico </a>
<br>
<a href="GerarCSV/Id_Maquina.php"> Id Maquina </a>
<br>
<a href="GerarCSV/PCOMP.php"> PCOMP </a>
<br>
<a href="GerarCSV/processo.php"> Processo </a>
<br>
<a href="GerarCSV/PTESTE.php"> PTESTE </a>
<br>
<a href="GerarCSV/PURA.php"> PURA </a>
<br>
<a href="GerarCSV/PUSO.php"> PUSO </a>
<br>
<a href="GerarCSV/qryCartoesTRN.php"> qryCartoesTRN </a>
<br>
<a href="GerarCSV/qryENDERECO_E_AGENCIAS_LOTERICOS.php"> qryENDEREÇO E AGENCIAS LOTERICOS </a>
<br>
<a href="GerarCSV/qryTerminais_24hs_Endereco.php"> qryTerminais 24hs Endereço </a>
<br>
<a href="GerarCSV/Recarga_Telefones.php"> Recarga Telefones </a>
<br>
<a href="GerarCSV/Residual_Pagamentos.php"> Residual Pagamentos </a>
<br>
<a href="GerarCSV/Residual_Telefone.php"> Residual Telefone </a>
<br>
<a href="GerarCSV/SR.php"> SR </a>
<br>
<a href="GerarCSV/Transferencias_Sem_Identificacao.php"> Transferencias Sem Identificacao </a>
<br>
<a href="GerarCSV/TRN.php"> TRN </a>

Tem como baixar os 24 de uma vez, em formato ZIP?

 

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Opa marsolim, blz?

 

Infelizmente não ajuda. Já olhei esse exemplo antes, porém não é exatamente o que eu preciso.

Todos os exemplos que eu achei na net são exemplos que pega o arquivo já criado e joga dentro do zip. No meu caso em específico, o arquivo em CSV só é gerado depois que eu clico no link e imediatamente a janela de download aparece. Eu procuro um modo de clicar em um único link, gerar os 24 arquivos, mandá-los para um arquivo zip e daí sim, mostrar a caixa de download.

 

Pegando um exemplo prático, temos o gmail e o hotmail. Quando recebemos algum email com vários anexos, temos a opção de fazer o donwload de um por um ou baixar todos de uma vez através de um arquivo zipado. Eu preciso fazer algo parecido com isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas nesses exemplos que citou os arquivos já estão prontos. mas para o seu caso tu só precisa alterar o que já tem colocando incluindo essas rotinas no seu código. se for o caso talvez ajude se mudar a rotina para ao invés de criar os arquivos e baixar, apenas criar e depois de todos criados zipa e baixa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só colocar os arquivos gerados em um array e empacotar, qual a dificuldade?

 

A lógica é a mesma para fotos e pastas

$arquivos = array(
	'caminho/arquivo1.csv',
	'caminho/arquivo2.csv',
	'caminho/arquivo3.csv'
);
 
// Compacta
createZip( 'nome_do_arquivo.zip', $arquivos );

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas nesses exemplos que citou os arquivos já estão prontos. mas para o seu caso tu só precisa alterar o que já tem colocando incluindo essas rotinas no seu código. se for o caso talvez ajude se mudar a rotina para ao invés de criar os arquivos e baixar, apenas criar e depois de todos criados zipa e baixa.

 

Percebi que esse é o meu problema. Sempre que eu crio o arquivo CSV automaticamente já coloco ele pra baixar, não sei um modo de criar e adicionar ele num array sem exibir a janela de download.

Isso é possível? Ou existe algum outro método mais prático que eu possa usar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, é possível.

 

É só não usar headers para forçar o download ou a abertura de um arquivo específico, como você tem feito.

//header to give the order to the browser
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename=Agencias.csv');

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.