Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
O que preciso, é que após a geração do CSV, ele faça o download do arquivo automaticamente.
Já tentei de tudo, porém nada foi possível
Segue o código:
<?php
$acao = $_POST["acao"];
if($acao === "baixar"){
$diretorio = "csv/";
$nome = date("Y-m-d-H-i-s");
$nome = 'download-'.$nome.'.csv';
$arquivo = $diretorio . $nome;
$dados = '';
$query = mysql_query("SELECT * FROM intranet_newsletter ORDER BY nome, email ASC")or die('Falha na instrução SQL: ' . mysql_error());
while($ln=mysql_fetch_assoc($query)){
$dados .= "'".$ln['nome']."'";
$dados .= ",'".$ln['email']."'";
$dados .= "\n";
}
if(fwrite($file=fopen($arquivo,'w+'),$dados)) {
fclose($file);
}
}
?>
Dessa forma ele está criando o arquivo e salvando na pasta "csv".
>
Segue a lógica
http://forum.imasters.com.br/topic/534883-gerar-csv-de-dados-vindo-do-db-com-cakephp/?p=2136448
Seria isso?
<?php
$acao = $_POST["acao"];
if($acao === "baixar"){
$diretorio = "csv/";
$nome = date("Y-m-d-H-i-s");
$nome = 'download-'.$nome.'.csv';
$arquivo = $diretorio . $nome;
$dados = '';
$query = mysql_query("SELECT * FROM intranet_newsletter ORDER BY nome, email ASC")or die('Falha na instrução SQL: ' . mysql_error());
while($ln=mysql_fetch_assoc($query)){
$dados .= "'".$ln['nome']."'";
$dados .= ",'".$ln['email']."'";
$dados .= "\n";
}
if(fwrite($file=fopen($arquivo,'w+'),$dados)) {
$output = sprintf('$arquivo', date('d-m-Y'));
$file = fopen('php://output', 'w+');
header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename="'. $output.'"');
fclose($file);
}
}
?>
Não consegui fazer baixar...
A algum tempo atrás, quando eu estava aprendendo PHP, fiz uma classe para efetuar download tanto de arquivos, quanto de textos gerados dinamicamente sem a necessidade de criar um arquivo para isso.
Acredito que ainda esteja funcionando nas versões mais recentes do PHP
<?php
/**
* Classe para o download de arquivos ou textos
* Created on 2013-07-20
* PHP version 5.3.0 and later
* @author Carlos Coelho <carloscoelho.info@gmail.com>
* @version 0.1
*/
class Download
{
/**
* O nome da função que
* mede o tamanho em bytes
* do conteúdo do download
* @var string
*/
private $length;
/**
* O nome da função que
* faz a impressão de tela
* @var string
*/
private $output;
/**
* O caminho do arquivo
* ou conteúdo para download
* @var string
*/
private $path;
/**
* Armazena o nome do
* download
* @var string
*/
private $filename;
/**
* Construtor da classe Download
* @param mixed $path Um arquivo ou conteúdo
* para download
* @param string $filename O nome que receberá o
* arquivo ou conteúdo na hora do download
* @access public
* @return void
*/
public function __construct( $path, $filename = null )
{
$this->path = $path;
$this->length = 'mb_strlen';
$this->output = 'printf';
$this->filename = ( string ) $filename;
$this->prepare( );
$this->headers( );
call_user_func( $this->output, $this->path );
flush( );
}
/**
* Prepara os dados
* para efetur o download
* @access private
* @return void
*/
private function prepare( )
{
if( is_file( $this->path ) )
{
if( empty( $this->filename ) )
{
$this->filename = basename( $this->path );
}
$this->length = 'filesize';
$this->output = 'readfile';
}
}
/**
* Define os headers para
* forçar o download
* @access private
* @retrun void
*/
private function headers( )
{
header( 'Content-Type: application/force-download' );
header( 'Content-type: application/octet-stream' );
header( sprintf( 'Content-Length: %u', call_user_func( $this->length, $this->path ) ) );
header( sprintf( 'Content-disposition: attachment; filename="%s"', $this->filename ) );
header( 'Pragma: no-cache' );
header( 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0' );
header( 'Expires: 0' );
}
}
?>// download de uma string
new Download( 'Hello World!', 'file.txt' );
// download de um arquivo
new Download( 'file.xml' );
Segue a lógica
http://forum.imasters.com.br/topic/534883-gerar-csv-de-dados-vindo-do-db-com-cakephp/?p=2136448