Portal > Foren > PHP > PHP-Programmierung > Globals beim __wakeup() nicht verfügbar ?
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 02.01.2006, 19:41 Nach oben    #1
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard Globals beim __wakeup() nicht verfügbar ?

Hallo,
kurze Frage:
Kann es sein, dass Inhalte von globalen Variablen beim Aufruf von __wakeup() noch nicht verfügbar sind?
Grüße,
Jojo
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2006, 19:52 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Hast du mal ein lauffähiges Beispielscript, mit dem man das Problem nachvollziehen kann?
Danke.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2006, 20:04 Nach oben    #3
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

ok. momp, sollte so funktionieren:
PHP-Code:
<?
session_start();
class Foobar {
  private $foo;
  public function __wakeup() {
    global $bar;
    $this->foo = $bar;
  }
  public function init() {
    echo $this->foo;
  }
}
global $bar;
$bar = "Foobar";
try {
  $foobar = (is_object($_SESSION['foobar'])) ? $_SESSION['foobar'] : new Foobar();
  $foobar->init();
  $_SESSION['foobar'] = $foobar;
}
catch (Exception $e) {
}
?>
sollte so aus'm Stand funktionieren....
Grüße,
Jojo
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2006, 20:12 Nach oben    #4
JaGeK
Gast
 
Beiträge: n/a
Standard

Und was genau funktioniert hier nun nicht??

PHP-Code:
$bar 'blub';
$obj unserialize(serialize(new Foobar));
echo 
$obj->init(); 
blub
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2006, 20:21 Nach oben    #5
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

Ja wunderschön machst du das mit unserialize, etc.!
Aber was passiert beim _reloaden_ bei meinem Beispiel?!
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2006, 20:49 Nach oben    #6
JaGeK
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Jojo
Ja wunderschön machst du das mit unserialize, etc.!
Aber was passiert beim _reloaden_ bei meinem Beispiel?!
Ach ja, sorry! Hatte mir das nicht genauer angesehen.

Das Problem liegt hier, denke ich mal, einfach daran, dass die Variable $bar beim Session-Start noch nicht existiert.

Die Zuweisung von $bar also vor session_start() packen und fertig...
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2006, 14:32 Nach oben    #7
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

Isn interessanter Gedanke, klappt leider nicht
Weder wenn ich das globals $bar vor das session_start() stelle als auch, wenn ich zusätzlich die Variable vor dem session_start() fülle
Aber mir is was eingefallen, was dazu passen könnte:
Wenn man irgendwas im wakeup ausgeben will, dann bekommt man die beiden Fehler:
Zitat:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by [...]

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent [...]
Ich schließe mal daraus, dass PHP das intern etwas seltsam regelt und daher so Sachen wie globals erst später zur Verfügung stehen.
Naja,
dann such ich mir halt ne andere Lösung, muscha wohl.
Danke für die Ideen.
Jojo
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2006, 14:35 Nach oben    #8
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.209
Standard

mal versucht deine klassen-deklaration VOR session_start zu setzen ? ich glaub ich erinne mich an was im manual oder den user-contributed notes das sagte, dass nur klassen serialisert und entserialisiert werden können, bzw instanzen davon in sessions gespeichert die VOR dem session_start() bekannt sind.

mfg
robo47
robo47 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2006, 14:40 Nach oben    #9
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

hmm..... leider nein, aber das wäre auch seltsam, weil ja dann wakeup nicht aufgerufen werden dürfte, was es aber ganz offentsichtlich wird.
Außerdem würde dann mein eigentliches Script gar nicht laufen
Ich könnt mir halt einfach denken, dass PHP das sohingehend optimiert, dass die Abfolge "Session-ID holen" - "Objekte unserializen" - "Session-Cookie setzen" -"restlichen Code ausführen" entsteht..
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2006, 17:28 Nach oben    #10
JaGeK
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Jojo
Ich könnt mir halt einfach denken, dass PHP das sohingehend optimiert, dass die Abfolge "Session-ID holen" - "Objekte unserializen" - "Session-Cookie setzen" -"restlichen Code ausführen" entsteht..
So wird das wohl sein, wenn du das session_start() an den Anfang stellst.

Dass dem aber anscheinend nicht immer so ist, zeigen doch Fehlermeldungen à la 'headers already sent' bei Ausgabe vorm Sessionstart.

Zitat:
Zitat von Jojo
Isn interessanter Gedanke, klappt leider nicht
Kann ich jetzt nicht nachvollziehen. Bei mir funktioniert es jedenfalls:
PHP-Code:
<?php
$bar 
"Foobar";

session_start();
class 
Foobar {
  [...]
?>
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2006, 18:45 Nach oben    #11
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

Zitat:
Zitat von JaGeK
Kann ich jetzt nicht nachvollziehen. Bei mir funktioniert es jedenfalls:
Was funktioniert bei dir?
Wird bei dir beim Reload Foobar ausgegeben?
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2006, 23:32 Nach oben    #12
JaGeK
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Jojo
Was funktioniert bei dir?
Wird bei dir beim Reload Foobar ausgegeben?
Jepp!
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.01.2006, 00:19 Nach oben    #13
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Das hier geht eindeutig:
PHP-Code:
<?php

    error_reporting
(E_ALL);

    class 
Foobar {
        
        private 
$foo;
        
        public function 
__wakeup() {
            global 
$bar;
            
$this->foo $bar;
        }
  
        public function 
init() {
            echo 
$this->foo;
        }

    }
    
    
    
$bar "Foobar";
    
    
session_start();

    try {
        
$foobar = (array_key_exists('foobar'$_SESSION) AND is_object($_SESSION['foobar'])) 
                ? 
$_SESSION['foobar'
                : new 
Foobar();
        
        
$foobar->init();

        
$_SESSION['foobar'] = $foobar;
    }
    catch (
Exception $e) {
    }
    
?>
In Aktion:
http://www.developers-guide.net/scri...ads/wakeup.php

Grüße Ben.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.01.2006, 00:49 Nach oben    #14
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

I'm so sorry.
Sorry JaGek für's etwas missgestimmt sein
Ich Volldepp hab vergessen, dass immer noch das Objekt in der Session war.
Deshalb wurde auch nie was ausgegeben, wenn ich reloaded hab ^^
Jetzt - nach dem Löschen des Objekts aus der Session funktionierts, wenn die Globale vor der session_start() gefüllt wird ^^
Naja,
danke nochmals,
Jojo
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Netscape 9 Beta 2 verfügbar Jann Hendrik Nachrichten 0 14.07.2007 15:42
Thunderbird 1.5.0.7 / Firefox 1.5.0.7 verfügbar Ben Nachrichten 0 14.09.2006 17:10
Tomcatinstallation - Beispiele nicht verfügbar, obwohl mitinstalliert Ben Tools, Server, Betriebssysteme 10 14.03.2006 20:26
Thunderbird 1.5 RC2 verfügbar Ben Nachrichten 1 29.12.2005 23:01
PEAR 1.4.5 verfügbar Ben Nachrichten 0 23.11.2005 18:57


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:29 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45