perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 35
Click for quality!




10.02.2012 / 20:31

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  CGI: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragErzeugte Datei zum Download anbieten
Seitenanfang
Hallo,
ich würde gern eine erzeugte Datei zum Download anbieten. Am liebsten mit einem Link:

[code]
print "Fertig. Klicken Sie <a href=\"file:///kt_register.txt\">hier</a> zum Download des Ergebnisses.";
[\code]

Das funktioniert so leider nicht, wenn das CGI-Skript die HTML-Ausgabe erzeugt hat. Wenn ich hingegen die erzeugte HTML-Seite speichere, funktioniert es.
In einem früheren Thread (http://www.perlunity.de/perl/forum/thread_018161.shtml) fand ich einen Ansatz, der prinzipiell läuft:

[code]
print "Content-type: text/txt";
if(open(DATEI, "<../htdocs/kt/kt_register.txt")) {
binmode(DATEI);
binmode(\*STDOUT);
print<DATEI>;
close DATEI;
}
[\code]

Dann wird zwar sofort die Datei angeboten, das ist aber akzeptabel (es geht nur um eine Lösung auf einem lokalen Server). Problem jedoch: Die Datei wird unter dem Namen des CGI-Skripts gespeichert. Kann man hier explizit einen Namen vergeben? - Ein Kollege wies auf die Möglichkeit hin, ein weiteres Skript aufzurufen, was den gewünschten txt-Dateinamen hat und Apache so zu konfigurieren, daß txt-Dateien ausführbar sind. Scheint mir aber zu unsauber. Hat jemand eine Idee?
Bin Anfänger und für jeden Hinweis dankbar.
Schöne Grüße
Bernhard

Datum: 23.01.2007-19:03

Beitragre: Erzeugte Datei zum Download anbieten
Seitenanfang
Als erstes würde ich folgendes machen: ein Verzeichniss innerhalb des Servers festlegen, in welchem die Datei für das Herunterladen abgelegt werden soll. Vorteil: relative Links nutzbar, das ganze ist innerhalb deiner Webserver Umgebung. Nachteil: Das CGI benötigt Schreibrechte auf das Verzeichniss. Aus Sicherheitstechnischen Gründen absolut nicht zu empfehlen. Aber es ist ja nur(?) ein lokaler Server ...

Ich denke der folgende logische Ablauf sollte passen, ich verwende das selber (ähnlich) in einem CGI Script, welches mir Dateien zu einer ZIP Datei packt, die ich dann über einen Link auf der Seite herunterladen kann:

1. Sammle Daten, die in Ausgabedatei gespeichert werden sollen.

2. Öffne Ausgabedatei beispiel.txt in gewählten Verzeichniss

3. Schreibe gesammelte Daten in diese Datei

4. Schliesse Datei

5. Baue (relativen) Link zusammen und schreibe diesen in die Ausgabeseite.

6 Ferdsch. :)

Punkt 2 - 5 würde ich eine Funktion stecken. Diese sollte die Daten mitbekommen und auch den Namen der Ausgabedatei. Damit bliebe das ganze recht flexibel, da du diese Funktion dann immer wieder verwenden kannst (auch mit anderen Daten, Dateinamen).

Grüße
Mario

Datum: 24.01.2007-16:44

Beitragre: Erzeugte Datei zum Download anbieten
Seitenanfang
Hallo Mario,
danke für Deine Hinweise. Das Problem bleibt trotzdem: Bei der einen Variante kann ich keinen Namen vergeben, bei der anderen gibt es unterschiedliche Seiteneffekte (die z.T. aber wohl mit den Browser-Einstellungen zu tun haben könnten):

Erste Variante: über http localhost ansprechen:


functions::displayError("Fertig. Klicken Sie <a href=\"http://localhost/temp/kt_register.txt\">hier</a> zum Download des Ergebnisses.");

Da funktioniert der Link, aber txt-Dateien zeigt der Browser natürlich sofort an, statt sie zum Speichern anzubieten.

Zweite Variante: über file direkt die Datei ansprechen:

[code]
functions::displayError("Fertig. Klicken Sie <a href=\"file://d:www/Apache/htdocs/temp/kt_register.txt\">hier</a> zum Download des Ergebnisses.");

In diesem Fall reagiert Firefox nicht auf den Link, genausowenig läßt sich die Datei über Kontextmenü speichern. Der konstruierte Link ist korrekt: Wenn ich die HTML-Seite mit der ausgegebenen Meldung speichere, reagiert Firefox immerhin über Kontextmenü auf den Link ("Ziel speichern unter"). Der IE 7 - habe ich zu Testzwecken natürlich auch noch - erlaubt das Speichern über Kontextmenü schon bei der ersten Ausgabe, nachdem ich erlaubt habe, unsichere Inhalt des lokalen Intranets anzuzeigen (hätte gedacht, daß das Internet unsicherer sei als mein lokaler Rechner...). Dies aber nur als Rückmeldung auf den Hinweis - ich werde die Nutzer des Tools (mehr ist es nicht) jetzt halt zwingen, die Ergebnisausgabe im Browser selbst in einen Editor zu kopieren.
Schöne Grüße
Bernhard

Datum: 24.01.2007-21:35

-






-
-