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