Doug2531 0 Denunciar post Postado Abril 2, 2015 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
marsolim 110 Denunciar post Postado Abril 2, 2015 veja se ajuda http://php.net/manual/pt_BR/zip.examples.php Compartilhar este post Link para o post Compartilhar em outros sites
Doug2531 0 Denunciar post Postado Abril 4, 2015 veja se ajuda http://php.net/manual/pt_BR/zip.examples.php 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
marsolim 110 Denunciar post Postado Abril 5, 2015 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
Williams Duarte 431 Denunciar post Postado Abril 5, 2015 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
Doug2531 0 Denunciar post Postado Abril 6, 2015 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
Maykel-ctba 233 Denunciar post Postado Abril 6, 2015 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