| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | ||
| Erfahrener Benutzer Registriert seit: 24.12.2004
Beiträge: 1.814
![]() | Zitat:
header werden mit php erst genau vor dem ersten 'body'-byte geschickt. PHP-Code: mit PHP-Code: es macht also überhaupt keinen sinn, das skript nach einem Location-header _nicht_ zu beenden, es würde den code nur fehlerträchtig machen. logging, debugging etc. sollte vorher stattfinden. der location-header ist damit genau die vorletzte aktion, die du machen solltest. und zum flush() --- hast du die anmerkungen zum output-buffering angeschaut? http://us2.php.net/manual/en/function.header.php grüße axo | |
| | |
| | ||||
| Erfahrener Benutzer Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse: Fortgeschritten ![]() | Zitat:
was aus. Ich denke da an ein System, bei dem bei praktisch jedem Request ein 302er gesendet wird und da könnte man sich den Part danach mit Wartungsarbeiten vollpacken, anstatt dem Benutzer das Gefühl zu geben, eine Seite sei noch nicht fertig geladen, obwohl ja schon alles übertragen wurde (was passiert, wenn du nach einer "normalen" Ausgabe noch weiterrechnest). Zitat:
programmieren, aber wenn das Teil fertig ist, lässt du ja ohnehin keine Fehler auf die Bildschirme der Kunden und potentiellen Angeifer prasseln. Also was soll das? Und was hat diese Einschränkung mit dem Sinn einer slchen Vorgehensweise zu tun? Zitat:
Basti | |||
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 21.05.2008
Beiträge: 9.937
![]() | Zitat:
Das weißt du ja denke ich mal auch, aber wüßt gern was du dann überhaupt vor hast | |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse: Fortgeschritten ![]() | Hi. Okay, ich breite mich mal aus: Ich will keine Aktion vor der Weiteleitung durchführen, sondern danach. In einem System, an dem ich gerade dran bin, gibt es zwei Arten von Requests: Anfragen nach Seiten (page=home) und Befehle, die übergeben werden (cmd=deluser&user=42 bzw. als ID, hinter der eine Callback-Funktion steht). Kommt eine action-Anfrage, so wird die Seite zusammengebaut, in die Session gepackt (unter dem Titel der auszugebenden Seite und vielleicht mit Verfallsdatum) und eine Umleitung auf den entsprechenden Page-Request geschickt. Kommt also ein Page-Request, so wird in der Session geschaut, ob die Seite dort noch aktuell liegt und ausgespuckt. Das hat einfach den Vorteil von einem URI, der auch dem angezeigten Inhalt entspricht, obwohl die Schaltflächen/Links, die mit Callback-Funktionen hinterlegt sind eine Kombination aus Session-ID und der ID des Konkreten Callback-Aufrufs enthält. Und natürlich wird ein zweites Ausführen einer Aktion durch einen Reload verhindert. Beispiel: Benutzer "Admin" möchte einen Benutezr löschen und lässt sich dazu eine Tabelle mit Benutzern anzeigen. Diese Seite "usertable" enthält pro Zeile einen Link "delete". Beim Erstellen dieser Seite wurden im Template diese Links erzeugt, indem eine Methode eines Widget-Objekt mit den Parametern module=usermng, cmd=delete, user=<ID_des_Benutzers > aufgerufen wurde. Diese hat das jeweilige Commando mit einer ID (md5(uniquid())) versehen, in eine Tabelle in die Session gepackt und aus dieser ID und der Session-ID den Link zusammengebacken und zurückgegeben. Klickt also der Besucher nun auf einen sochen "delete"-Link, sieht der Request z.B. so aus: ?cmd=45ab379cd53f14ef2a6bc692cae36f&sid=826abfe0ab fe3428fb3e4ad387ed241 Dieser wird dann also Übersetzt nach Module=User, cmd=delete, user-ID=42. Je nach Ergebnis dieser Anfrage wird dann z.B. entschieden, die Tabelle erneut anzuzeigen (jetzt ohne den gelöschten Benutzer), oder eine Sicherheitsabfrage ('Wirklich löschen?') oder sonstwas anzuzeigen. Die Seite wird zusammengebastelt und unter dem Namen der Seite ('usertable', 'confirm', ...) in die Session gepackt (ggf. noch mit einer ID versehen, falls eine Seite diesen Typs schon in der Tabelle steht). Daraufhin gibt es einen Redirect z.B. nach example.com/confirm oder auch example.com/confirm/2 und durch diesen Request wird die bereits fertige Seite aus der Session ausgespuckt. Und nun wäre es ja denkbar, nach diesem Redirect von dem weiterleitenden Skript noch Jobs erleigen zu lassen, für die man sonst Cronjobs bemühen würde, die jedoch in keiner Verbindung zu der gerade angefragten Aktion/Seite etc. stehen, wie eben z.B. aufzuräumen, Mails rauszuschicken, überarbeitete Dokumentenversionen zu archivieren etc. Eben alles, das weder punktgenau, noch vor dem Erstellen einer Seite erledigt werden muss. Das ist eigentlich alles. Und ich halte es weder für sinnlos, noch für problematisch, denn es unterscheidet sich von einem "gewöhlichen" Cronjob lediglich durch die Ungewissheit des Zeitpunktes der Ausführung und der Gesamtlaufzeit, die diesen Jobs zur Verfügung steht. Beides Punkte, die man natürlich beachten muss. Das einzige Problem, das ich sehe ist die Möglichkeit, dass ein Client mit dem Ausführen des Redirect warten könnte, bis die Anfrage komplett beantwortet wurde, also eben erst nach den "Cronjobs". Das wäre letztlch auszuprobieren. Basti |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] header location | krackmoe | PHP Tipps 2008 | 10 | 30.07.2008 14:41 |
| header informationen senden auf einem server läufts auf dem anderen nicht | tunnel85 | PHP Tipps 2008 | 17 | 23.04.2008 20:12 |
| readfile vs. header location | Adminator | PHP Tipps 2008 | 8 | 11.09.2007 01:11 |
| header (location: ...) | Tigermoon | PHP Tipps 2006 | 4 | 21.04.2006 13:40 |
| Header Location Suchmaschinentauglich? | DonTermi | Beitragsarchiv | 5 | 16.08.2005 12:22 |
| Header Location aus Frame für die ganze Seite laden | Plague | PHP Tipps 2005 | 3 | 22.05.2005 16:06 |
| Downloads: Header mal senden, und mal nicht (???) | PHP Tipps 2005 | 2 | 12.05.2005 00:03 | |
| zu anderer php.seite umlenken (ohne header, location:) | PHP Tipps 2005 | 8 | 06.04.2005 09:42 | |
| header erneut senden | PHP Tipps 2005 | 6 | 05.04.2005 14:55 | |
| [Erledigt] Datei selber nach einer Abfrage senden, header() geht nicht? | PHP Tipps 2005 | 2 | 23.02.2005 05:58 | |
| header (location: $var) | PHP Tipps 2005 | 14 | 19.01.2005 10:37 | |
| header (Location - Problem | PHP Tipps 2004 | 4 | 20.10.2004 02:01 | |
| HTML file an client senden | PHP Tipps 2004 | 4 | 11.09.2004 15:09 | |
| header location | andrew22 | PHP Tipps 2004 | 1 | 07.09.2004 12:13 |
| Header Location funktioniert nicht | PHP Tipps 2004 | 10 | 12.08.2004 17:11 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| php client header, php header location flush, echo, flush and header in php, php daten sofort zum client senden, php header location echo flush, header location flush, php flush header location, header senden und weiterlaufen, ob flush echo header |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.