Gibt es in PHP so etwas wie das scope attribut bei JSP?
Moin!
Wie schon im Subject gefragt, gibt es für PHP so etwas wie das Attribut scope bei JSP?
Also wenn ich eine PHP-Seite aufrufe, dass dann einen Instanz gestartet wird und die Instanz für die Dauer eine Session erhalten bleibt, so dass wenn ich ein 2. mal auf die Seite zugreife meine anfrage von der selben Instanz bearbeitet wird wie von der zuvor?
Falls ihr nicht genau wisst was ich meinen, hier mal eine kleine Beschreibung:
http://www.jsptutorial.org/content/beans#innerLink3oder
http://de.wikipedia.org/wiki/JavaServer_Pages dort mal suchen nach: jsp:useBean
MfG
Antwort schreiben
Antwort 1 von son_quatsch vom 31.07.2019, 13:36 Options
Während einer Session, die logischerweise über mehrere Seiten hinweg dieselbe bleibt, steht einem das globale Array $_SESSION zur Verfügung, dem Du ebenfalls alles mögliche anhängen kannst (z.B. weitere Arrays). Kann man zwar nicht als Instanz bezeichnen, eignet sich aber genauso für z.B. Warenkörbe.
Wolltest Du das wissen? Ansonsten schilder ein konkretes Problem / Beispiel :-)
Antwort 2 von Dr.Ma-Busen vom 31.07.2019, 15:16 Options
Ja, sowas wollte ich im grunde wissen.
Aber gibt es auch in PHP sowas wie bei JSP das attribut scope?
Also es PHP-Seite auf und die wird ausgeführt, nach dem abarbeiten und den Senden der Daten an den Browser bleibt die instanz aber erhalt und bei einen erneuten aufruf dieses PHP-Scriptes wird eine Methode/Funktion in der Instanz aufgerufen die dann die Anfrage bearbeitet.
Mal ein Beispiel. In JSP könnte ich einen Chat erstellen der wie folgt funktioniert.
Beim aufruf des Chat wird, wenn noch keinen Instanz der Datei läuft, eine Instanz erstellt. Die bearbeitet die Anfrage von User_A dann. Nach dem die Daten zum Browser gesendet wurden wird die Instanz aber nicht beendet sondern läuft weiter. Ruft jetzt einen andere Person, User_B, den Chat auf, dann wird seine anfrage von der selben Instanz bearbeitet wie von User_A. So bestände die Möglichkeit das ich den gesammten Chattext im speicher des Server halten könnte und müsste ihn nicht in einer Datei oder Datenbank speichern. Neben bei kann die Instanz dann noch weiter aufgaben erledigen z.B. Statistiken erstellen und hätt dann auch die möglichkeit diese Nebenläufigkeiten zu kontrolieren. Wenn der Chat z.B. stark besucht ist kann das erstellen der Statistik auf eis gelegt werden, bis die Userzahl des Chat wieder so weit gesunken ist das die Nebenläufigkeit den eigentlichen Betrieb nicht stören kann.
Ist sowas oder sowas ähnliches in PHP auch möglich?
MfG
Antwort 3 von son_quatsch vom 31.07.2019, 15:57 Options
Also die Gültigkeit einer Variable über die Lebensdauer des aktuellen Skriptes hinaus? Nicht dass ich wüsste... Statische Sachen kannst Du halt alle in besagtes Feld packen, nicht aber ein komplettes Objekt. Bin allerdings nicht sicher, ob nicht PHP5 solche eine Funktionalität mit sich bringt...
Antwort 4 von Dr.Ma-Busen vom 02.08.2019, 14:29 Options
Ok, damit ist meine Frage wohl beantwortet.
Jetzt habe ich aber noch eine kleinen andere frage bzg. Datenbanken.
Ist es möglich einen Datenbankverbindung über eine Session lang zu halten, oder muss jedes mal wenn ich ein PHP-Script aufrufe einen neue Verbindung zur Datenbank aufgebaut werden?
MfG
Antwort 5 von son_quatsch vom 02.08.2019, 15:43 Options
Datenbankverbindungen werden nach meinem Kenntnisstand bei Skriptende grundsätzlich geschlossen - also gilt hier dasselbe. Allerdings habe ich noch nie versucht, eine Datenbankverbindung zu öffnen, das Handle dazu weiterzuverschicken und später darauf zuzugreifen. Ist in meinen Augen auch irgendwo tödlich, denn dann wird eine Verbindung immer nur durch ein Timeout beendet. Das hat gute DoS-Chancen...
Allerdings: worin besteht groß die Notwenigkeit? Wie das PHP resourcenmäßig intern alles regelt weiß ich selber nicht, aber das ganze klappt auf jeden Fall schnell genug.
Antwort 6 von Supermax vom 02.08.2019, 15:59 Options
Die Datenbank-Interfaces von PHP (zumindest für mySQL und PostgreSQL) bieten die Option, "persistent connections" zu öffnen. Dabei wird eine einmal geöffnete Datenbankverbindung beim Scriptende nicht geschlossen, sondern offen gehalten und in einem internen Pool verwaltet und kann vom nächsten Script (oder vom gleichen das erneut aufgerufen wird) wieder verwendet werden.
Das bringt einen kleinen Performancegewinn, weil die Handshakephase zwischen Server und Client, wo u.A. Protokollversion, Verschlüsselung, Zeichencodierung etc. ausgehandelt werden, pro Verbindung nur einmal durchgeführt werden muß.
Antwort 7 von Dr.Ma-Busen vom 02.08.2019, 16:30 Options
Ok, ich glaube da sind meinen Fragen vorerst beantwortet.
MfG
--
PS: Falls ihr euch fragt warum ich hier sollche netten Fargen stelle: Ich bin nur auf der such nach ein paar argumenten, falls mich der Dozent fragt, warum ich meine Projekt in JSP geschrieben habe und nicht in PHP. :)
Antwort 8 von son_quatsch vom 02.08.2019, 19:36 Options
Verräter ;-)
Aber Chats über den Browser finde ich sowieso am Thema vorbei. Jetzt interessiert mich höchstens, inwieweit Perl sich solche Ansprüche realisieren lassen...