Avatar billede supermand69 Nybegynder
18. september 2006 - 22:30 Der er 27 kommentarer og
1 løsning

header content-type

jeg forsøger at lave et script så man bliver fri for at vælge "gem destination som" ved download af filer

download.php
-----------------
header("Content-disposition: filename=".$_GET['file']);
header("Content-type: application/msdownload");

men det virker ikke helt.. den skriver downloader bare min download.php fil
Avatar billede thorus Nybegynder
18. september 2006 - 22:38 #1
header sidder den inden for <? ?>
Avatar billede jensgram Nybegynder
18. september 2006 - 22:41 #2
... og er der mellemrum eller andre specialtegn i GET{'file'] ? Så kan det hjælpe at pakke filnavnet ind i "-er:

header('Content-disposition: filename="'.$_GET['file'].'"');
Avatar billede fangel Nybegynder
19. september 2006 - 10:11 #3
Det skal iirc være

Content-Disposition: attachment; filename=filnavn.ext

for at tvinge en download.. ;)

Og så skal du fjerne Content-Type - eller endnu bedre, sætte den til den rigtige mime-type.. Det med at sige at der er en "msdownload" er "snyd"..

-fangel
Avatar billede jensgram Nybegynder
19. september 2006 - 13:11 #4
fangel > Hvad med "application/octet-stream" - den ser man fra tid til anden? Er det "kriminelt" (jeg spørger udelukkende fordi jeg ikke aner det)?
Avatar billede fangel Nybegynder
19. september 2006 - 13:22 #5
jensgram: Det virker - men det er ikke "tekst-bogs metoden".

Man bør angive at det er en attachment, og bruge Mime-type til at fortælle hvilken type fil det så faktisk er.

Eg bør et korrekt svar ligne dette: (på billedet whoop.png)

---
200 OK
Content-Disposition: attachment; filename=whoop.png
Content-Type: image/png
Content-Length: [størrelsen af whoop.png i bytes]
Last-Modified: [dato-stempel for hvornår whoop.png sidst blev ændret]

[indholdet af whoop.png]
---

Det vil sikre ordenlig caching, ordenlig download-bar, etc...

-fangel
Avatar billede jensgram Nybegynder
19. september 2006 - 16:32 #6
Fangel > Ja, ok. Tak for det.
Avatar billede supermand69 Nybegynder
19. september 2006 - 17:30 #7
---
200 OK
Content-Disposition: attachment; filename=whoop.png
Content-Type: image/png
Content-Length: [størrelsen af whoop.png i bytes]
Last-Modified: [dato-stempel for hvornår whoop.png sidst blev ændret]

[indholdet af whoop.png]
---

indholdet af whoop.png? hvad menes med det?
Avatar billede jensgram Nybegynder
19. september 2006 - 18:15 #8
Det er whoop.png's indhold.
Avatar billede jensgram Nybegynder
19. september 2006 - 18:16 #9
For eksempel returværdien fra readfile(); - http://dk.php.net/readfile
Avatar billede jensgram Nybegynder
19. september 2006 - 18:17 #10
Eller: Ikke returværdien (det er antal bytes), men det den skriver til output buffer'en.
Avatar billede supermand69 Nybegynder
19. september 2006 - 20:35 #11
hvordan kan man finde mime type for en fil i PHP4?
Avatar billede supermand69 Nybegynder
19. september 2006 - 20:57 #12
den gemmer stadig bare selve html filen

    $header = "Content-disposition: attachment; filename='".$_GET['file']."'
        Content-length: ".filesize(stripslashes($_GET['file']));
   
    header($header);

hvis jeg tilføjer readfile() får jeg fejl at header er sendt
Avatar billede fangel Nybegynder
20. september 2006 - 09:44 #13
Et eksempel på en download (hvor du kender mime-type)

<?php

$filename = 'report.pdf';
$filetype = 'application/adobe-acrobat'; // tjek lige at det er det den hedder, kan ik huske det

header("Content-Disposition: attachment; filename=" . $filename);
header("Content-Type: " . $filetype);
header("Content-Length: " . filesize($filename));

readfile($filename);

?>

-fangel
Avatar billede supermand69 Nybegynder
20. september 2006 - 16:02 #14
hvordan finder man så mime type i PHP4?
Avatar billede fangel Nybegynder
20. september 2006 - 16:07 #15
Jeg er ikke sikker på at der er en "one size fits all".. Hvis det kun er for billede-filer så kan getimagesize() klare opgaven (alternativt exif_imagetype hvis den extension er installeret)

Hvis det skal gælde for _alle_ type, så skal du nok ud og google lidt.. Jeg tror ikke der er en indbygget... (but feel free to prove me wrong)

-fangel
Avatar billede jensgram Nybegynder
20. september 2006 - 16:07 #16
Det kan man vel ikke bare sådan uden videre? Det afhænger - så vidt jeg ved - af filens extension, så du må vel til at matche dem?!?
Avatar billede jensgram Nybegynder
20. september 2006 - 16:08 #17
Avatar billede jensgram Nybegynder
20. september 2006 - 16:09 #18
Fangel > Havde ikke lige set dit indlæg, men her var så indvendingen ;P
Avatar billede supermand69 Nybegynder
20. september 2006 - 16:16 #19
jens > virker kun i php5
Avatar billede supermand69 Nybegynder
20. september 2006 - 16:24 #20
Jeg glemmer bare mime..

Det er åbenbart kun filnavn og størrelsen der er de mest vigtige :)

Jeg er nu kommer frem til følgende:

----------------
$_GET['file'] = stripslashes($_GET['file']);

$header = "Content-disposition: attachment; filename=".basename($_GET['file'])."
    Content-length: ".filesize($_GET['file']);

header($header);

readfile($_GET['file']);

----------------

Jeg har så et andet problem.. når jeg så downloader tekstfiler bliver de gemt i et underligt format.. alle mellemrum er lavet om til firkanter.. hvordan retter jeg det?
Avatar billede supermand69 Nybegynder
20. september 2006 - 16:25 #21
kan jeg lave noget i readfile() så det bliver læst "korrekt"?
Avatar billede jensgram Nybegynder
20. september 2006 - 16:28 #22
Supermand > Nej, det virker faktisk helt ned til 4.3.0, men du skal have en mime.magic fil.

Mener du ikke linieskift i stedet for mellemrum? I så fald er det sikkert \r...
Avatar billede supermand69 Nybegynder
20. september 2006 - 16:54 #23
jens > jo linjeskift.. hehe

\r

hvordan?
Avatar billede fangel Nybegynder
20. september 2006 - 17:41 #24
whoaa - må jeg råbe jagt i gevær! Dit script er født til at give sikkerhedsproblemer... (hvis jeg nu bare siger at det er der, kan du så selv gætte dig til det)

-fangel
Avatar billede supermand69 Nybegynder
30. september 2006 - 17:26 #25
fangel > lav et svar :)

men har lige en ting mere.. ved du så hvordan man kan åbne (køre) filen i stedet for at gemme den?
Avatar billede supermand69 Nybegynder
30. september 2006 - 17:40 #26
mente selvfølgelig at streame filen :)
Avatar billede fangel Nybegynder
01. oktober 2006 - 09:17 #27
Det er ikke alle filtyper der _kan_ streames, og nej - jeg ved ikke hvordan man tvinger en sådan streaming igang..

og et svar..

-fangel
Avatar billede supermand69 Nybegynder
10. oktober 2006 - 20:08 #28
tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester