/ 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
Virtuel fil.
Fra : Jesper Petersen


Dato : 26-02-02 16:03

Kan man med php danne en "virutel file" og overfører denne til clienten ????

Jeg en Mysql db med en logtabel i , jeg ville gerne havde at man på en
side havde et link som når man trykkede på det, lavede et select i tabelen
og fik dannet en fil og den famøse "gem som" box poppede op, altså uden at
det er nødvendigt at danne fillen i tmp på serveren først. --- Anyone.




 
 
Peter Brodersen (26-02-2002)
Kommentar
Fra : Peter Brodersen


Dato : 26-02-02 16:37

On Tue, 26 Feb 2002 16:02:47 +0100, "Jesper Petersen"
<dsl9091@vip.cybercity.dk> wrote:

>Kan man med php danne en "virutel file" og overfører denne til clienten ????
>
> Jeg en Mysql db med en logtabel i , jeg ville gerne havde at man på en
>side havde et link som når man trykkede på det, lavede et select i tabelen
>og fik dannet en fil og den famøse "gem som" box poppede op, altså uden at
>det er nødvendigt at danne fillen i tmp på serveren først. --- Anyone.

Der er ingen forskel på at downloade en fil og at downloade en
hjemmeside. Det er samme request - og der spyttes blot data tilbage
til browseren (som så selv må skabe en fil lokalt).

Forskellen ligger i om browseren får lyst til at spørge om man skal
downloade den requestede URL eller ej. Dette er typisk baseret ud fra
Content-Type (bortset fra i defekte browsere, der selv mod fornuft
forsøger at lave gæt på filtypen).

Så lav blot et link til en PHP-fil, der har en specifik content-type,
fx:

Header("Content-Type: application/octet-stream");

.... og derefter koden til resten af outputtet.

Du kan evt. krydre det med at smide en Content-Length på (hvis du
kender størrelsen af outputtet) og en Content-Disposition for at
forsøge at sætte filnavnet. En mere sikker (og lidt grim) metode til
sidstnævnte af hensyn til førnævnte browsere, der ikke kan finde ud af
at fortolke headers korrekt, er at lave et link i stil med:

download.php/logdata.log

Her vil filen "download.php" blive kørt, men browseren tror at filen
hedder "logdata.log", og vil tilbyde at gemme under dette filnavn.

--
- Peter Brodersen

Michael Rasmussen (26-02-2002)
Kommentar
Fra : Michael Rasmussen


Dato : 26-02-02 17:47

On Tue, 26 Feb 2002 16:36:39 +0100, Peter Brodersen wrote:

> Du kan evt. krydre det med at smide en Content-Length på (hvis du kender
> størrelsen af outputtet) og en Content-Disposition for at forsøge at
> sætte filnavnet. En mere sikker (og lidt grim) metode til sidstnævnte af
> hensyn til førnævnte browsere, der ikke kan finde ud af at fortolke
> headers korrekt, er at lave et link i stil med:
Ifølge rfc'en skal filens længde beskrives i Content-Disposition, og dette
gøres ved at tildele variablen size en værdi. F.eks.

header("Content-Dispostion: Attachment; filename="something"\n
size=somesize");

Se: http://www.ietf.org/rfc/rfc2183.txt

--
Hilsen/Sincerely
Michael Rasmussen

"C makes it easy to shoot yourself in the foot; C++ makes it harder,
but when you do, it blows away your whole leg." - Bjarne Stroustrup
-------------------------------------------------------------------
Fjern NOSPAM fra min adresse, for at sende mig en mail

Christian Schmidt (27-02-2002)
Kommentar
Fra : Christian Schmidt


Dato : 27-02-02 22:50

Michael Rasmussen wrote:
>
> On Tue, 26 Feb 2002 16:36:39 +0100, Peter Brodersen wrote:
>
> > Du kan evt. krydre det med at smide en Content-Length på (hvis du kender
> > størrelsen af outputtet) og en Content-Disposition for at forsøge at
> > sætte filnavnet. En mere sikker (og lidt grim) metode til sidstnævnte af
> > hensyn til førnævnte browsere, der ikke kan finde ud af at fortolke
> > headers korrekt, er at lave et link i stil med:
> Ifølge rfc'en skal filens længde beskrives i Content-Disposition, og dette
> gøres ved at tildele variablen size en værdi. F.eks.
>
> header("Content-Dispostion: Attachment; filename="something"\n
> size=somesize");
>
> Se: http://www.ietf.org/rfc/rfc2183.txt

RFC'en siger vel bare, at man _kan_ angive en _omtrentlig_ længde i
Content-Disposition-headeren.

Den præcise længde angivet i Content-Length-headeren må vel være at
foretrække (hvis altså man kender den).


Christian

Martin Mouritzen (26-02-2002)
Kommentar
Fra : Martin Mouritzen


Dato : 26-02-02 16:52

After I finished the 3 Pan Galactic Gargle Blasters, "Jesper Petersen"
<dsl9091@vip.cybercity.dk> just offered me, he muttered some weird
stuff, and I had to correct this gibberish:

>Kan man med php danne en "virutel file" og overfører denne til clienten ?

Prøv at leg med følgende:

<?
$filename = "mindb.txt";
$type = "text/plain";
$filedata = "dum de dum";

Header("Content-disposition: filename=".$filename);
Header("Content-type: $type");
echo $filedata;
?>
--
Nano Martin Mouritzen Phone +45 24899896
Vestergade 43 Programmer Advanced Simplicty
DK-8000 Århus martin@nano.dk http://www.nano.dk
Note: Nano søger samarbejdspartnere, se mere på websitet

Jesper Petersen (27-02-2002)
Kommentar
Fra : Jesper Petersen


Dato : 27-02-02 01:14


"Martin Mouritzen" <martin@fez.dk> skrev i en meddelelse
news:a5gb0p$1e2k$1@news.cybercity.dk...
> Prøv at leg med følgende:
>
> <?
> $filename = "mindb.txt";
> $type = "text/plain";
> $filedata = "dum de dum";
>
> Header("Content-disposition: filename=".$filename);
> Header("Content-type: $type");
> echo $filedata;
> ?>

Prøvet det ;( men linket får kun scriptet til at åbne en side med indholdet
af $filedata... og ikke den "gem som" box jeg savner..;)



Rasmus Bøg Hansen (27-02-2002)
Kommentar
Fra : Rasmus Bøg Hansen


Dato : 27-02-02 11:13

Jesper Petersen wrote:

>> $type = "text/plain";

>> Header("Content-type: $type");
>> echo $filedata;
>> ?>
>
> Prøvet det ;( men linket får kun scriptet til at åbne en side med
> indholdet
> af $filedata... og ikke den "gem som" box jeg savner..;)

Nej, det er klart, for MIME-typen siger jo, det er ren tekst. Du skal
angive en passende mime-type (application/octet-stream,
application/x-msword eller lignende).

Rasmus

--
-- [ Rasmus "Møffe" Bøg Hansen ] ---------------------------------------
DISCLAIMER: Microsoft, Windows, Windows 98, Bugs, Lacking features, IRQ
conflicts, System crashes, Non-functional multitasking, the Y2K problem
and the Blue Screen of Death are registered trademarks of
Microsoft, Corp., Redmond, USA.
----------------------------------[ moffe at amagerkollegiet dot dk ] --

Martin Mouritzen (27-02-2002)
Kommentar
Fra : Martin Mouritzen


Dato : 27-02-02 12:51

After I finished the 3 Pan Galactic Gargle Blasters, Rasmus Bøg Hansen
<moffespam@amagerkollegiet.dk> just offered me, he muttered some weird
stuff, and I had to correct this gibberish:

>Nej, det er klart, for MIME-typen siger jo, det er ren tekst. Du skal
>angive en passende mime-type (application/octet-stream,
>application/x-msword eller lignende).

Hvis filen skal downloades kan jeg anbefale at bruge
application/octet-stream uanset hvad man sender (for at undgå at
stupide browsere åbner tingene i et "nested" vindue).
--
Nano Martin Mouritzen Phone +45 24899896
Vestergade 43 Programmer Advanced Simplicty
DK-8000 Århus martin@nano.dk http://www.nano.dk
Note: Nano søger samarbejdspartnere, se mere på websitet

Jesper Petersen (27-02-2002)
Kommentar
Fra : Jesper Petersen


Dato : 27-02-02 22:13


"Martin Mouritzen" <martin@fez.dk> skrev i en meddelelse
news:a5ih9h$1de0$1@news.cybercity.dk...
> >Nej, det er klart, for MIME-typen siger jo, det er ren tekst. Du skal
> >angive en passende mime-type (application/octet-stream,
> >application/x-msword eller lignende).
>
> Hvis filen skal downloades kan jeg anbefale at bruge
> application/octet-stream uanset hvad man sender (for at undgå at
> stupide browsere åbner tingene i et "nested" vindue).

application/x-msword virker for mig ;) tak for hjælpen..... jeg vedlægger
lige koden som andre kan se med :)

-----Code klip start.
<?php

$datestamp = date("dmY");
$type = "application/x-msword";
$filename = $datestamp .".crmlog";

# Mulige Content-type: (indsættes i $type var.)
# text/plain
# application/octet-stream
# application/x-msword

# Database oplysninger.
$dbhost = "domaine.dk";
$dbuser = "dbbrugernavn";
$dbpass = "dbbrugerpass";
$usedb = "dbnavn";

# Header functions.
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die("ingen DBHOST conn.");
$dbF = mysql_select_db($usedb, $db) or die("ingen DBSELECT");

$sql = "SELECT * FROM crm_export ORDER BY opretdto DESC";
$result = mysql_query($sql, $db);

while ($res = mysql_fetch_array($result))
{
extract($res);
$post =
"$navn;$adr;$coadr;$postnr;$bynavn;$email;$fdag.$fmdr.$faar;$crmkode\n";
$filedata = "$filedata$post";
}

Header("Content-Disposition: filename=$filename");
Header("Content-type: $type");
Header("Content-Dispostion: Attachment; filename=$filename");

echo $filedata;

?>
-----Code klip slut.

Endnu en gang tak for hjælpen alle..

Jesper out.



Søg
Reklame
Statistik
Spørgsmål : 177522
Tips : 31968
Nyheder : 719565
Indlæg : 6408669
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste