sirine
sirine

Reputation: 527

Import/Export file from PHP

I think I wasn't clean in my explanation when I asked my question (the problem). I have a project PHP, I don't have a local environnement, I'm working on-line: I change my file via Netbeans and I deploy it without tested it locally. My server is of production.My Database (MySQL - phpMyadmin ) in the sever also. I import the data from my disk into the project. Then PHP exploit it via HighChart. The user can see these data per many choices (Date, city, Customer,..) and finally he can download this final result into file csv. Here the problem I can't download all the data, for example: in The Turnover display in the Chart 14Million but in the file csv it display a smaller number of turnover.

this following my code:

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();

I hope that this time my explanation is clean and you can help?

Upvotes: 0

Views: 7662

Answers (1)

Gaurav
Gaurav

Reputation: 721

Better to use like this without storing:

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;
    }        
}

Upvotes: 1

Related Questions