Welke foutmelding krijg je dan?
of krijg je alle tekst gewoon (binair) te zien?
Link gekopieerd
Ik krijg geen foutmelding.
De code hierboven staat in een bestand genaamd 'index.php'.
Het normale IE opslaan-als scherm verschijnt, en de voorgestelde bestandsnaam is 'index.php'.
Het lijkt dus wanneer je naar de naam kijkt alsof index.php verstuurd word, maar wanneer je het bestand opslaat dan staat er gewoon de inhoud van de tekst file in.
Het doet het dus eigenlijk half. Ik verwacht eigenlijk dat de IE de inhoud van de tekstfile laat zien.
Update:
Wanneer je de regel met Content-Type blokt dan gaat het wel goed.
Misschien dat je geen content-type moet opgeven wanneer je de inhoud in de browser wilt laten zien?
Link gekopieerd
hmm
dit is wat ik gebruik voor een csv scriptje:
//show headers:
@header("Pragma: public"); // required
@header("Expires: 0");
@header("Content-disposition: attachment; filename=\"".$tabel."postbankdump.csv\"\r\n");
@header("Content-transfer-encoding: binary\n");
@header("Content-Type: application/csv-tab-delimited-table");
@header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
//ga database data ophalen:
$sql .= "SELECT\n";
$sql .= " *,\n";
$sql .= "FROM relaties AS r\n";
$query = mysql_query($sql) or die(nl2br($sql));
//ga de titel velden na uit de database
$numberfields = mysql_num_fields($query);
for ($i=0; $i<$numberfields ; $i++ ) {
$row_title .= mysql_field_name($query, $i) . ";";
}
//plaats deze in var csv
$csv = $row_title . "\n";
//ga de rest v/d database ophalen
while ($data = mysql_fetch_object($query)) {
$csv .= $data->relatienummer . ";" . $data->bedrijfsnaam . ";" . $data->adres . ";" . $data->postcode . ";" . $data->woonplaats . ";" . $data->aanhef . ";" . $data->tussenv . ";" . $data->voorletters . ";" . $data->voornaam . ";" . $data->achternaam . ";" . $data->mobielnr . ";" . $data->mailadres . "\n";
}
//output (dus uiteindelijk naar de download)
echo $csv;
Link gekopieerd
uncomment de volgende regel uit je script en het werkt.
//header('Content-Disposition: attachment; filename="'.basename($naam).'"');
Link gekopieerd
Hi Leroy,
in mijn orginele post geef ik al aan dat dit de switch is tussen wel/geen opslaan-als scherm. ;)
Ik moet echter ook nog de regel met Content-Type blokken zodat de inhoud van het tekstbestand in de browser wordt getoond.
Groet...
Link gekopieerd
waarom maak je er geen if statement die de headers afschermen?
if ($_GET['download'] != 0) {
$mm_type="application/octet-stream";
header("Cache-Control: public, must-revalidate");
header("Pragma: hack");
header("Content-Type: " . $mm_type);
header("Content-Length: " .(string)(filesize($naam)) );
//header('Content-Disposition: attachment; filename="'.basename($naam).'"');
header("Content-Transfer-Encoding: binary\n");
}
andere optie:
de headers moeten gaan aangeven dat het om text/html gaat ivp application/octet-stream
Link gekopieerd
Bedankt Leroy,
text/html is het antwoord! Stom van mij.
Super...
Link gekopieerd
uhmmm ppientje,
Dit werkt in ie niet; dan moet je de headers weglaten waarom weet ik ook niet, in firefox gaat het wel goed.
Link gekopieerd
Ik gebruik nu dit, en dat werkt bij mij in IE7 en FF2.
<?php
$naam="tekst.txt";
//$mm_type="application/octet-stream";
$mm_type="text/html";
header("Cache-Control: public, must-revalidate");
header("Pragma: hack");
header("Content-Type: " . $mm_type);
header("Content-Length: " .(string)(filesize($naam)) );
//header('Content-Disposition: attachment; filename="'.basename($naam).'"');
header("Content-Transfer-Encoding: binary\n");
$fp = fopen($naam, 'rb');
$buffer = fread($fp, filesize($naam));
fclose ($fp);
print $buffer;
?>
Dit werkt bij jou toch ook wel?
Link gekopieerd
in ie7 niet getest, in ie 6 werkt het niet.
werkt half, hij lijkt de headers die opnieuw verzonden worden niet te begrijpen, dus dan zou er wat mis zijn met de cache van temporary files?
Link gekopieerd