heinkasner
heinkasner

Reputation: 425

CSV File Only Contains HTML Page Code

I am trying to generate a csv file from a PHP array and then to download the file right after it has been generated.

This is the function I am using:

    function generate_csv($array, $mode) 
    {
        // setting the content type of the downloadable file
        header('Content-Type: text/x-csv; charset=utf-8');

        // setting the header to offer the 'save as' dialog box
        header('Content-Disposition: attachment; filename="' . $mode . '.csv";');

        // disabling caching of the file
        header("Pragma: no-cache");

        // opening the "output" stream
        $f = fopen('php://output', 'w');

        // generate csv for repeat transactions report
        if($mode == 'repeat_transactions_csv')
        {
            // writing headers to the csv file
            fputcsv($f, array('Firstname', 'Surname', 'Email', 'Cellphone', 'Date Joined', 'First Trans.', 'Last Trans.', 'Orders'));

            // iterating through the array of data
            foreach ($array as $line) 
            {
                // formatting the date as on reports (10-Jan-14)
                $dateJoined = date('d-M-y', $line['timestamp']);
                $firstTrans = date('d-M-y', $line['first_transactions']);
                $lastTrans = date('d-M-y', $line['last_transactions']);

                // manipulating the csv values that needs to be written to the csv
                $csv_line = "{$line['firstname']},{$line['lastname']},{$line['email']},{$line['phone']},{$dateJoined},{$firstTrans},{$lastTrans},{$line['order_ids']}";

                // writing the contents of the array to the csv file
                fputcsv($f, explode(',', $csv_line));
            }
        }
        // closing the "output" stream
        fclose($f);
    }

After opening this file, I see html code underneath my actual values and looks as if the current page's html code is written to the CSV file.

Am I doing something wrong in the function?

Upvotes: 0

Views: 2496

Answers (2)

th3r3alpr0
th3r3alpr0

Reputation: 51

You are missing an exit(); at the end of the header call

see: Will PHP script be executed after header redirect?

Upvotes: 0

Marcin Licznerski
Marcin Licznerski

Reputation: 380

This function is fine as long as you pass an array to second parameter. Check if you have any output like echo or print before the header().

Upvotes: 1

Related Questions