Digamos que eu tenho um banco de dados .... existe uma maneira de exportar o que tenho do banco de dados para um arquivo CSV (e arquivo de texto [se possível]) via PHP?
no servidor local que está trabalhando, mas em um distante-lo exibir uma nova página com conteúdo e nenhuma janela de download (sorry for my Inglês)
khaled_webdev
2
Pode haver várias razões para os erros, a maneira mais simples de encontrá-los é ver o arquivo apache error.log.
Alain Tiemblo
7
Você precisa fazer uma die();ligação logo depois echo array2csv();, irá editar minha resposta. Certifique-se de gerar seu csv antes de produzir algo em sua página.
Ou, você pode fazer o fputcsv () dentro de um loop assoc de busca padrão e cortá-lo diretamente dos resultados retornados.
DampeS8N
10
@ DampeS8N, +1 para o uso de "plop it down straight out" em uma frase.
AnchovyLegend
este é copiado sem atribuição do manual do PHP para fputcsv
Benk
14
Apenas para constar, a concatenação é muito mais rápida (quero dizer) do que fputcsvou mesmo implode; E o tamanho do arquivo é menor:
// The data from Eternal Oblivion is an object, always
$values =(array) fetchDataFromEternalOblivion($userId, $limit =1000);// ----- fputcsv (slow)// The code of @Alain Tiemblo is the best implementation
ob_start();
$csv = fopen("php://output",'w');
fputcsv($csv, array_keys(reset($values)));foreach($values as $row){
fputcsv($csv, $row);}
fclose($csv);return ob_get_clean();// ----- implode (slow, but file size is smaller)
$csv = implode(",", array_keys(reset($values))). PHP_EOL;foreach($values as $row){
$csv .='"'. implode('","', $row).'"'. PHP_EOL;}return $csv;// ----- concatenation (fast, file size is smaller)// We can use one implode for the headers =D
$csv = implode(",", array_keys(reset($values))). PHP_EOL;
$i =1;// This is less flexible, but we have more control over the formattingforeach($values as $row){
$csv .='"'. $row['id'].'",';
$csv .='"'. $row['name'].'",';
$csv .='"'. date('d-m-Y', strtotime($row['date'])).'",';
$csv .='"'.($row['pet_name']?:'-').'",';
$csv .= PHP_EOL;}return $csv;
Esta é a conclusão da otimização de vários relatórios, de dez a milhares de linhas. Os três exemplos funcionaram bem com menos de 1.000 linhas, mas falham quando os dados foram maiores.
Respostas:
Eu pessoalmente uso essa função para criar conteúdo CSV a partir de qualquer matriz.
Em seguida, você pode fazer seu usuário baixar esse arquivo usando algo como:
Exemplo de uso:
fonte
die();
ligação logo depoisecho array2csv();
, irá editar minha resposta. Certifique-se de gerar seu csv antes de produzir algo em sua página.Você pode exportar a data usando este comando.
Primeiro você deve carregar os dados do servidor mysql em uma matriz
fonte
Apenas para constar, a concatenação é muito mais rápida (quero dizer) do que
fputcsv
ou mesmoimplode
; E o tamanho do arquivo é menor:Esta é a conclusão da otimização de vários relatórios, de dez a milhares de linhas. Os três exemplos funcionaram bem com menos de 1.000 linhas, mas falham quando os dados foram maiores.
fonte
Eu recomendo o parsecsv-for-php para solucionar vários problemas com novas linhas e aspas aninhadas.
fonte
Funciona com mais de 100 linhas, se você especificar o tamanho do arquivo nos cabeçalhos, chame o método get () em sua própria classe
fonte
código pré-fabricado anexado aqui. você pode usá-lo apenas copiando e colando no seu código:
https://gist.github.com/umairidrees/8952054#file-php-save-db-table-as-csv
fonte
Assim como @ Dampes8N disse:
Espero que isto ajude.
fonte