2014-01-14 58 views
1

我使用這個類:導出CSV使用PHP和PostgreSQL

<?php 

class csv{ 
private $separador; 
private $cabecalho; 
private $dados; 
private $path; 
private $arquivo; 

public function csv($separador=null, $cabecalho=null, $dados="", $path="", $arquivo="csv"){ 
    #seta as propriedades 
    $this->separador = $separador; 
    $this->cabecalho = $cabecalho; 
    $this->dados = $dados; 
    $this->path = $path; 
    $this->arquivo = $arquivo; 
} 
public function salvar(){ 
    #gera string de cabeçalho 
    $colunas = ""; 
     foreach($this->cabecalho as $coluna){ 
      if ($colunas == ""){ 
      $colunas .= $coluna; 
      } else { 
      $colunas .= $this->separador.$coluna; 
      } 
     } 
    $saida[] = $colunas; 
    #gera string do corpo do arquivo 
    foreach ($this->dados as $linha){ 
     #pega as variaveis do array 
     $colunasDados = ""; 
     foreach($linha as $coluna){ 
      if ($colunasDados == ""){ 
      $colunasDados .= $coluna; 
      } else { 
      $colunasDados .= $this->separador.$coluna; 
      } 
     } 
     $saida[] = $colunasDados; 
} 

    #verifica se alguma linha foi inserida 
    if(count($saida)>1){ 
     #monta o corpo do CSV 
     $corpo = implode("\n", $saida); 
     #abre um arquivo para escrita, se o arquivo não existir ele tenta criar 
     $fp = fopen ($this->path.$this->arquivo.".csv", "w");// W = sobrescreve 
     if($fp <> NULL){ 
      #escreve no arquivo 
      fwrite($fp, $corpo); 
      #fecha o arquivo 
      fclose($fp); 
      #retorno do sistema 
      echo "<p>Pronto</p>"; 
         } 
      else { 
      echo "<p>Verifique se a pasta ou o arquivo tem permissão para escrita!</p>"; 
        } 
    } 
     else { 
     echo "<p>Sem linhas para importação!</p>"; 
      } 
    } 

導出CSV文件。

這是我的文件,它旋轉:

<?php 
#chama classe 
include("program.class.php"); 
$objeto = new csv(); 
#Executa os selects   
$tijuca = $objeto->selecionaTijuca(); 
#gera cabeçalho 
$cabecalho = array("mes","ano","titulobanco","matricula"); 
#cria instancia de objeto da classe 
$tijuca = new CSV (";", $cabecalho, $tijuca,"pasta/Nova/", "cotas"); 
$tijuca->salvar(); 

>

我有記憶這個問題:?

Fatal error: Allowed memory size of 524288000 bytes exhausted (tried to allocate 262144 bytes) in .../program.class.php on line 42 

,我已經看到了一些解決方案,誰擁有使用此命令編輯php內存的能力:

ini_set("memory_limit","500M"); 

但它沒有解決,並重載我的服務器。 任何人都知道如何導出一個csv文件而不會重載? 或者在我的程序中有什麼不對?

對不起,我的英語。

謝謝

+0

嘗試創建該文件,然後將數據逐行添加到它,我認爲致命錯誤正在顯示,因爲您持有數組$ saida的數據量。 –

+0

你能告訴我一個例子嗎? – Dayaners

回答

1

看一看PostgreSQL的copy命令。它可以直接輸出CSV。

+1

「COPY」命令通過語言數據庫綁定很難使用。在這種情況下,我建議使用PHP的支持,http://www.php.net/manual/en/function.pg-copy-to.php –

+0

pg_copy_to陷入廢用,但我嘗試使用,我有這個消息: pg_copy_to()[function.pg-copy-to]:複製命令失敗:錯誤:無法從視圖「table」複製提示:嘗試COPY(SELECT ...)TO變體。在 – Dayaners

+0

你不能在視圖上使用它,但你可以在子查詢上使用它,所以你會說「myview」(「SELECT * FROM myview)」。 – Tim