Avatar billede dhunters Nybegynder
12. januar 2004 - 19:20 Der er 25 kommentarer og
1 løsning

Download doc-fil fra mysql-database

Hey alle. -> 45 point når exp kører!

Jeg har smidt nogle word-filer op i en database og skal nu have dem ud igen til download. Lige nu får jeg bare en masse kode smidt i hovedet. Spørgsmålet er så hvordan jeg gør det?

Takker på forhånd!
/dhunters
Avatar billede razor Nybegynder
12. januar 2004 - 19:37 #1
Du skal sende en passende Content-Type med header(). Jeg mener det er 'application/msword' - men prøv at google lidt efter det :-)
Avatar billede dhunters Nybegynder
12. januar 2004 - 19:45 #2
kører den her:

$q = mysql_query("SELECT file_code,file_type FROM k1files WHERE id='$id'") or die(mysql_error());
if (mysql_num_rows($q)) {
    extract(mysql_fetch_array($q));

    header("Content-type: $file_type");
    echo $file_code;
} else {
    echo "404 - fil ikke fundet!";
}
Avatar billede dhunters Nybegynder
12. januar 2004 - 19:45 #3
og så kører den ellers bare kode ud! Kan den ikke starte download automatisk?
Avatar billede razor Nybegynder
12. januar 2004 - 19:48 #4
Hvad indeholder $file_type?
Avatar billede dhunters Nybegynder
12. januar 2004 - 19:51 #5
Yes... nu fungerer noget af det - nu kan jeg få koden ind i word! Har brugt nogle headers...
Avatar billede dhunters Nybegynder
12. januar 2004 - 19:52 #6
$file_type bliver automatisk genereret når jeg uploader til databasen - så den står automatisk på msword
Avatar billede razor Nybegynder
12. januar 2004 - 19:59 #7
Så det virker fint nu? :)
Avatar billede dhunters Nybegynder
12. januar 2004 - 20:01 #8
nej, det virker slet ikke endnu - den kode der stod i browservinduet før er bare flyttet ind i word... Den skal bare download doc-filen.
Avatar billede razor Nybegynder
12. januar 2004 - 20:05 #9
Hmm - nu kender jeg ikke særlig meget til Microsoft Windows. Men mon ikke det er fordi du et eller andet sted har valgt at Microsoft Word skal bruge til at åbne filer der sender sådan en Content-Type?
Avatar billede dhunters Nybegynder
12. januar 2004 - 20:09 #10
ved det ikke... tror det har noget med de headers der at gøre... har arbejdet med headers før, men da lå filen ikke i en database men mappe! :(
Avatar billede Slettet bruger
12. januar 2004 - 20:10 #11
Måske en header("Content-Disposition: attachment; filename=\"$filnavn\"");
Avatar billede dhunters Nybegynder
12. januar 2004 - 20:14 #12
har prøvet, men linket hedder getdocs.php?id=4 f.eks. Der er ikke noget filnavn! så jeg skal på en eller anden måde få filnavnet ud af databasen og så hente den... Men kan ikke lige knække den...
Avatar billede Slettet bruger
12. januar 2004 - 20:19 #13
Så bare skriv header("Content-Disposition: attachment; filename=\"dokument{$id}.doc\"");
Avatar billede dhunters Nybegynder
12. januar 2004 - 20:24 #14
duer stadig ikke... dokumenterne hedder jo noget forskelligt allesammen. hvis jeg bruger den kode som du viser sandbox får jeg stadig kun kode frem...
Avatar billede Slettet bruger
12. januar 2004 - 20:31 #15
Du skal stadig sætte Content-Type. Måske kan det hjælpe at sætte den til application/octet-stream men jeg er ikke sikker.

Ellers kan du prøve med denne kombination:

header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=\"dokument{$id}.doc\"");
Avatar billede Slettet bruger
12. januar 2004 - 20:32 #16
Hvor er det, du får den kode frem? I dit browservindue? Eller når du prøver at åbne filen bagefter?
Avatar billede dhunters Nybegynder
12. januar 2004 - 20:35 #17
duer ikke umiddelbart med header - du kan se hvilken kode jeg får frem her:
http://www.swimhsk.dk/new-site/controlcenter/viewk1docs.php
Avatar billede Slettet bruger
12. januar 2004 - 20:44 #18
Prøv at vise din kode. Den kommer med alt dette før selve filen.

<br />
<b>Warning</b>:  filesize(): Stat failed for doc (errno=2 - No such file or directory) in <b>/web/ww
w.swimhsk.dk/www/new-site/controlcenter/downloadk1docs.php</b> on line <b>6</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /web/
www.swimhsk.dk/www/new-site/controlcenter/downloadk1docs.php:6) in <b>/web/www.swimhsk.dk/www/new-si
te/controlcenter/downloadk1docs.php</b> on line <b>6</b><br />
<html>
<BODY>
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /web/
www.swimhsk.dk/www/new-site/controlcenter/downloadk1docs.php:6) in <b>/web/www.swimhsk.dk/www/new-si
te/controlcenter/downloadk1docs.php</b> on line <b>18</b><br />
Avatar billede dhunters Nybegynder
12. januar 2004 - 20:49 #19
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Disposition: attachment; filename=\"dokument{$id}.doc\"");
header("Content-Type: application/msword");
header("Content-Length:".filesize($dokument{$id}.doc));
?>
<html>
<BODY>
<?php
connecting...

$q = mysql_query("SELECT file_code,file_type FROM k1files WHERE id='$id'") or die(mysql_error());
if (mysql_num_rows($q)) {
    extract(mysql_fetch_array($q));

    header("Content-type: $file_type");
    echo $file_code;
} else {
    echo "404 - fil ikke fundet!";
}
?>
</body>
</html>
Avatar billede Slettet bruger
12. januar 2004 - 20:57 #20
Så er det klart, at det ikke virker.

Du må ikke skrive nogetsomhelst andet ud en selve dit dokument.

Derudover kender den jo heller ikke størrelsen på det sted, du skriver header("Content-Length:".filesize($dokument{$id}.doc));

Og da du netop ikke har en reel fil at se størrelsen på, er det heller ikke filesize, der skal bruges.

Prøv:

<?php
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Disposition: attachment; filename=\"dokument{$id}.doc\"");
header("Content-Type: application/msword");
$q = mysql_query("SELECT file_code,file_type FROM k1files WHERE id='$id'") or die(mysql_error());
if (mysql_num_rows($q)) {
    extract(mysql_fetch_array($q));

    header("Content-type: $file_type");
    echo $file_code;
} else {
    echo "404 - fil ikke fundet!";
}
?>


Og det SKAL være uden nogetsomhelst html - hverken før eller efter.
Avatar billede dhunters Nybegynder
12. januar 2004 - 21:05 #21
Hold kæft det er godt, sandbox! Nu funger det jo! kanon - smid et svar så får du point med det samme exp kører igen!
Mange tusind tak...!
Avatar billede Slettet bruger
12. januar 2004 - 21:08 #22
Svaret er her.
Avatar billede Slettet bruger
12. januar 2004 - 21:10 #23
Du skal forresten nok også fjerne header("Content-Type: application/msword"); før databaseopslaget
Avatar billede dhunters Nybegynder
15. januar 2004 - 22:23 #24
Hei sandbox - ved ikke om du har tid, men kan du ikke lige kaste et blik på www.swimhsk.dk/new-site/index.php?page=talent - der er et download af en wordfil, men det duer ikke! ved du evt. hvad problemet kan være? Har brugt ovenstående, du skrev...
Avatar billede dhunters Nybegynder
15. januar 2004 - 22:39 #25
sorry... har fundet fejlen! her er point!
Avatar billede Slettet bruger
15. januar 2004 - 23:19 #26
Ja, jeg kan se, at det virker nu. Jeg kunne fint hente og åbne dokumentet.
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