Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Download styret af PHP

4 views
Skip to first unread message

Bertel Lund Hansen

unread,
May 25, 2013, 10:55:28 AM5/25/13
to
Hej allesammen

Kan det lade sig g�re i PHP at styre download s� en knap virker
ligesom et almindeligt link? S� kan jeg nemlig bygge noget logik
som jeg har brug for, ind i rutinen.

--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/

scootergrisen

unread,
May 25, 2013, 11:14:31 AM5/25/13
to
Den 25-05-2013 16:55, Bertel Lund Hansen skrev:
> Hej allesammen
>
> Kan det lade sig g�re i PHP at styre download s� en knap virker
> ligesom et almindeligt link? S� kan jeg nemlig bygge noget logik
> som jeg har brug for, ind i rutinen.
>

Du kan bruge Javascript :
<button onClick="funktion();">G�r noget</button>

Rune Jensen

unread,
May 25, 2013, 12:31:06 PM5/25/13
to
On 25 Maj, 16:55, Bertel Lund Hansen <kanonsa...@lundhansen.dk> wrote:

> Kan det lade sig gøre i PHP at styre download så en knap virker
> ligesom et almindeligt link? Så kan jeg nemlig bygge noget logik
> som jeg har brug for, ind i rutinen.

Du kan ikke styre noget client side med PHP, fordi PHP afvikles på
serveren.

Der er du nødt til at bruge javascript, som afvikles på klienten.


MVH
Rune Jensen

Kim Ludvigsen

unread,
May 25, 2013, 1:28:39 PM5/25/13
to
On 25-05-2013 16:55, Bertel Lund Hansen wrote:

> Kan det lade sig g�re i PHP at styre download s� en knap virker
> ligesom et almindeligt link? S� kan jeg nemlig bygge noget logik
> som jeg har brug for, ind i rutinen.

Hvordan styre download? Du kan jo lade knappen linke til en php-fil, som
s� udf�rer det som du nu vil have udf�rt - fx starte en download
og/eller pr�sentere en side uden download-knappen.

--
Mvh. Kim Ludvigsen
Stor sammenligning af antivirusprogrammer og sikkerhedspakker til PC,
Mac og mobil:
http://kimludvigsen.dk/sammenligning/antivirus

Bertel Lund Hansen

unread,
May 25, 2013, 6:05:22 PM5/25/13
to
Kim Ludvigsen skrev:

> Hvordan styre download? Du kan jo lade knappen linke til en php-fil, som
> så udfører det som du nu vil have udført - fx starte en download

Hvordan får man PHP til at starte en download?

Birger Sørensen

unread,
May 25, 2013, 6:35:10 PM5/25/13
to
Bertel Lund Hansen har bragt dette til verden:
> Kim Ludvigsen skrev:
>
>> Hvordan styre download? Du kan jo lade knappen linke til en php-fil, som
>> sᅵ udfᅵrer det som du nu vil have udfᅵrt - fx starte en download
>
> Hvordan fᅵr man PHP til at starte en download?

Det gᅵr man ikke.
PHP skal have et sted at sende tingene hen, og det sted skal noget vide
at der kommer data, og hvad der skal ske med dem.
Og det kan du ikke starte fra PHP. (Ellers kunne du sende data - eller
virus eller hvadsomhelt til hvemsomhelst.)

Man kan gᅵre det serverside med js, via en (evt, skjult) form, sᅵ bᅵde
siden indlᅵses og filen hentes.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
Utils http://sdccms.dk/ordbog/ http://sdccms.dk/mailfriend/
http://bredelund.dk CMS som det var meningen et sᅵdant skulle vᅵre


Kim Ludvigsen

unread,
May 25, 2013, 6:36:51 PM5/25/13
to
On 26-05-2013 00:05, Bertel Lund Hansen wrote:
> Kim Ludvigsen skrev:
>
>> Hvordan styre download? Du kan jo lade knappen linke til en php-fil, som
>> s� udf�rer det som du nu vil have udf�rt - fx starte en download
>
> Hvordan f�r man PHP til at starte en download?

Der er beskrevet to metoder her:
http://www.jasny.net/articles/how-i-php-x-sendfile/

Jeg har kun pr�vet den f�rste af dem, nummer to skulle v�re bedre, men
den kr�ver �ndring af ops�tningen af Apache - jeg ved ikke, om du har
mulighed for det.

Fordelen ved at starte download'en p� denne m�de er, at du kan bruge
cookies og PHP til at t�nde og slukke for download-knappen.

--
Kim Ludvigsen
Beskyt dine minder og data med online backup:
http://kimludvigsen.dk/sammenligning/backup/

Kim Ludvigsen

unread,
May 25, 2013, 6:41:24 PM5/25/13
to
On 26-05-2013 00:35, Birger Sᅵrensen wrote:
> Bertel Lund Hansen har bragt dette til verden:

>> Hvordan fᅵr man PHP til at starte en download?
>
> Det gᅵr man ikke.
> PHP skal have et sted at sende tingene hen, og det sted skal noget vide
> at der kommer data, og hvad der skal ske med dem.
> Og det kan du ikke starte fra PHP. (Ellers kunne du sende data - eller
> virus eller hvadsomhelt til hvemsomhelst.)

Du starter det fra PHP pᅵ samme mᅵde som en almindelig download startes:
Brugeren klikker pᅵ et link. Ved at bruge PHP indsᅵtter man blot et
ekstra led, inden filen sendes, og det led kan sᅵ bruges til forskellige
ting.

Kim Ludvigsen

unread,
May 25, 2013, 6:52:52 PM5/25/13
to
On 26-05-2013 00:41, Kim Ludvigsen wrote:
> On 26-05-2013 00:35, Birger Sᅵrensen wrote:
>> Bertel Lund Hansen har bragt dette til verden:
>
>>> Hvordan fᅵr man PHP til at starte en download?
>>
>> Det gᅵr man ikke.
>
> Du starter det fra PHP pᅵ samme mᅵde som en almindelig download startes:
> Brugeren klikker pᅵ et link. Ved at bruge PHP indsᅵtter man blot et
> ekstra led, inden filen sendes, og det led kan sᅵ bruges til forskellige
> ting.

For at uddybe lidt. Jeg tror, det er meget brugt at benytte PHP til at
sende filer i forbindelse med kᅵb pᅵ nettet. Jeg benyttede det, da jeg
solgte et hᅵfte om Linux. Kunden fik et downloadlink med en md5-hash,
som der skulle klikkes pᅵ for at hente hᅵftet.

Linket fᅵrte til en PHP-fil, der tjekkede hashen, og som sᅵ opdaterede
en database med oplysning om, at hᅵftet var blevet hentet m.m., og jeg
fik tilsendt en e-mail med relevante oplysninger, sᅵsom kundenavn og
antal downloads. Afslutningsvis blev hᅵftet sendt med:

header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="' .
basename($filnavn) . '"');
header('Content-Transfer-Encoding: binary');
readfile($filename);

Bertel Lund Hansen

unread,
May 25, 2013, 7:28:36 PM5/25/13
to
Kim Ludvigsen skrev:

> Der er beskrevet to metoder her:
> http://www.jasny.net/articles/how-i-php-x-sendfile/

Jeg opgiver nok projektet. Den metode du linker til virker fint,
men den udløser to balladebokse i browseren.

Kim Ludvigsen

unread,
May 25, 2013, 7:33:29 PM5/25/13
to
On 26-05-2013 01:28, Bertel Lund Hansen wrote:
> Kim Ludvigsen skrev:
>
>> Der er beskrevet to metoder her:
>> http://www.jasny.net/articles/how-i-php-x-sendfile/
>
> Jeg opgiver nok projektet. Den metode du linker til virker fint,
> men den udl�ser to balladebokse i browseren.

Hm, det udl�ste ikke advarsler, da jeg benyttede det. For brugeren
foregik det helt, som hvis de havde klikket p� et almindeligt link.

Allan Vebel

unread,
May 25, 2013, 7:48:35 PM5/25/13
to
Bertel Lund Hansen skrev:

Er det:
http://www.jasny.net/articles/how-i-php-x-sendfile/
du tænker på?

> Jeg opgiver nok projektet. Den metode du linker
> til virker fint, men den udløser to balladebokse i
> browseren.

Jeg får ingen fejl i nogen browser.

--
Allan Vebel
http://vebel.dk

scootergrisen

unread,
May 25, 2013, 8:37:44 PM5/25/13
to
> Hvordan f�r man PHP til at starte en download?

Du kan bruge :

header('Content-Type: application/octet-stream');
...
readfile($filnavn);

Det fungere dog ikke optimalt fordi PHP st�r og k�re hele tiden indtil
hele filen er f�rdig s� hvis man skal hente en stor fil s� kan det v�re
PHP laver timeout f�r filen er blevet hentet.

I stedet kan du l�gge dine filer der skal downloades i en mappe og i den
mappe laver du en .htaccess fil og skriver :
ForceType application/octet-stream

Hvis du alts� bruger Apache som HTTP server.

Rune Jensen

unread,
May 26, 2013, 12:42:22 AM5/26/13
to
On 26 Maj, 01:28, Bertel Lund Hansen <kanonsa...@lundhansen.dk> wrote:

> Jeg opgiver nok projektet. Den metode du linker til virker fint,
> men den udløser to balladebokse i browseren.

Som siger hvad?


MVH
Rune Jensen

Bertel Lund Hansen

unread,
May 26, 2013, 6:44:51 AM5/26/13
to
Kim Ludvigsen skrev:

> Hm, det udl�ste ikke advarsler, da jeg benyttede det. For brugeren
> foregik det helt, som hvis de havde klikket p� et almindeligt link.

F�rste boks sp�rger om jeg vil (gr�et ud:) �bne eller
(aktivt:) gemme filen. Anden boks beder mig specificere filnavn
og gemmested.

Bertel Lund Hansen

unread,
May 26, 2013, 7:18:42 AM5/26/13
to
Bertel Lund Hansen skrev:

> Jeg opgiver nok projektet. Den metode du linker til virker fint,
> men den udl�ser to balladebokse i browseren.

Det viste sig at jeg erkl�rede Content-type forkert. Nu er
problemet blot at den overf�rte zipfil ikke kan �bnes. Den har
for lille st�rrelse, og systemet melder at filen er defekt.

Kim Ludvigsen

unread,
May 26, 2013, 7:19:00 AM5/26/13
to
On 26-05-2013 12:44, Bertel Lund Hansen wrote:
> Kim Ludvigsen skrev:
>
>> Hm, det udløste ikke advarsler, da jeg benyttede det. For brugeren
>> foregik det helt, som hvis de havde klikket på et almindeligt link.
>
> Første boks spørger om jeg vil (grået ud:) åbne eller
> (aktivt:) gemme filen. Anden boks beder mig specificere filnavn
> og gemmested.

Du må have opsat headeren forkert med hensyn til type og evt. også navn.
Hvilken filtype er der tale om?

Første boks må være fordi, der ikke er opsat et tilknyttet program til
filtypen (eller fx hvis filtypen mangler). Anden boks kan skyldes en
forkert filtype eller en opsætning i din browser. Hvis du har opsat
browseren til automatisk at gemme i en bestemt mappe, så må det være
filtypen, der driller.

Kim Ludvigsen

unread,
May 26, 2013, 7:25:58 AM5/26/13
to
On 26-05-2013 13:18, Bertel Lund Hansen wrote:
> Bertel Lund Hansen skrev:
>
>> Jeg opgiver nok projektet. Den metode du linker til virker fint,
>> men den udløser to balladebokse i browseren.
>
> Det viste sig at jeg erklærede Content-type forkert. Nu er
> problemet blot at den overførte zipfil ikke kan åbnes. Den har
> for lille størrelse, og systemet melder at filen er defekt.

For lige at udelukke fejlkilder: Har du prøvet i flere browsere, og er
du sikker på, at filen er ok?

Du kan være rendt ind i en time-out, som scootergrisen nævner som et
muligt problem ved store filer.

Bertel Lund Hansen

unread,
May 26, 2013, 7:37:59 AM5/26/13
to
Kim Ludvigsen skrev:

> For lige at udelukke fejlkilder: Har du prøvet i flere browsere, og er
> du sikker på, at filen er ok?

Firefox gør det samme, og jeg er sikker på at filen er ok. Jeg
kan fint hente den og bagefter åbne den med et almindeligt link.

> Du kan være rendt ind i en time-out, som scootergrisen nævner som et
> muligt problem ved store filer.

Filen fylder 40 Kbyte.

Bertel Lund Hansen

unread,
May 26, 2013, 7:39:10 AM5/26/13
to
Bertel Lund Hansen skrev:

> Filen fylder 40 Kbyte.

Jeg har prøvet to opskrifter der begge giver samme resultat:

if (file_exists(ZIPFILE)) {
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".ZIPFILE);
header("Content-Length: ".filesize(ZIPFILE));
readfile(ZIPFILE);
}

if (file_exists(ZIPFILE)) {
header("X-Sendfile: ".ZIPFILE);
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".ZIPFILE);

Kim Ludvigsen

unread,
May 26, 2013, 7:41:11 AM5/26/13
to
On 26-05-2013 13:37, Bertel Lund Hansen wrote:
> Kim Ludvigsen skrev:
>
>> For lige at udelukke fejlkilder: Har du prøvet i flere browsere, og er
>> du sikker på, at filen er ok?
>
> Firefox gør det samme, og jeg er sikker på at filen er ok. Jeg
> kan fint hente den og bagefter åbne den med et almindeligt link.
>
>> Du kan være rendt ind i en time-out, som scootergrisen nævner som et
>> muligt problem ved store filer.
>
> Filen fylder 40 Kbyte.

Ja, så er det jo nok ikke lige et time-out, du render ind i. Prøv at
tjekke denne side:
http://stackoverflow.com/questions/2088267/download-of-zip-file-runs-a-corrupted-file-php

Birger Sørensen

unread,
May 26, 2013, 7:58:25 AM5/26/13
to
Bertel Lund Hansen skrev den 5/26/2013:
> Bertel Lund Hansen skrev:
>
>> Filen fylder 40 Kbyte.
>
> Jeg har prøvet to opskrifter der begge giver samme resultat:
>
> if (file_exists(ZIPFILE)) {
> header("Content-type: application/zip");
> header("Content-Disposition: attachment; filename=".ZIPFILE);
> header("Content-Length: ".filesize(ZIPFILE));
> readfile(ZIPFILE);
> }
>
> if (file_exists(ZIPFILE)) {
> header("X-Sendfile: ".ZIPFILE);
> header("Content-type: application/zip");
> header("Content-Disposition: attachment; filename=".ZIPFILE);
> }

...filename=".basename(ZIPFILE)...

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
Utils http://sdccms.dk/ordbog/ http://sdccms.dk/mailfriend/
http://bredelund.dk CMS som det var meningen et sådant skulle være


Bertel Lund Hansen

unread,
May 26, 2013, 8:07:38 AM5/26/13
to
Kim Ludvigsen skrev:

> Ja, så er det jo nok ikke lige et time-out, du render ind i. Prøv at
> tjekke denne side:

Underligt. Jeg prøvede flere ting og lagde tilsidst en .htaccess
over efter den nederste kommentars råd. Det hjalp ikke.

Så kopierede jeg opskriften med fuldt fejltjek over - og så
virkede det. Det mystiske er bare at selv om jeg så fjernede
.htaccess og slettede det der var anderledes i den lange
opskrift, så virker det stadigvæk. Jeg aner med andre ord ikke
hvorfor det virker, og heller ikke om det er permanent.

Men en ting er vigtig! Det skal ligge i en separat fil, for hvis
der er sendt headere før opskriften, så fejler den.

Birger Sørensen

unread,
May 26, 2013, 8:11:20 AM5/26/13
to
Efter mange tanker skrev Bertel Lund Hansen:
header() skal altid komme før der sendes noget...

Bertel Lund Hansen

unread,
May 26, 2013, 9:26:31 AM5/26/13
to
Birger Sørensen skrev:

> ...filename=".basename(ZIPFILE)...

ZIPFILE er et basename i sig selv.

Bertel Lund Hansen

unread,
May 26, 2013, 9:28:42 AM5/26/13
to
Bertel Lund Hansen skrev:

> Så kopierede jeg opskriften med fuldt fejltjek over - og så
> virkede det.

Men af en eller anden grund kan jeg ikke få hovedfilen til at
reagere på at jeg har nulstillet en SESSION-variabel der skal
sørge for at linket ikke længere vises.

Nu er jeg så grundgit træt af det hele at jeg giver op, men jeg
har da fundet ud af hvordan man kan sende en fil til klienten.

Kim Ludvigsen

unread,
May 26, 2013, 9:59:03 AM5/26/13
to
On 26-05-2013 15:28, Bertel Lund Hansen wrote:
> Bertel Lund Hansen skrev:
>
>> Så kopierede jeg opskriften med fuldt fejltjek over - og så
>> virkede det.
>
> Men af en eller anden grund kan jeg ikke få hovedfilen til at
> reagere på at jeg har nulstillet en SESSION-variabel der skal
> sørge for at linket ikke længere vises.

Jeg har aldrig kunnet finde ud af den slags, jeg plejer at springe over,
hvor gærdet er lavest forståelsesmæssigt:
<?php
start session
If ($hentet = "1") {$download-knap =""; }
else
{$download-knap = "<input ...>"; }
$hentet = "0";
...
echo $download-knap;
...
readfile(ZIPFILE);
$hentet = "1";

Bertel Lund Hansen

unread,
May 26, 2013, 10:06:35 AM5/26/13
to
Kim Ludvigsen skrev:

>> Men af en eller anden grund kan jeg ikke f� hovedfilen til at
>> reagere p� at jeg har nulstillet en SESSION-variabel der skal
>> s�rge for at linket ikke l�ngere vises.

> Jeg har aldrig kunnet finde ud af den slags, jeg plejer at springe over,
> hvor g�rdet er lavest forst�elsesm�ssigt:

SESSION er n�dvendigt hvis man arbejder med flere selvst�ndige
filer (som ikke er include-filer), eller hvis man i en form har

action='#'; // Klader samme fil

Et kald til en ny side nulstiller alle variable, ogs� din
$hentet, men hvis man �bner en session, kan man bruge
$_SESSION['hentet']. Dens v�rdi bliver husket tv�rs over
forskellige sider.

Det er s�dan set ikke sv�rt, men det kan godt drille under
udviklingen at disse variable netop ikke nulstilles f�r man
lukker browseren eller giver en specifik kommando.

Hvis man hele tiden arbejder med samme fil uden at genhente den,
er SESSION �verfl�dig, men variablene vil virke som alle andre
variable ($_SESSION er et array).

Jeg har brugt det masser af gange, og jeg fatter ikke hvorfor det
ikke virker, men det m� v�re det der header-sjov der er mystisk.

Karl Erik Christensen

unread,
May 27, 2013, 3:13:01 AM5/27/13
to
Den 26-05-2013 02:37, scootergrisen skrev:
> Du kan bruge :
>
> header('Content-Type: application/octet-stream');

Hej Scooter.

Det er ikke meget respons du får på dit ihærdige arbejde.

Størrelsen på filen der skal downloades, afhænger af hvor meget
hukommelse der er afsat til PHP.

Jeg har benyttet noget lignende på:

http://dmwebdesign.dk/karlerik/htpc/side17.php

At få knappen til at forsvinde efter download, er da vist piece of cake
med noget JS (som du vist også har skrevet).

At ingen gider respondere på på dine indlæg, er da bare synd for dem.

Karl Erik.

--
http://dmwebdesign.dk/karlerik/

scootergrisen

unread,
May 27, 2013, 7:49:25 AM5/27/13
to
> Det er ikke meget respons du får på dit ihærdige arbejde.

Nej det ikke altid der er så meget respons men jeg kan godt lide og lave
mine test side så kan jeg selv lærer noget og eksemplet ligger der så
andre kan se det hvis der kommer nogen andre forbi der vil vide hvordan
man gør dit og dat.

Også på et senere tidspunkt hvor man skal bruge noget så kan man lige
huske tilbage på et tidligere eksempel man har lavet og lave noget
spændende ud af det.
0 new messages