Versio

CSV bestand via header

Overzicht Reageren

Jan Koehoorn

Jan Koehoorn

20/11/2007 10:50:00
Quote Anchor link
PHP-ers,

ik wil een CSV bestand aanbieden in een admindeel van een site die ik momenteel maak. Ik heb deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
    ini_set ('display_errors', 1);
    error_reporting (E_ALL);

    require '../../classes/class.core.php';
    require '../../classes/class.database.php';
    require 'authenticatie.php';
    
    $sql = "
        SELECT id, email, password, name, company, division, jobtitle, datumtijd
        FROM apn_registreren
        "
;
    if ($db->query ($sql)) {
        $csv = '';
        while ($row = $db->fetch ()) {
            $csv .= implode (';', $row);
            $csv .= "\r\n";
        }

        $fp = fopen ('accounts.csv', 'wb');
        fwrite ($fp, $csv, strlen ($csv));
        fclose ($fp);
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="accounts.csv"');
    }

?>

Het CSV bestand wordt keurig aangemaakt en opent ook in Excel als ik het via FTP download. Echter, als ik het via de browser rechtstreeks probeer te openen, geeft Excel de melding: "Kan het bestand niet lezen".

Iemand enig idee wat ik over het hoofd zie?
Edit:
Opgelost. Het moest zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
    ini_set ('display_errors', 1);
    error_reporting (E_ALL);

    require '../../classes/class.core.php';
    require '../../classes/class.database.php';
    require 'authenticatie.php';
    
    $sql = "
        SELECT id, email, password, name, company, division, jobtitle, datumtijd
        FROM apn_registreren
        "
;
    if ($db->query ($sql)) {
        $csv = '';
        while ($row = $db->fetch ()) {
            $csv .= implode (';', $row);
            $csv .= "\r\n";
        }

        $fp = fopen ('accounts.csv', 'wb');
        fwrite ($fp, $csv, strlen ($csv));
        fclose ($fp);
        header('Content-type: csv/txt');
        header('Content-Disposition: attachment; filename="accounts.csv"');
        readfile('accounts.csv');
    }

?>
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
PHP hulp

PHP hulp

24/05/2012 08:31:12
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
TJVB tvb

TJVB tvb

20/11/2007 11:03:00
Quote Anchor link
Ik zou denken dat er dan iets niet in orde is met je headers aangezien je die bij de directe aanroep wel mee stuurt maar die er niet bij opgeslagen worden.
Moet je de gegevens niet ook direct printen?
Dus na de header regels nog een echo $csv;?

toevoeging:
Reactie op je oplossing, is een echo/print van $csv niet sneller dan het weer uitlezen van het bestand?
Gewijzigd op 01/01/1970 01:00:00 door TJVB tvb
 



Overzicht Reageren

Get Adobe Flash player