/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Download fil
Fra : AHR


Dato : 29-04-03 10:24

Hej NG

Jeg har et webhotel hvor jeg har lagt en *.php og *.doc fil ud. Hvilken kode
skal jeg bruge i *.php for at en bruger kan downloade filen når han/hun
klikker på et link?

Tak
Ahr



 
 
Johan Holst Nielsen (29-04-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 29-04-03 10:47

> Jeg har et webhotel hvor jeg har lagt en *.php og *.doc fil ud. Hvilken kode
> skal jeg bruge i *.php for at en bruger kan downloade filen når han/hun
> klikker på et link?

hmm, forstår ikke helt hvad du vil?
Vil du have brugeren til at downloade doc filen gennem en PHP fil?
Så skal du nok kigge på
http://www.php.net/manual/en/function.header.php

(Tip: tjek det nederste eksempel ud ;))

mvh
Johan


AHR (29-04-2003)
Kommentar
Fra : AHR


Dato : 29-04-03 11:20

> hmm, forstår ikke helt hvad du vil?
> Vil du have brugeren til at downloade doc filen gennem en PHP fil?
> Så skal du nok kigge på
> http://www.php.net/manual/en/function.header.php
>
> (Tip: tjek det nederste eksempel ud ;))

Ok tak, men forstår ikke helt eksemplet.

<a href ="/genfile.php/filename.pdf">download file</a>

Koden vil da bare åbne en pdf-fil i browseren.

Jeg ønsker følgende:

Hvis brugeren trykker på download linket på min side åbnes en boks hvori
han/hun kan åbne/gemme filen der ligger på serveren.

Hvordan ser koden ud til det

Tak
AHR



Johan Holst Nielsen (29-04-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 29-04-03 11:26

>>hmm, forstår ikke helt hvad du vil?
>>Vil du have brugeren til at downloade doc filen gennem en PHP fil?
>>Så skal du nok kigge på
>>http://www.php.net/manual/en/function.header.php
>>
>>(Tip: tjek det nederste eksempel ud ;))
>
>
> Ok tak, men forstår ikke helt eksemplet.
>
> <a href ="/genfile.php/filename.pdf">download file</a>
>
> Koden vil da bare åbne en pdf-fil i browseren.
>
> Jeg ønsker følgende:
>
> Hvis brugeren trykker på download linket på min side åbnes en boks hvori
> han/hun kan åbne/gemme filen der ligger på serveren.
>
> Hvordan ser koden ud til det


Prøv noget ala dette:

download.php

<?php
if(trim($_GET['file'] == '') && (file_exists($_GET['file']))) {
   header("Content-type: application/octet-stream");
   header("Content-Disposition: attachment; filename=".$_GET['file']);
   readfile($_GET['file']);
}
?>

mvh
johan


AHR (29-04-2003)
Kommentar
Fra : AHR


Dato : 29-04-03 11:34

> Prøv noget ala dette:

> download.php

> <?php
> if(trim($_GET['file'] == '') && (file_exists($_GET['file']))) {
> header("Content-type: application/octet-stream");
> header("Content-Disposition: attachment; filename=".$_GET['file']);
> readfile($_GET['file']);
> }
> ?>

skal ['file'] udskiftes med titlen på dokumentet?

skal koden indgå i et link <a href""></a>?

Tak endnu engang



Johan Holst Nielsen (29-04-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 29-04-03 11:55



AHR wrote:
>>Prøv noget ala dette:
>
>
>>download.php
>
>
>><?php
>>if(trim($_GET['file'] == '') && (file_exists($_GET['file']))) {
>>header("Content-type: application/octet-stream");
>>header("Content-Disposition: attachment; filename=".$_GET['file']);
>>readfile($_GET['file']);
>>}
>>?>
>
>
> skal ['file'] udskiftes med titlen på dokumentet?
>
> skal koden indgå i et link <a href""></a>?
>
> Tak endnu engang

Well... min kode var lavet udfra at linket skulle være noget ala dette her:

<a href="download.php?file=dokument-navn.doc">Download</a>

Men du kan også bare lave filen om til...
<?php
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=document.doc");
readfile("./document.doc");
?>


AHR (29-04-2003)
Kommentar
Fra : AHR


Dato : 29-04-03 12:19

> > skal ['file'] udskiftes med titlen på dokumentet?
> >
> > skal koden indgå i et link <a href""></a>?
> >
> > Tak endnu engang
>
> Well... min kode var lavet udfra at linket skulle være noget ala dette
her:
>
> <a href="download.php?file=dokument-navn.doc">Download</a>
>
> Men du kan også bare lave filen om til...
> <?php
> header("Content-type: application/octet-stream");
> header("Content-Disposition: attachment; filename=document.doc");
> readfile("./document.doc");
> ?>

Denne kode åbner kun dokumentet i browseren. Jeg vil jo gerne have at
brugeren har mulighed for at gemme dokumentet med det samme som på stocholms
side med hans cv'er:

http://www.stocholm.dk/about.aspx

Tak



AHR (29-04-2003)
Kommentar
Fra : AHR


Dato : 29-04-03 12:21

> Denne kode åbner kun dokumentet i browseren. Jeg vil jo gerne have at
> brugeren har mulighed for at gemme dokumentet med det samme som på
stocholms
> side med hans cv'er:
>
> http://www.stocholm.dk/about.aspx
>
> Tak

Undskyld. Min fejl. Det gør den jo heller ikke på hans side. Jeg troede bare
man kunne få en windows boks op og spørge om man ville gemme eller åbne
dokumentet.



Lars Dybdahl (29-04-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 29-04-03 13:30

AHR wrote:
> Denne kode åbner kun dokumentet i browseren.

Vær opmærksom på, at visse browsere har det med at ignorere http-headers -
det gælder især Microsoft's Internet Explorer. De kigger nogle gange på
indholdet af det, de downloader, og opfører sig derefter. Header-løsningen
er derfor ikke 100% sikker, men det er den bedste, der umiddelbart kan lade
sig gøre.

Lars.

--
Freelance programmør
Programmering mod timebetaling

Lars Dybdahl (29-04-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 29-04-03 12:13

Johan Holst Nielsen wrote:
> if(trim($_GET['file'] == '') && (file_exists($_GET['file']))) {

Øh - var der nogen, der sagde sikkerhedsbrist?!?

Lars.

--
Freelance programmør
Programmering mod timebetaling

Johan Holst Nielsen (29-04-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 29-04-03 12:26

>>if(trim($_GET['file'] == '') && (file_exists($_GET['file']))) {
>
>
> Øh - var der nogen, der sagde sikkerhedsbrist?!?


Læs dit egen signatur:
Freelance programmør
Programmering mod timebetaling

Undskyld, men nu regner jeg med folk selv arbejder videre med koden.
En ting kunne være at f.eks. lade alt komme op i et uploade directory,
og eller f.eks.

Men hvis vi skal kigge på 100% sikkerhed :)

eregi => tjek om filen som brugeren ønsker at hente har rigtigt
extension (doc$ eks.).

stristr => tjek om bruger forsøger at skifte directory ... (/ og ..)

Eventuelt kunne man lege med
http://www.php.net/manual/en/function.pathinfo.php
http://www.php.net/manual/en/function.basename.php

Men undskyld jeg ikke gider lave fuldkomne løsninger :) Jeg giver hints
og eksempler, jeg skriver ikke fuld kode. Hvis jeg skal have det i min
signatur, som en ansvarsfraskrivelse er det da i orden.

mvh
Johan


Lars Dybdahl (29-04-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 29-04-03 13:27

Johan Holst Nielsen wrote:
> Men undskyld jeg ikke gider lave fuldkomne løsninger :)

Prototyper bliver ofte ophøjet til færdige produkter og eksempler bliver
ofte kopieret direkte ind i færdige webløsninger. Derfor synes jeg, at det
var på sin plads at gøre opmærksom på, at den skrevne kode helst ikke måtte
anvendes, som den stod der. Der er ingen personlig kritik i det, og jeg
tror at vi er enige om pointen.

Lars.

--
Freelance programmør
Programmering mod timebetaling

Johan Holst Nielsen (29-04-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 29-04-03 14:10

Lars Dybdahl wrote:
> Johan Holst Nielsen wrote:
>
>>Men undskyld jeg ikke gider lave fuldkomne løsninger :)
>
>
> Prototyper bliver ofte ophøjet til færdige produkter og eksempler bliver
> ofte kopieret direkte ind i færdige webløsninger. Derfor synes jeg, at det
> var på sin plads at gøre opmærksom på, at den skrevne kode helst ikke måtte
> anvendes, som den stod der. Der er ingen personlig kritik i det, og jeg
> tror at vi er enige om pointen.

Tror også vi er enige :)
Men jeg håber da ikke en (professionel*) programmør ville kører en kode
direkte fra Usenet, hvor folk ikke har ansvar for det de laver, og så
ind i deres produkt, uden først at gennemse koden, og analysere om der
kunne være brug for et sikkerhedstjek af koden.

*) En person der får penge for sit arbejde. Eventuelt frivillig der
arbejder med produkter som indeholder andre personlige oplysninger.

mvh
Johan


Lars Dybdahl (29-04-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 29-04-03 19:13

Johan Holst Nielsen wrote:
> Men jeg håber da ikke en (professionel*) programmør ville kører en kode
> direkte fra Usenet, hvor folk ikke har ansvar for det de laver, og så

Jeg kommer jævnligt ud til kunder, der har problemer med kode, lavet af
andre programmører, og derfor ser jeg temmelig meget forskellig kode, både
i C, C++, Pascal, PHP, Perl og andet sjov.

I mange sprog, men især med php ser jeg desværre, at der kopieres på livet
løs, uden større omtanke, også af professionelle, defineret som folk, der
har programmering som fuldtidsarbejde. Når jeg kommenterer, at eksemplet
var usikkert, skyldes det faktisk, at jeg ofte har oplevet, at
professionelle programmører, der fremlagde et eksempel for en større
forsamling, faktisk ikke tænkte i sikkerhedsmæssige aspekter og derfor
faktisk ville have programmeret det på den måde, som eksemplet var
fremlagt.

Lars.

--
Freelance programmør
Programmering mod timebetaling

Johan Holst Nielsen (30-04-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 30-04-03 08:40



Lars Dybdahl wrote:
> I mange sprog, men især med php ser jeg desværre, at der kopieres på livet
> løs, uden større omtanke, også af professionelle, defineret som folk, der
> har programmering som fuldtidsarbejde. Når jeg kommenterer, at eksemplet
> var usikkert, skyldes det faktisk, at jeg ofte har oplevet, at
> professionelle programmører, der fremlagde et eksempel for en større
> forsamling, faktisk ikke tænkte i sikkerhedsmæssige aspekter og derfor
> faktisk ville have programmeret det på den måde, som eksemplet var
> fremlagt.

Okay, jeg kan sagnes se problemstillingen. Men jeg ved ikke hvad jeg
skal være mest bekymret over:
- At et eksempel ikke er sikkert (når det handler om noget helt 3...)
- At folk naivt tror på at koden er okay, blot fordi den virker.

Jeg kender også til aspekterne, dog mener jeg primært det er PHP meget
vage overgang mellem datatyper der er et lige så stort problem. ;) Men
det er vidst en anden diskussion.
Men muligvis skal jeg vende mig til at skrive en lille
ansvarsfraskrivelse, selvom det selvfølgelig er uheldig. Men tror
faktisk vi er enige. For at komme tilbage til min bekymring, så er jeg
mest bekymrede over folk der naivt tror på andres kode. (Vel og mærke
kode som er lavet af folk man ikke kender).

Typisk er det umuligt i en Usenet situation at lave en fuldkommen kode,
der er sikker (at man kan gøre en del, er en anden side af sagen). Man
kender sjældent personens egentlige behov, og hvorledes resten af koden
er opbygget. Derfor bør der også vises basale eksempler... og ikke
fuldkomne løsninger. Eksemplerne skal som udgangspunkt sjældent bruges
som de ser ud, i den endelige kode. Men mere som et skridt på vejen, så
man forstår hvorledes man kommer til løsningen.

mvh
Johan


Jens Tønnesen (30-04-2003)
Kommentar
Fra : Jens Tønnesen


Dato : 30-04-03 09:19

Johan Holst Nielsen <johan@weknowthewayout.com> skrev i
dk.edb.internet.webdesign.serverside.php:

>Typisk er det umuligt i en Usenet situation at lave en fuldkommen kode,
>der er sikker (at man kan gøre en del, er en anden side af sagen). Man
>kender sjældent personens egentlige behov, og hvorledes resten af koden
>er opbygget. Derfor bør der også vises basale eksempler... og ikke
>fuldkomne løsninger. Eksemplerne skal som udgangspunkt sjældent bruges
>som de ser ud, i den endelige kode. Men mere som et skridt på vejen, så
>man forstår hvorledes man kommer til løsningen.

Ja, netop. I de (få) tilfælde, hvor jeg har været i stand til at
anvise løsningsforslag i denne gruppe, så har jeg altid sørget for at
gøre kode-eksemplet så simpelt som muligt. Det betyder ofte at man
undlader basale sikkerhedscheck, såsom at teste variables
tilstedeværelse, type etc.

I debatindlæg, der direkte handler om sikkerhed, er det selvfølgelig
en anden sag.

--
Jens Tønnesen - http://www.pressefoto.dk

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408936
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste