header

header

am 08.09.2006 10:22:21 von letters

Hallo,
ich habe immer noch mit meiner csv Datei zu tun. Ist soweit alles fertig.
Eine Sache wäre noch interessant, wegen der "Schönheit". Wenn ich per

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$csvName");
header("Content-Length: $len");
print($csvChange);

die csv Datei ausgebe, ist die gesamte Arbeit vorbei. Die temporären
Dateien und Tabellen die ich hatte, brauche ich nun nicht mehr. Deshalb
möchte ich diese vom Server löschen. Kein Problem, solange ich es vor der
Header Änderung mache. Dann ist aber auch alle sweg, wenn der user im
Downloaddialog für die CSV Datei auf Abbrechen klickt.
Kann ich ieses Dialog irgendwie abfragen, oder zumindest eine Möglichkeit
fimden, das Löschen wirklich erst durchzuführen, wenn auf speichern
geklickt wurde?

Noch ein Hinweis an Georg. Ich weis, Du wirst mich wieder auf Manuals,
Google, die NASA und sonst nochwas verweisen wollen, lass es bitte. Ich
habe weder im Manual noch bei Google etwas dazu gefunden.

mfg

Mathias

Re: header

am 08.09.2006 11:09:46 von dev-null-use-reply-adress

Mathias Fiedler schrieb:

> ich habe immer noch mit meiner csv Datei zu tun. Ist soweit alles fertig.
> Eine Sache wäre noch interessant, wegen der "Schönheit". Wenn ich per
>
> header("Content-type: text/csv");
> header("Content-Disposition: attachment; filename=$csvName");
> header("Content-Length: $len");
> print($csvChange);
>
> die csv Datei ausgebe, ist die gesamte Arbeit vorbei. Die temporären
> Dateien und Tabellen die ich hatte, brauche ich nun nicht mehr. Deshalb
> möchte ich diese vom Server löschen. Kein Problem, solange ich es vor der
> Header Änderung mache. Dann ist aber auch alle sweg, wenn der user im
> Downloaddialog für die CSV Datei auf Abbrechen klickt.
> Kann ich ieses Dialog irgendwie abfragen, oder zumindest eine Möglichkeit
> fimden, das Löschen wirklich erst durchzuführen, wenn auf speichern
> geklickt wurde?

Vielleicht hilft:
Kapitel 40. Verbindungssteuerung
http://de.php.net/manual/de/features.connection-handling.php

> Noch ein Hinweis an Georg. Ich weis, Du wirst mich wieder auf Manuals,
> Google, die NASA und sonst nochwas verweisen wollen, lass es bitte. Ich
> habe weder im Manual noch bei Google etwas dazu gefunden.

Das hättest Du dir sparen können. Ich bin überzeugt davon, daß mit so
einer Erwartungs- bzw. Verweigerungshaltung einige ziemlich verärgerst und
sicher weniger Antworten erhälst. Wenn man dann noch Deinen letzten Thread
aus der MySQL-Gruppe kennt ...


Gruß
JPM

Re: header

am 08.09.2006 11:59:45 von letters

Am Fri, 08 Sep 2006 11:09:46 +0200 schrieb Jens Peter Moeller:

> http://de.php.net/manual/de/features.connection-handling.php

Halt leider nicht geholfen. Darüber stand nichts darin.
Es steht nur beschrieben, das nach dem senden dann Schluß ist. Meist mit
exit;
Ich möchte aber danch einen Link anbieten, der vorher nicht da war. Also
brauche ich irgeneine Rückmeldung. Darüber stand aber wie gesagt nichts im
Manual.

Mathias

Re: header

am 08.09.2006 12:06:52 von letters

Am Fri, 08 Sep 2006 11:09:46 +0200 schrieb Jens Peter Moeller:

> Das hättest Du dir sparen können. Ich bin überzeugt davon, daß mit so
> einer Erwartungs- bzw. Verweigerungshaltung einige ziemlich verärgerst und
> sicher weniger Antworten erhälst. Wenn man dann noch Deinen letzten Thread
> aus der MySQL-Gruppe kennt ...

Naja, Erwartungshaltung ist denke ich mal schon ok. Schließlich wende ich
mich ja nicht deshalb an die NG weil ich gerade nichts anderes zu tun habe.
Was nun die Verweigerung anbelangt, spare ich damit einfach nur zukünftigen
Traffic, der sich mit Themen beschäftigt, die keinen Bezug zur Frage haben.
Wir waren bei einem anderen Threed schon bis ins philosophische
abgewandert, ohne jedweden Bezug zur eigentlichen Frage. Das möchte ich
damit vermeiden. Ich sehe die NG nicht als Tummelbecken von Experten und
Genies, die keinen ohne gleichwertiges Wissen jemals akzeptieren, sondern
auch als Hilfestellung für diejenigen, die eben noch nicht so genial sind.
Bitte mich zu berichtigen, falls das falsch sein sollte. 100erte pauschale
Hinweise auf Manuals, google oder andere Sachen sind da eben keine Hilfe.
Das manual ist gross, manchmal weis man gar nicht, wo man suchen soll. Da
wäre dann schon diese Angabe hilfreich. Aber es kommt ja meist noch nicht
einmal das. Nichts für ungut, Dein Hinweis war ok. Auch wenn damit meine
Frage nicht beantwortet werden konnte.

Mathias

Re: header

am 08.09.2006 12:13:48 von dev-null-use-reply-adress

Mathias Fiedler schrieb:
> Am Fri, 08 Sep 2006 11:09:46 +0200 schrieb Jens Peter Moeller:
>
>> http://de.php.net/manual/de/features.connection-handling.php
>
> Halt leider nicht geholfen. Darüber stand nichts darin.
> Es steht nur beschrieben, das nach dem senden dann Schluß ist. Meist mit
> exit;

Du wolltest etwas löschen, aber nur wenn der Benutzer die Daten komplett
runtergeladen hat. Und genau das leistet möglicherweise die
Verbindungsteuerung mit der shutdown function, in der Du dann bei
entsprechendem Status den Löschvorgang ausführt. Ich schreibe jetzt
"möglicherweise", weil ich es nicht genau weiß bzw. damit noch nie
gearbeitet habe und so einer Steuerung beim HTTP-Protokoll
erstmal misstraue.
Wenn Du hier jetzt wieder eine fertige, funktionierende Lösung von
uns erwartest, kannst Du vermutlich lange warten.
Alternativ beschäftige Dich mit dem Thema und probiere es einfach aus.
So schwer dürfte das nicht sein.

> Ich möchte aber danch einen Link anbieten, der vorher nicht da war. Also
> brauche ich irgeneine Rückmeldung. Darüber stand aber wie gesagt nichts im
> Manual.

Von einem Link schriebst Du in Deiner ersten Frage nichts.
Und die Rückmeldung ist eben vielleicht dieser Verbindungsstatus.


Gruß
JPM

Re: header

am 08.09.2006 12:27:56 von letters

Am Fri, 08 Sep 2006 12:13:48 +0200 schrieb Jens Peter Moeller:

> Wenn Du hier jetzt wieder eine fertige, funktionierende Lösung von
> uns erwartest, kannst Du vermutlich lange warten.

Wann hab ich das schon mal? Mir reicht schon ein Tipp zu.
Das ich irgendwelche fertigen Sachen will, wird mir unterstellt. Gesagt
habe ich das nie.

Mathias

Re: header

am 08.09.2006 12:33:33 von letters

Am Fri, 08 Sep 2006 12:13:48 +0200 schrieb Jens Peter Moeller:

> Von einem Link schriebst Du in Deiner ersten Frage nichts.
> Und die Rückmeldung ist eben vielleicht dieser Verbindungsstatus.

Aber eben leider nur, wenn der User das Script beendet, zB. mit dem Stopp
Button des Browsers. Mein Script ist nur eben einfach abgearbeitet. Das
Problem ist, es hört dann an der Stelle einfach auf. Mit einem Klick auf
einen Button des Downloaddialoges ist halt schluß. Alles, was danach kommt,
wird nicht mehr beachtet. Da der Abbruch aber nicht vom User verusacht
wird, kann ich nicht darauf reagieren. Wenn es einer besser weis, kann er
mir das gern sagen.

Mathias

Re: header

am 08.09.2006 13:35:10 von Sven Drieling

Mathias Fiedler wrote:

Hallo,

> Aber eben leider nur, wenn der User das Script beendet, zB. mit dem S=
topp
> Button des Browsers. Mein Script ist nur eben einfach abgearbeitet. D=
as
> Problem ist, es hört dann an der Stelle einfach auf.

Mit ignore_user_abort() lässt sich das verhindern.


tschuess
[|8:)

Re: header

am 08.09.2006 13:49:59 von dev-null-use-reply-adress

Mathias Fiedler schrieb:
> Am Fri, 08 Sep 2006 12:13:48 +0200 schrieb Jens Peter Moeller:
>
>> Von einem Link schriebst Du in Deiner ersten Frage nichts.
>> Und die Rückmeldung ist eben vielleicht dieser Verbindungsstatus.
>
> Aber eben leider nur, wenn der User das Script beendet, zB. mit dem Stopp
> Button des Browsers. Mein Script ist nur eben einfach abgearbeitet. Das
> Problem ist, es hört dann an der Stelle einfach auf. Mit einem Klick auf
> einen Button des Downloaddialoges ist halt schluß. Alles, was danach kommt,
> wird nicht mehr beachtet. Da der Abbruch aber nicht vom User verusacht
> wird, kann ich nicht darauf reagieren.

Mensch, nun lies Dir das doch alles nochmal durch und schaue auch
mal in die user contributed notes.
Ich verstehe das nämlich ein wenig anders. Vielversprechend wäre
vielleicht etwas mit

while (!connection_aborted())

und am Ende ein

if (connection_status() == 0)


Setzt doch nicht gleich die Scheuklappen auf. *meinjanur*
Schreibe ein Testscript, spiele mit den Funktionen und probiere es aus.


Gruß
JPM

Re: header

am 08.09.2006 16:07:48 von letters

Am Fri, 08 Sep 2006 13:35:10 +0200 schrieb Sven Drieling:

> Mathias Fiedler wrote:
>
> Hallo,
>
>> Aber eben leider nur, wenn der User das Script beendet, zB. mit dem Stopp
>> Button des Browsers. Mein Script ist nur eben einfach abgearbeitet. Das
>> Problem ist, es hört dann an der Stelle einfach auf.
>
> Mit ignore_user_abort() lässt sich das verhindern.
>
Leider eben nicht.

Mein Script:

if(isset($_REQUEST['down'])){$down = $_REQUEST['down'];
if($down == "Download CSV-Datei")
{
.....
Zusammenbau der CSV Date
.......................................

$csvChange = $csvChange.$csvChange_temp."\r\n";
}

$len = strlen($csvChange);

$csvName = basename($data[7]);

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$csvName");
header("Content-Length: $len");
print($csvChange);


}
}

?>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">






..................
Formular
...............................
?>

/>

Wenn ich den Submit Button klicke, ruft sich das Script selbst wieder auf.
Die obere Abfrage wird ausgeführt und es wird zum Aufbau der CSV Datei
verzweigt.
Nach print($csvChange); ist dann aber Schluß. Der Downloaddialog für die
CSV Datei ist ja die einzige Ausgabe des aufgerufenen Scriptes. Danach wird
abgebrochen und der Browser steht wieder beim Formular von dem der Aufruf
kam. Ich weis nicht, wie ich es anders beschreiben soll. Weder vor nach dem
Ändern des Headers kann man irgendetwas ausgeben. Davor ist klar, sonst
klappt ja die Änderung nicht, aber anchher ist eben auch nichts mehr
möglich. Auch mit ignore_user_abort() läßt isch das nicht verhindern.
Zumindest, wüsste ich nicht wie. Meine Versuche bringen alle keinen Erfolg.
Weder vor nach nach print($csvChange); bringt das irgendeine Änderung.
Auch
while (!connection_aborted())

und am Ende ein

if (connection_status() == 0)

bringt nichts. die if Abfrage müßte ja nach dem print stehen, aber dort
wird bereits alles ignoriert.
Noch jemand eine Idee?

mfg

Mathias

Re: header

am 08.09.2006 16:57:04 von Sven Drieling

Mathias Fiedler wrote:

Hallo,

Du möchtest zunächst den CSV-Download und anschließend im
gleich Rutsch eine HTML-Ausgabe? Das geht nicht*.

> header("Content-type: text/csv");

Damit ist der Inhalt des Dokuments vom Type 'text/csv' -> Downloadialo=
g.
Ein im Browser sichtbares text/html entfällt damit.
=20
> header("Content-Disposition: attachment; filename=3D$csvName");
> header("Content-Length: $len");
> print($csvChange);

Ein angehängtes=20
=20
file_put_contents('/tmp/csv.txt', $csvChange)
=20
sollte dann den passenden Inhalt in der Datei /tmp/csv.txt
wiederspiegeln (fopen(), fputs() bei PHP 4 benutzen, Logging
Funktionen von PHP gingen auch zum Testen) und so zeigen, dass
das Skript weiterläuft.

> ?>
> > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
>

Das Anschließen einer HTML-Ausgabe ist (so*) nicht möglich.
Es gibt nur als einzige Möglichkeit den CSV-Download.
=20
* Im Prinzip gibt es MIME-Multipart Sachen, ob die in der Praxis
und in der Art funktionieren ist eine andere Frage.


tschuess
[|8:)

Re: header

am 10.09.2006 11:55:38 von letters

Am Fri, 08 Sep 2006 16:57:04 +0200 schrieb Sven Drieling:

> Mathias Fiedler wrote:
>
> Hallo,
>
> Du möchtest zunächst den CSV-Download und anschließend im
> gleich Rutsch eine HTML-Ausgabe? Das geht nicht*.
>
>> header("Content-type: text/csv");
>
> Damit ist der Inhalt des Dokuments vom Type 'text/csv' -> Downloadialog.
> Ein im Browser sichtbares text/html entfällt damit.
>
Kannst Du sagen, ob man die Aktion des Downloaddialoges vielleicht mit
einem Javascript abfangen kann? Oder kann man eine session Variable nach
dem Download setzen (Wäre ja keine Ausgabe in dem Sinne)?

Mathias

Re: header

am 11.09.2006 16:28:45 von Sven Drieling

Mathias Fiedler wrote:

Hallo,

> Am Fri, 08 Sep 2006 16:57:04 +0200 schrieb Sven Drieling:
>=20
>> Mathias Fiedler wrote:

>>> header("Content-type: text/csv");
>>=20
>> Damit ist der Inhalt des Dokuments vom Type 'text/csv' -> Downloadi=
alog.
>> Ein im Browser sichtbares text/html entfällt damit.
>> =20
> Kannst Du sagen, ob man die Aktion des Downloaddialoges vielleicht mi=
t
> einem Javascript abfangen kann?

Es müsste möglich sein das HTML-Formular als text/html auszuliefer=
n
und dort in die Seite per Meta-Refresh oder JavaScript-Popup einen
Downloaddialog zu starten. Wie sind die Downloads auf sourceforge.net
gelöst? Umgekehrt verhindern durch ausliefern als text/html oder
text/plain.
=20
> Oder kann man eine session Variable nach
> dem Download setzen (Wäre ja keine Ausgabe in dem Sinne)?

Als Cookie für den Web-Browser? Das ginge nur zu Anfang, weil der
Cookie im Header steht. Als Session-Variable auf dem Server jederzeit
(eventuell ist noch zusätzlich ignore_user_abort() nötig). Ob ein
Download erfolgreich abgeschlossen wurde, inklusive Speichern auf dem
Client-Computer, lässt sich nicht automatisch ermitteln.



Ich glaube aber die eigentliche Frage ist eher, was aus welcher
Motivation gemacht werden soll um etwas bestimmtes zu erreichen
(HTML-Anzeige + Download)? Und ob und wenn wie man dies am besten
umsetzen kann bzw. falls das nicht möglich ist wie die Anwendung
stattdessen aufgebaut sein müsste.


tschuess
[|8:)