Anzeige

unserialize(): Notice abfangen und zustellen ...

unserialize(): Notice abfangen und zustellen ... | PSD-Tutorials.de

Erstellt von Curanai, 06.05.2013.

  1. Curanai

    Curanai Aktives Mitglied

    Dabei seit:
    20.08.2011
    Beiträge:
    390
    Geschlecht:
    männlich
    Ort:
    Oldenburg
    Software:
    Notepad++, Brackets, HeidiSQL, CC, FL Studio, SEO PowerSuite (auch BuzzBundle), Rocksmith :D
    Kameratyp:
    Samsung S7 Edge :D
    unserialize(): Notice abfangen und zustellen ...
    Hallo PSD'ler und PHP-Gurus darin,

    ich verwende serialize() auf einem utf-8 Textfeld in einer Datenbank (um ein Array dort abzulegen). Ja, mir ist die Problematik in Bezug auf "multibyte" und das später erforderliche unserialize() bekannt und dafür habe ich eine simple, aber super effektive, Maßnahme ergriffen.

    Gestern bekam ich erstmals eine Notice in meiner Entwicklungsumgebung: "Error at offset 330 of 745 bytes" - auf Zeile 760.

    Dort steckt mein mb_unserialize() (eigene Funktion für "multibyte") - aber die ist nicht falsch, verändert o. ä. Diese wird projektweit verwendet und läuft 1A.

    Also ist im offset 330 was "komisch", wo die Funktion wohl stolpert - so, jetzt die Gretchenfrage: ...

    Ich finde im Netz Tonnen zu "undefined offset", aber wie kann ich stilvoll meine Funktion dahingehend erweitern, dass mir im Falle eines solchen erneuten Auftretens (kommt nämlich nicht immer) der String, welcher da unserialise()'d werden soll, zugeschickt wird?

    Ich dachte an ein try-catch-Gebilde, will aber nicht unnötig "Perlen (Performance) vor die Säue" werfen, da diese eigene Funktion stark frequentiert wird (Einschränkung auf Entwicklungsumgebung natürlich möglich).

    In den üblichen Logs steht die gleiche Meldung nur nochmals ... leider nicht so umfangreich wie gewünscht.

    Gäbe es noch eine andere Möglichkeit oder ist es viel einfacher??

    Denn: Den "String" brauche ich deshalb, da dort Wort- und Satzgeflechte zusammengesetzt werden - im Baukastenstil. Sehe ich den String, weiß ich, wo ich in den 25.000 Zeilen suchen bzw. ansetzen muss. Das Array ist also nicht das Problem, sondern der Value dahinter (ich tippe auf was Unmaskiertes, aber die Content-Geflechte sind alle richtig [da schon geprüft]) ...

    Vielen Dank für alle Denkanstöße.
     
    #1      
  2. Duddle

    Duddle Posting-Frequenz: 14µHz

    Dabei seit:
    03.02.2006
    Beiträge:
    3.864
    Geschlecht:
    männlich
    Ort:
    Dresden
    unserialize(): Notice abfangen und zustellen ...
    AW: unserialize(): Notice abfangen und zustellen ...

    Eine simple Messung zeigt:

    Die Ergebnisse der Messung kann ich bestätigen. Solange keine Exceptions geworfen werden, leidet die Performance nicht.


    Duddle
     
    #2      
  3. Curanai

    Curanai Aktives Mitglied

    Dabei seit:
    20.08.2011
    Beiträge:
    390
    Geschlecht:
    männlich
    Ort:
    Oldenburg
    Software:
    Notepad++, Brackets, HeidiSQL, CC, FL Studio, SEO PowerSuite (auch BuzzBundle), Rocksmith :D
    Kameratyp:
    Samsung S7 Edge :D
    unserialize(): Notice abfangen und zustellen ...
    AW: unserialize(): Notice abfangen und zustellen ...

    Okay, das mildert meine Bedenken - danke Dir, Duddle ... werde dann gleich einem Prototypen Leben einhauchen.
     
    #3      
  4. tr4ze

    tr4ze Mod | Forum Teammitglied PSD Beta Team

    422
    Dabei seit:
    02.09.2006
    Beiträge:
    2.038
    Geschlecht:
    männlich
    Ort:
    Nordhorn
    Software:
    CS6, Intuos
    unserialize(): Notice abfangen und zustellen ...
    AW: unserialize(): Notice abfangen und zustellen ...

    Ich kenne deine Funktion nicht aber vielleicht hilft dir das:

    http://davidwalsh.name/php-serialize-unserialize-issues
     
    #4      
  5. Curanai

    Curanai Aktives Mitglied

    Dabei seit:
    20.08.2011
    Beiträge:
    390
    Geschlecht:
    männlich
    Ort:
    Oldenburg
    Software:
    Notepad++, Brackets, HeidiSQL, CC, FL Studio, SEO PowerSuite (auch BuzzBundle), Rocksmith :D
    Kameratyp:
    Samsung S7 Edge :D
    unserialize(): Notice abfangen und zustellen ...
    AW: unserialize(): Notice abfangen und zustellen ...

    Nein, vielen Dank - um die Funktion geht es nicht, nur um das, was die Funktion bei "Notice" gerade bearbeitet, damit ich das besser lokalisieren kann - thx anyway.
     
    #5      
  6. Curanai

    Curanai Aktives Mitglied

    Dabei seit:
    20.08.2011
    Beiträge:
    390
    Geschlecht:
    männlich
    Ort:
    Oldenburg
    Software:
    Notepad++, Brackets, HeidiSQL, CC, FL Studio, SEO PowerSuite (auch BuzzBundle), Rocksmith :D
    Kameratyp:
    Samsung S7 Edge :D
    unserialize(): Notice abfangen und zustellen ...
    AW: unserialize(): Notice abfangen und zustellen ...

    Schnell noch nachgereicht - quasi der Vollständigkeithalber:

    Das besagte Verhalten wurde nicht immer produziert. Beteiligt war hierbei aber immer Content aus der Datenbank - und in Verbindung mit serialize/unserialize ist es bei utf-8 bekannt anfällig.

    Meine Lösung:
    - Speichern der Daten mittels base64_encode( serialize($array) );
    - Herstellen des Arrays mit unserialize( base64_decode($feld_aus_db) );

    Danach war ohne weitere Änderungen alles wieder gewohnt stabil.

    Interessant war einzig, dass eigentlich darin nichts verwendet wurde, was jetzt enorm mit utf-8 zu tun hatte ... es waren eigentlich nur Zahlen und Kurzstrings (bspw. "p[Nummer]").

    Grüße vom Kaffeebecherrand.
     
    #6      
x
×
×