Header - Content-Disposition

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Ppientje

ppientje

08/09/2007 22:15:00
Quote Anchor link
Hallo,

ik heb onderstaande code op het php.net gevonden.
Door gebruik te maken van Content-Disposition wordt het browser opslaan-als scherm getriggered.

Maar wanneer ik deze regel blok dan wordt niet de inhoud van het tekst bestand getoond, maar komt alsnog het opslaan-als scherm.

Wat doe ik hier fout?

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
<?php

$naam
="tekst.txt";

$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");

$fp = fopen($naam, 'rb');
$buffer = fread($fp, filesize($naam));
fclose ($fp);
print $buffer;

?>
 
PHP hulp

PHP hulp

20/11/2024 09:51:53
 
Leroy

leroy

09/09/2007 09:50:00
Quote Anchor link
Welke foutmelding krijg je dan?

of krijg je alle tekst gewoon (binair) te zien?
 
Ppientje

ppientje

09/09/2007 10:05:00
Quote Anchor link
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?
Gewijzigd op 01/01/1970 01:00:00 door ppientje
 
Leroy

leroy

09/09/2007 10:18:00
Quote Anchor link
hmm
dit is wat ik gebruik voor een csv scriptje:
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
27
28
29
//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;
 
Leroy

leroy

09/09/2007 10:20:00
Quote Anchor link
uncomment de volgende regel uit je script en het werkt.

//header('Content-Disposition: attachment; filename="'.basename($naam).'"');
Gewijzigd op 01/01/1970 01:00:00 door leroy
 
Ppientje

ppientje

09/09/2007 10:54:00
Quote Anchor link
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...
 
Leroy

leroy

09/09/2007 10:56:00
Quote Anchor link
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
Gewijzigd op 01/01/1970 01:00:00 door leroy
 
Ppientje

ppientje

09/09/2007 11:00:00
Quote Anchor link
Bedankt Leroy,

text/html is het antwoord! Stom van mij.

Super...
 
Leroy

leroy

09/09/2007 11:03:00
Quote Anchor link
uhmmm ppientje,

Dit werkt in ie niet; dan moet je de headers weglaten waarom weet ik ook niet, in firefox gaat het wel goed.
 
Ppientje

ppientje

09/09/2007 11:06:00
Quote Anchor link
Ik gebruik nu dit, en dat werkt bij mij in IE7 en FF2.

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
<?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?
 
Leroy

leroy

09/09/2007 11:07:00
Quote Anchor link
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?
Gewijzigd op 01/01/1970 01:00:00 door leroy
 
Ppientje

ppientje

09/09/2007 11:19:00
Quote Anchor link
Vreemd dat het bij jou niet werkt.

Ik heb net getest op een computer met XPpro en IE6 en daarin verschijnt de tekst gewoon in de browser.

Zet ik Content-Disposition weer aan dan verschijnt zoals het hoort weer het opslaan-als scherm.
 
Leroy

leroy

09/09/2007 11:26:00
Quote Anchor link
hmm,

toch zou ik persoonlijk kiezen voor de andere optie die ik aandroeg:

gewoon de headers weglaten (=normal behaviour) voor browsers :)
 
Ppientje

ppientje

09/09/2007 11:33:00
Quote Anchor link
Je hebt helemaal gelijk wanneer het alleen maar om tekstbestanden gaat.
Ik houdt het header script achter de hand voor andere bestandstypen.

Bedankt...
Gewijzigd op 01/01/1970 01:00:00 door ppientje
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.