• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP: Wie sag ich dem Browser, dass nichts mehr kommt, obwohl das Script noch läuft?

K

kutiku

Guest
Hi,
Also nochmal konkreter:
Das Script gibt die Seite aus, und sendet dann noch ein paar Leerzeichen um den Puffer zu leeren. Danach macht das Script noch ein paar Sachen (die etwas dauern).
Der User soll aber nicht denken, dass die Seite noch lädt, weil (beim IE z.B.) dieses komische Zeichen rechts oben noch animiert. Also, für den User soll die Seite jetzt geladen sein. Wie sagt nun PHP dem Browser, dass es das war?
 
Interesannte Frage, aber ich vermute es geht nicht, da php ja nie weiß wann die Ausgabe zuende ist :)

Eigentlich braucht man sowas doch auch nicht, schließlich dauern diese Hintergrundaktionen meist nicht lange (nur in äußersten Fällen kann es mal zu verzögerungen kommen, wenn z.B. zwei lange While-Schleifen ineinander sind :))

Meine (etwas dumme) Lösung wäre wenn du ein Skript hast das nur diese Hintergrund-aktionen ausführt und dann ein Bild ausgibt, so werden die Aktionen unabhängig vom Skript ausgeführt :)
 
Tja, ich bräucht sowas für genau so 'nen Extremfall (sehr Extrem).

Ein Extrascript herzunehmen wäre auch meine Alternativlösung gewesen.
Aber irgendwas muss es ja geben. Schließlich weiß der Browser auch am Ende, dass Ende ist.
 
Aha, und welcher Header ?!?!
Kann ich mir nicht so recht vorstellen, da er ja auch wissen muss wann "schluss" ist :)
 
also mit header gehts net!
hab mal einige versucht!
z.B. header("Connection: close");

musst es halt so machen das dein script sich selber aufruft und dann weiterarbeitet!


cu xxoes
 
Sind das die Grenzen?

Ich dachte immer, man könne mit PHP alles machen, denn irgendwas muss ja an den Browser gesendet werden. Aber scheinbar geht's nicht mit PHP. Ist PHP nicht vollkommen ? :D

Dann nehm ich eben die etwas umständlicherere Alternative.
 
den eigendlichen befehl das keine ausgabe mehr stattfindet sendet ja eigendlich der server nciht php, mann muss diesen befehl aber auch mit php simulieren können!

cu xxoes
 
Ich habe ne lösung gefunden!
zwar sende ich kein verbindungsabruch aber es geht.

was is wenn cih so gemein wie ich bin, die schöne gute lösung für mich behalte *fg* um euch ein bisle auf die folter zu spannen!


cu xxoes
 
Ahhhhhhhh

Sag's halt!
BIIIIIIIIIIIIIIIIIITTTTTTTTTTTTTTTTTTTTTTTTTEEEEEEEEEEEEEEEEEEEEEEE
ich halt's nicht mehr aus. Ich war lang genug auf der Folter
 
bitte überweise auf folgende konto 1million:

blablablabla

thx
dann überweise ich dir die lösung


ach ich weiß das ich heute wieder lustig bin!

ps.: versuchst mal mit <?PHP exit;?> damit wird die verarbeitung abgebrochen und dann?
 
Zuletzt bearbeitet:
ok dann wollen wir euch nicht mehr auf dei folter spannen aber 1 million könnt ihr mir trotzdem schicken sowas kann ich immer gebrauchen!


<?PHP
ignore_user_abort(1);

// hier kannste dein script reinschreiben




function diese_function_soll_beim_beenden_des_scriptes_gestartet_werden()
{
// was soll hier rein??
// gute frage??
exit; // wie wäre es damit? muss aber nciht rein!!!
}
register_shutdown_function("diese_function_soll_beim_beenden_des_scriptes_gestartet_werden");
exit;
?>


cu xxoes
 
Ist das in Rätsel?

Ich hab einige Varianten ohne Erfolg getestet:

1. direkt nach dem Exit weitere Befehle (mit Dateien) - nix
2. @ignore_user_abort(); @set_time_limit (0); - nix
3. register_shutdown_function() - die funktion gibt trotzdem noch eine Ausgabe.

Also?


PS: Diese Antwort bezieht sich auf deine vorige...ich werd's jetzt mal testen
 
Zuletzt bearbeitet:
hmmm...

Ich hab jetzt Testweise mal das gemacht:

test1<?PHP
ignore_user_abort(1);

// hier kannste dein script reinschreiben




function diese_function_soll_beim_beenden_des_scriptes_gestartet_werden()
{
for ($i=0;$i<500000;$i++);
echo "test3";
exit; // wie wäre es damit? muss aber nciht rein!!!
}
register_shutdown_function("diese_function_soll_beim_beenden_des_scriptes_gestartet_werden");
echo str_repeat(" ",8*32);
flush();
exit;
?>test2

In meinem PHP kommt nicht das erwünschte Ergebnis. D.h. test3 wird nach der Schleife ausgegeben, und natürlich ist die Verbindung da.
 
also nochmal!!

<?PHP
ignore_user_abort(1);
register_shutdown_function("bei_connection_close");
function bei_connection_close()
{
//hier schreibst du rein was passieren soll wenn das script machen soll wenn du verbindung zum clienten beeendet ist!
for ($i=0;$i<500000;$i++);
echo "hier kommt keinen ausgabe da der client net mehr verbunden ist!";
exit; // wie wäre es damit? muss aber nciht rein!!!
}


//hier kommt das hin was passieren soll wären der client noch verbunden ist!
echo "Hier kommt einer ausgabe";

exit; // hier wird der client vom server getrennt jetzt wird automatisch die function bei_connection_close() gestartet das script läuft also weiter!
?>
 
vielleicht liegt's am PHP oder an der PHP.ini

Aber das vorige Script war vom Prinzip her dasselbe, und bei mir kam eben in der Shutdown Funktion die Ausgabe. Ich weiß, es sollte keine kommen. Ich hab's in meinem PHP-Manual auch gelesen.
 
muss wohl, wenn das script nciht geht?
ich habe es allerdings nur auf meinem homeserver getestet:
apache php4


cu xxoes
 
Wenn du die Länge der endgültigen Ausgabe in Bytes weisst kannst du es mal mit
header ("Content-lengh=33333")
versuchen, sollte glaub ich gehen, dann wird nach 33333 Bytes die Verbindung abgebrochen
 
Zurück
Oben