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