PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : http verbindung schließen



msi
03-12-2006, 13:42
Hallo,

ich suche eine Möglichkeit um die Ausgabe zum Browser zu beenden.
(Also konkret die TCP Verbindung zu schließen)
Das PHP Script soll allerdings noch weiterlaufen.

Jemand ne Idee?

Gruß Markus

Romanday
03-12-2006, 16:37
Hallo,

ich suche eine Möglichkeit um die Ausgabe zum Browser zu beenden.
(Also konkret die TCP Verbindung zu schließen)
Das PHP Script soll allerdings noch weiterlaufen.

Jemand ne Idee?

Gruß Markus

fclose( $ilu );

msi
07-12-2006, 18:50
fclose( $ilu );

was soll denn $ilu sein. Bei mir geht das jedenfalls nicht $ilu kennt er nicht.
bist du sicher, dass PHP die Verbindung zum Webbrowser auch in so einer
Stream Ressource ablegt, die man mit fclose schließen kann? Gefunden habe ich dazu jedenfalls nichts :(

Romanday
07-12-2006, 18:55
was soll denn $ilu sein.:(

Iluminaten:D

Ne, dein Filepointer. Kannst auch $pumpe schreiben.
Den Namen kanst Du dir selber aussuchen.

fopen() binds a named resource, specified by filename, to a stream. If filename is of the form "scheme://...", it is assumed to be a URL and PHP will search for a protocol handler (also known as a wrapper) for that scheme. If no wrappers for that protocol are registered, PHP will emit a notice to help you track potential problems in your script and then continue as though filename specifies a regular file.

http://www.php.net/manual/en/function.fopen.php

msi
08-12-2006, 12:50
Iluminaten:D

Ne, dein Filepointer. Kannst auch $pumpe schreiben.
Den Namen kanst Du dir selber aussuchen.

fopen() binds a named resource, specified by filename, to a stream. If filename is of the form "scheme://...", it is assumed to be a URL and PHP will search for a protocol handler (also known as a wrapper) for that scheme. If no wrappers for that protocol are registered, PHP will emit a notice to help you track potential problems in your script and then continue as though filename specifies a regular file.

http://www.php.net/manual/en/function.fopen.php

das Problem ist halt, dass ich keinen Filepointer für die HTTP Verbindung habe.
Die macht ja nicht PHP auf, sondern der Browser zu dem Webserver. Der Webserver führt dann PHP aus und schließt die Verbindung wenn das PHP Script sich beendet.

Ich suche nun eben eine Möglichkeit diese Verbindung zu schließen OHNE dabei das PHP Script zu beenden.

Romanday
08-12-2006, 23:15
Ich suche nun eben eine Möglichkeit diese Verbindung zu schließen OHNE dabei das PHP Script zu beenden.

Verstehe zwar nicht den Sinn wozu man so braucht? Aber gut.
Das passiert normalerweise alles automatisch.

Du kannst ja mal den bisheriges Script posten.
Ansonsten mußt du die Seite per Script per PHP anfordern, dann
kannst Du auch an jeder beliebigen Stelle deine Anforderung schließen.

Sprich du mußt dir deinen eigenen Header Schreiben.
Dann gibt auch bestimmt irgendeine close o. ä. Anweisung, mit der Du die
Verbindung schließen kannst. Mußt dir mal das HTTP Protokoll anschauen.

(In Perl, Python ist da viel mehr Zeck, Meck. Das ist doch gerade
das Schöne das du dich in PHP um solche Dinge nicht kümmern mußt.?)

Turbohummel
09-12-2006, 09:03
Vielleicht hilft dir der http-header content-lenght?
Wenn du den inhalt nur vorzeitig ausgeben willst, hilft dir auch ein @ob_flush(). Der Inhalt wird dann schon an den Client gesendet, während das script noch läuft. Allerdings: Der Ladebalken im Browser wird angezeigt, bis das Script vollständig durch ist.

Romanday
09-12-2006, 09:21
Vielleicht hilft dir der http-header content-lenght?


Dann muß er ja vorher wissen, wieviel er haben will.

Msi soll mal ein Beispiel nennen, wozu man soetwas braucht!
Gibt bestimmt eine Lösung, ohne das man in die Übertragung
der Daten eingreifen muß.

Auf TCP Ebene müßte man die Sitzung per Packet beenden.
Meines Wissens kann PHP solche Pakete nicht versenden.

msi
10-12-2006, 19:06
hallo,

ich habe ein Script, welches sich um den Import von Excel Dateien in eine Datenbank kümmert (PHP Script).

Damit die Anwender allerdings auch mehrere Dateien gleichzeitig importieren
können, benutze ich das JUpload Formular, dort kann man mehrere Dateien
auswählen. Wenn man absenden klickt, wird Datei für Datei (nacheinander) an das PHP Script geschickt (hochgeladne). Der JUpload wartet jedoch, bis
die Verbindung vom Upload geschlossen wird und macht erst danach weiter.

Da jedoch der Import länger dauert (es müssen noch aufwändige Überprüfungen durchgeführt werden), möchte ich, dass der JUpload
nicht wartet, bis der Import fertig ist, sondern jede Datei gleich hochläd.

Da ich kein Java beherrsche, und JUpload nicht umschreiben kann, bleibt mir
nur diese Möglichkeit.

Romanday
10-12-2006, 21:19
Da jedoch der Import länger dauert (es müssen noch aufwändige Überprüfungen durchgeführt werden), möchte ich, dass der JUpload
nicht wartet, bis der Import fertig ist, sondern jede Datei gleich hochläd.


Schwups da haben wir es doch. Das kann doch nicht funktionieren.
A) Der Upload und Import ist abhängig von der Größe der Datei,
Geschwindigkeit der Datenübertragung des Client + Einstellungen
in der php.ini.
Die größten Probleme treten auf wenn die Datei zu groß ist, und die
Upload Geschwindigkeit de clients zu klein ist.

Vorschlag: Verabschiede dich von deiner Idee.

Mach ein vernünftiges
Formular und verständlichen Fehlermeldungen. Wenn der Client
mehrere Files hochladen soll, halte die noch Files welche noch hochzuladen
sind in einer Session vorätig. Hat der erste Upload funktioniert,
folgt der nächste usw. Ob alle Clients dabei mitspielen weiß ich nicht.
Zur Sicherheit ein Logfile für die Aktion mitlaufen laufen, um zu wissen
wo es wiederhohlt zu Abbrüchen oder Problemen kam.

Viel Glück

msi
11-12-2006, 01:15
Schwups da haben wir es doch. Das kann doch nicht funktionieren.
A) Der Upload und Import ist abhängig von der Größe der Datei,
Geschwindigkeit der Datenübertragung des Client + Einstellungen
in der php.ini.
Die größten Probleme treten auf wenn die Datei zu groß ist, und die
Upload Geschwindigkeit de clients zu klein ist.

Vorschlag: Verabschiede dich von deiner Idee.

Mach ein vernünftiges
Formular und verständlichen Fehlermeldungen. Wenn der Client
mehrere Files hochladen soll, halte die noch Files welche noch hochzuladen
sind in einer Session vorätig. Hat der erste Upload funktioniert,
folgt der nächste usw. Ob alle Clients dabei mitspielen weiß ich nicht.
Zur Sicherheit ein Logfile für die Aktion mitlaufen laufen, um zu wissen
wo es wiederhohlt zu Abbrüchen oder Problemen kam.

Viel Glück

was soll da nicht funktionieren?
im moment läufts halt so, dass der jupload die dateien nacheinander hochläd.
nach jedem upload wartet er dann eben bis der import vollständig ist (da steht dann nur dran warte auf serverantwort). Erst wenn das PHP Script fertig ist, wird die nächste Datei hochgeladen.

Das ganze funktioniert wunderbar, nur möchte ich halt, dass der JUpload nicht wartet bis der ganze import fertig ist, sondern gleich die nächste datei uploaded wenn die 1. oben ist. Dazu muss PHP die Verbindung schließen.

die php.ini hab ich natürlich so angepasst, dass alle unsere XLS Dateien genommen werden. Auch die Geschwindigkeit des Uploads ist kein Flaschenhals, geschieht ja meistens im LAN. Nur die Überprüfungen sind
halt ads Problem. Natürlich wird alles mitgeloggt, so dass die User sehen können, wenn Fehler aufgetreten sind, aber darum gehts hier nicht.



Nachtrag:
das PHP Script wird erst ausgeführt, wenn der Upload komplett ist. Deswegen kann das PHP Problem ohne Probleme gleich die Verbindung schließen (Datei ist ja da).

Turbohummel
11-12-2006, 08:03
Ich würde hier das Problem bei JUpload suchen. Sprich: Starte den Upload des 2. Scripts, wenn die erste File übertragen ist.

Schreibe die Datei komplett in eine Datenbank.
Ein Cron führt dannregelmäßig die Prüfungen durch und schreibt deine Daten.

msi
11-12-2006, 13:29
Ich würde hier das Problem bei JUpload suchen. Sprich: Starte den Upload des 2. Scripts, wenn die erste File übertragen ist.

Schreibe die Datei komplett in eine Datenbank.
Ein Cron führt dannregelmäßig die Prüfungen durch und schreibt deine Daten.

wie bereits geschrieben will ich den JUpload nicht ändern, da ich kein Java beherrsche.
Und nein die Überprüfung wird direkt durchgeführt, durch das PHP Script, welches es scho gibt, eben weil es auch Einzelimporte gibt. So dass die Nutzer dann gleich ihre Fehlermeldung kriegen.