unserialize() Error at offset… Einige Ansätze

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

Kommentare

  
  1. Ralf sagt:

    Einfache Fehlerunterdrückung hilft: https://gist.github.com/1427236

    unserialize() bricht ja nicht den Programmfluss ab, von daher verstehe ich nicht wieso man über so was stolpern kann. Entweder die Daten sind deserialisierbar oder nicht. Die allereinfachste Methode ist also $is_serialized = (bool) @unserialize( $object );

    • @Ralf: hilft aber leider nicht in allen Fällen, man stößt massiv auf php Notices; die sind nicht weiter problematisch im live-betrieb, da das @ und die error-settings es unterdrücken. Die obige Lösung war mein erster Ansatz.

  2. Ralf sagt:

    Das Problem bei den oben genannten Lösungsansätzen ist, dass die jeweiligen Programmierer festlegen was deserialisierbar ist und was nicht. Ich denke mal das nur PHP entscheiden kann und soll was deserialisierbar ist und was nicht.

    Nehmen wir mal an in PHP5.4 würden Daten in einem ganz anderen Format serialisiert. Entweder man würde zwei verschiedene Versionen programmieren oder man würde mit viel Aufwand die Version ermitteln und dann seinen Code anpassen.

    Der zweite Nachteil ist, man macht mehr Arbeit. Es wird aufwendig geprüft ob es deserialisierbar ist und hat dann immer noch kein Ergebnis. Man muss dann in einen zweiten Schritt deserialisieren.
    Mit der Abfrage if( $unserialized = @unserialize( $object ) ) erledigst du Prüfung und deserialisierung in einen Schritt.

    Das mit den Notices, da gebe ich dir Recht. Beim Debuggen kann das recht lästig sein. Aber nach einem Durchlauf kennt man seine Pappenheimer und kann die entsprechenden Code-Zeilen bzw. Notices raus filtern.

  3. Heinrich sagt:

    Ihr habt das Problem meiner Meinung nach völlig richtig erkannt. Ich denke auch, wie Ralf schon oben beschrieben hat, dass die einzelnen Programmierer selbst festlegen was deserialisierbar ist und was eben nicht. Das ich mit der Abfrage if die Prüfung und deserialisierung auf einmal erledigen kann, hab ich jetzt auch gelernt, hab ich davor noch nicht gewusst.

© 2013, since 2005 bueltge.de [by:ltge.de] · Theme is built by ThemeShift