Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

serialize und unserialize mit privaten variablen

Diskussion: serialize und unserialize mit privaten variablen im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige heyho hab mal folgendes codebeispiel was mich im umgang mit objekten verwirrt: PHP-Code: <?php           class  test  { ...

Antwort
Alt 22.10.08, 10:28   #1 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard serialize und unserialize mit privaten variablen

Anzeige

heyho

hab mal folgendes codebeispiel was mich im umgang mit objekten verwirrt:

PHP-Code:
<?php
    
    
class test {
        private 
$person;
        
        function 
__construct() {
            
$this->person "hallo";
            echo 
"hello world \n";
        }
        
        function 
get() {
            echo 
$this->person;
        }
    }
    
    
$obj = new test();
    
$str serialize($obj);  //person ist gesetzt durch den constructor
    
unset($obj);
    
    
$obj unserialize('O:4:"test":1:{s:12:" test person";s:5:"hallo";}'); // $str einfach per echo ausgegeben und eingefügt
    
$obj->get();    // ausgabe von $this->person gibt nichts zurück
    
    
unset($obj);
    
    
$obj unserialize($str);
    
$obj->get(); // ausgabe von $this->person gibt "hallo" zurück
    
unset($obj);
    
?>
wieso gibt das gleiche serialisierte objekt als copy n paste (oder zb aus einer datenbank) nicht "hallo" aus, das gleiche aus der variable aber schon?
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 22.10.08, 11:28   #2 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Serialize() erzeugt auch nicht-Ascii Zeichen.
In deinem Beispiel wäre der Tatsächlich erzeugte String (^@ symbolisiert hier ein Null-Byte, also 0x00):

O:4:"test":1:{s:12:"^@test^@person";s:5:"hallo";}

Wenn du diese unsichtbaren Null-Bytes beim Kopieren nicht mitnimmst oder durch andere Zeichen (Space?) ersetzt, kann unserialize() die Klasse nicht korrekt wiederherstellen und du bekommst nur "null" zurück (zumindest war das bei mir so).
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 22.10.08, 11:48   #3 (permalink)
Member of Honour
Themenstarter
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

Ah alles klar
Wie ist das dann bei sql?sollt ich da den String mit hex() vorher um wandeln?
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 22.10.08, 12:03   #4 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Hm, ich weiss nicht, wie gut MySQL mit diesen Steuerzeichen umgehen kann. Besonders wenn dann noch evtl. verschiedene Zeichensätze mit in's Spiel kommen.
Auf der sicheren Seite wärst du auf jeden Fall, wenn du den Serial-String in reine ASCII-Zeichen umwandelst. Ob du das mit hexadezimalen Zeichen, Base64 oder urlencode machst, ist eigentlich egal.
Ich denke, mit Base64 bist du am besten dran; das hat nur 33% Größenzuwachs und erzeugt reines ASCII.

mfg, metax.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
Alt 22.10.08, 12:08   #5 (permalink)
Member of Honour
Themenstarter
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

gute Idee ; danke für den Tipp
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 22.10.08, 13:00   #6 (permalink)
Senior Member
 
Registriert seit: 03.09.05
Lesco Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von metax.
Serialize() erzeugt auch nicht-Ascii Zeichen.
Kleine Korrektur: Diese Zeichen(Nullbyte, etc.) sind auch Ascii-Zeichen, bloß eben keine Darstellbaren.
Lesco ist offline   Mit Zitat antworten
Alt 22.10.08, 14:00   #7 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

sollten sich in dem Objekt wirklich auch binäre Daten befinden, dann beschäftige dich mal mit dem MySQL-Datentyp "BLOB"...
beavisbee ist offline   Mit Zitat antworten
Alt 22.10.08, 14:05   #8 (permalink)
Member of Honour
Themenstarter
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

Zitat:
Original von beavisbee
sollten sich in dem Objekt wirklich auch binäre Daten befinden, dann beschäftige dich mal mit dem MySQL-Datentyp "BLOB"...
das ist glaube nicht notwenig, weil ich die objekte mit wenigen aber komplexen abfragen aus ner db fütter, damit hätte ich nen feines cachingsystem.
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » serialize und unserialize mit privaten variablen
Themen-Optionen
Ansicht

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Gericht erklärt Nutzung eines privaten, offenen WLAN zur Straftat Elderan News & Ankündigungen 22 24.05.08 12:27
Mail-Server + Domain bzw. Frage zum privaten Mailserver. R!K3R Internet Allgemein 4 27.11.07 22:43
Kleine TS2 Server für Privaten Gebrauch GodLike Off topic-Zone 4 18.06.07 18:09
privaten PGP Schlüssel extrahieren? ghostdog Mac OS & Co. 1 04.06.06 20:01
Variablen in C Dawen Code Kitchen 2 28.10.05 23:56


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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61