2017-04-05 99 views
0

当我问我的问题(问题)时,我认为我的解释并不干净。 我有一个项目PHP,我没有本地环境,我在线工作:我通过Netbeans更改我的文件,我部署它,但未在本地进行测试。我的服务器是production.My数据库(MySQL - phpMyadmin)的服务器也。 我将数据从我的磁盘导入到项目中。然后PHP通过HighChart开发它。用户可以根据多种选择(日期,城市,客户等)查看这些数据,最后他可以将最终结果下载到文件csv中。 这里的问题我不能下载所有的数据,例如:在Chart 14Million的Turnover显示中,但在文件csv中显示的营业额较少。从PHP导入/导出文件

这下面我的代码:

class Export{ 
    private $_dataIN=[]; 
    private $_author; 
    private $_filepath; 

    public function __construct(array $dataIN) { 
     $this->_dataIN = $dataIN; 
     $this->setFilepath(); 
     $this->prepareFile(); 
    } 
    public function setFilepath() { 
     $date = new \DateTime(); 
     $this->_filepath='../DATA/ExportFiles/ExportData'.$date->getTimestamp(); 
    } 
    public function prepareFile(){ 
     $file = fopen($this->_filepath, 'w'); 
     fputcsv($file, array('Piece', 'Client', 'Libelle Client', 'Facturation','OTP','Typcde','Cdecli','Cdesap','Article','Designation','Dev','Montant_fac_dev_ht','Montant_fac_eur','Avion','Nature','Repsite','Zone','LRU','Contract'),';');   
     foreach ($this->_dataIN as $key => $statement) { 
      fputcsv($file, array($statement->getId(), $statement->getCustomerId(), $statement->getCustomerName(), $statement->getDate(), $statement->getOTP(), $statement->getCdetype(), $statement->getCdecustomer(), $statement->getSAPcode(), $statement->getArticle(), $statement->getDesigniation(), $statement->getCurrency(), $statement->getAmount(), $statement->getAmountEur(), $statement->getAircraft(), $statement->getNature(), $statement->getRepsite(), $statement->getZone(), $statement->getLru(),$statement->getContract()),';'); 
     } 
    } 

    public function download() {   

     header('Content-Description: File Transfer'); 
     header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//octet-stream' 
     header('Content-Disposition: attachment; filename='.basename($this->_filepath).'.csv'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($this->_filepath) . 'Giga'); //Kilo 
     readfile($this->_filepath); 
     exit(); 

我希望这一次我的解释是干净的,你能帮忙吗?

回答

1

最好使用像这样不存储:

public function __construct($dataIN = array()) { 
    $this->_dataIN = $dataIN; 
    $this->prepareFile(); 
} 

public function prepareFile(){ 

    $header[] = array('Piece', 'Client', 'Libelle Client', 'Facturation','OTP','Typcde','Cdecli','Cdesap','Article','Designation','Dev','Montant_fac_dev_ht','Montant_fac_eur','Avion','Nature','Repsite','Zone','LRU','Contract');   

    $data = array(); 

    foreach ($this->_dataIN as $key => $statement) { 
     $data[] = array($statement->getId(), $statement->getCustomerId(), $statement->getCustomerName(), $statement->getDate(), $statement->getOTP(), $statement->getCdetype(), $statement->getCdecustomer(), $statement->getSAPcode(), $statement->getArticle(), $statement->getDesigniation(), $statement->getCurrency(), $statement->getAmount(), $statement->getAmountEur(), $statement->getAircraft(), $statement->getNature(), $statement->getRepsite(), $statement->getZone(), $statement->getLru(),$statement->getContract()); 
    } 

    $final_data = array_merge($header, $data); 

    $this->array_to_csv($final_data, 'report.csv'); 
} 


function array_to_csv($array, $download = "") 
{ 
    if ($download != "") 
    {  
     header('Content-Description: File Transfer'); 
     header("Content-type: application/vnd.ms-excel"); 
     header('Content-Disposition: attachement; filename="' . $download . '"'); 
     header('Content-Transfer-Encoding: binary'); 
    }   

    ob_start(); 
    $f = fopen('php://output', 'w') or show_error("Can't open php://output"); 
    $n = 0;   
    foreach ($array as $line) 
    { 
     $n++; 
     if (! fputcsv($f, $line)) 
     { 
      show_error("Can't write line $n: $line"); 
     } 
    } 
    fclose($f) or show_error("Can't close php://output"); 
    $str = ob_get_contents(); 
    ob_end_clean(); 

    if ($download == "") 
    { 
     return $str;  
    } 
    else 
    {  
     print "\xEF\xBB\xBF"; // UTF-8 BOM 
     print $str; 
    }   
} 
+0

谢谢。我会尝试。 – sirine

+0

它产生这样的错误:在Export.php中的UndefinedFunctionException第39行:试图从命名空间“Floose \ Export”调用函数“array_to_csv”。致命错误:在第39行调用未定义的函数Floose \ Export \ array_to_csv()在/home/outils/FLOOSE/FlooseDev/src/Export/Export.php中。 – sirine

+0

我在这里添加了它,但是在静态中:public function __construct(array $ dataIN){ $ this - > _ dataIN = $ dataIN; $ this-> setFilepath(); $ this-> prepareFile(); $ this-> array_to_csv($ array,$ download); } – sirine