[php] create csv file on the fly

Pagina: 1
Acties:
  • 491 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een query die een x aantal records levert die als csv file opgeslagen moeten worden. Ik heb dit voorbeeld gevonden, maar ik krijg het niet werkend.
On the other side it may be better and easier to create a csv file on the
fly. Create a page, say csv-export.php, and link to it using a
href="csv-export.php/export.csv". This way the user's browser is tricked
that the link points to a CSV file, if it does not honor the content-type it
sends (see below).


In csv-export.php you do
<?php
Header ("Content-type: text/csv");


... [insert code here to generate csv data. Just echo() it.] ...
als ik de a href aanroep krijg ik de melding dat het bestand: csv-export.php/export.csv niet gevonden kan worden...
Hoe kan ik on the fly een cvs file genereren?
Ik heb nu alle output met een komma gescheiden in een textarea staan, maar daar kunnen ze hier niet zoveel mee :(

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 18-09 19:03
Deze truc ken ik niet, maar je moet dan sowieso een webserver hebben die zulke constructies ondersteund. De meeste webservers zullen cvs-export.php nu als directory zien.

Overigens ondersteunen de meeste browsers wel de aangepaste content-type, dus dat hoort geen problemen op te leveren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja hij kan het bestand nu idd niet vinden.
heb alles nu gescheiden met een newline char en dan kunnen ze het zelf copieren en plakken in een txt bestand.
niet super fraai maar puur functioneel

Acties:
  • 0 Henk 'm!

  • IcE_364
  • Registratie: Februari 2002
  • Laatst online: 20-09 12:07
Header ("Content-type: text/csv");
is genoeg voor de meeste browsers, daarna gewoon aanroepen als csv-export.php

Acties:
  • 0 Henk 'm!

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Ik doe altijd het volgende om het direct in Excel te laten openen. Als je 'text/csv' neemt als content type gaat ie het standaard opslaan denk ik.
PHP:
1
2
3
4
5
6
$str = "bla;bla;bla\n";

header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=verzin_een_leuke_naam.csv");

print($str);

[ Voor 23% gewijzigd door Burat op 11-11-2003 17:04 ]

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


Acties:
  • 0 Henk 'm!

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Burat schreef op 11 november 2003 @ 16:53:
Ik doe altijd het volgende:
PHP:
1
2
3
4
5
6
$str = "bla;bla;bla\n";

header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=verzin_een_leuke_naam.csv");

print($str);
alleen vervelend dat het soms niet kan werken wanneer regional settings niet correct zijn voor "list seperator" en staan als ; zoals hierboven in het voorbeeld...
Ik heb er een exexutable voor geschreven.. die dat dan aangeeft.. en altijd goede csv weg schrijft..

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

ja hij kan het bestand nu idd niet vinden.
Zoek eens in de documentatie van de gebruikte webserversoftware op hoe je dit soort dingen kunt doen. Voor apache staat er ook iets over in de FAQ.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • vlc
  • Registratie: Januari 2009
  • Niet online

vlc

ik weet dat reageren op een hele oude post vaak niet gewaardeerd word door de mods
maar via google kom je toch op deze pagina en zo te zien is er geen oplossing voor dit probleem
bij deze dus een stukje code
header("Content-Type: text/csv");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Content-Transfer-Encoding: binary\n");
header('Content-Disposition: attachment; filename="Export.csv"');
header("Content-length: " . strlen($Inhoud) . "\n");
echo $Inhoud;
Pagina: 1