PHP Serialize-String auslesen/verwerten

WulfmanGER

Commander
Registriert
Juli 2005
Beiträge
2.225
Hallo zusammen,

ich hab in einer DB folgenden String:
Code:
a:4:{s:1:"d";a:6:{s:6:"square";O:16:"DerivativeParams":3:{s:13:"last_mod_time";i:1558537140;s:6:"sizing";O:12:"SizingParams":3:{s:10:"ideal_size";a:2:{i:0;i:120;i:1;i:120;}s:8:"max_crop";d:1;s:8:"min_size";a:2:{i:0;i:120;i:1;i:120;}}s:7:"sharpen";i:0;}s:5:"thumb";O:16:"DerivativeParams":3:{s:13:"last_mod_time";i:1558537140;s:6:"sizing";O:12:"SizingParams":3:{s:10:"ideal_size";a:2:{i:0;i:144;i:1;i:144;}s:8:"max_crop";d:0;s:8:"min_size";a:2:{i:0;i:0;i:1;i:0;}}s:7:"sharpen";i:0;}s:6:"2small";O:16:"DerivativeParams":3:{s:13:"last_mod_time";i:1558537140;s:6:"sizing";O:12:"SizingParams":3:{s:10:"ideal_size";a:2:{i:0;i:240;i:1;i:240;}s:8:"max_crop";d:0;s:8:"min_size";a:2:{i:0;i:0;i:1;i:0;}}s:7:"sharpen";i:0;}s:6:"medium";O:16:"DerivativeParams":3:{s:13:"last_mod_time";i:1558537430;s:6:"sizing";O:12:"SizingParams":3:{s:10:"ideal_size";a:2:{i:0;i:800;i:1;i:600;}s:8:"max_crop";d:0;s:8:"min_size";a:2:{i:0;i:0;i:1;i:0;}}s:7:"sharpen";i:0;}s:5:"large";O:16:"DerivativeParams":3:{s:13:"last_mod_time";i:1558537182;s:6:"sizing";O:12:"SizingParams":3:{s:10:"ideal_size";a:2:{i:0;i:1024;i:1;i:768;}s:8:"max_crop";d:0;s:8:"min_size";a:2:{i:0;i:0;i:1;i:0;}}s:7:"sharpen";i:0;}s:7:"xxlarge";O:16:"DerivativeParams":3:{s:13:"last_mod_time";i:1558537140;s:6:"sizing";O:12:"SizingParams":3:{s:10:"ideal_size";a:2:{i:0;i:1656;i:1;i:1242;}s:8:"max_crop";d:0;s:8:"min_size";a:2:{i:0;i:0;i:1;i:0;}}s:7:"sharpen";i:0;}}s:1:"q";i:95;s:1:"w";O:15:"WatermarkParams":7:{s:4:"file";s:0:"";s:8:"min_size";a:2:{i:0;i:500;i:1;i:500;}s:4:"xpos";i:50;s:4:"ypos";i:50;s:7:"xrepeat";i:0;s:7:"yrepeat";i:0;s:7:"opacity";i:100;}s:1:"c";a:10:{s:4:"s250";i:1556797874;s:9:"s9999x200";i:1558555088;s:9:"s9999x410";i:1460994371;s:9:"s9999x408";i:1481713258;s:15:"648x216_z_0x216";i:1558500291;s:8:"e260x180";i:1483354228;s:3:"e64";i:1558543428;s:8:"s9999x64";i:1461243006;s:4:"e150";i:1558576541;s:8:"e520x360";i:1558536612;}}

ich benötige hier folgende Information "ideal_size" für thumb, square usw. Ein einfaches "unserialize" hilft leider nicht.

Code:
    [d] => Array
        (
            [square] => __PHP_Incomplete_Class Object
                (
                    [__PHP_Incomplete_Class_Name] => DerivativeParams
					...

Eine Lösung für PHP Incomplete hab ich gefunden ...

Code:
class DerivativeParams{}
class SizingParams{}
class WatermarkParams{}

=>

Code:
Array
(
    [d] => Array
        (
            [square] => DerivativeParams Object
                (
                    [last_mod_time] => 1558537140
                    [sizing] => SizingParams Object
                            [ideal_size] => Array
                                (
                                    [0] => 120 <- brauch ich
                                    [1] => 120 <- brauch ich
                                )
			...

Ich hab es mal so versucht:
Code:
echo $output['d']['thumb']['sizing']['ideal_size']['0'];
=>
Code:
Fatal error: Uncaught Error: Cannot use object of type DerivativeParams as array in /.../tester.php:27 Stack trace: #0 {main} thrown in /.../tester.php on line 27

Da ich ein Array ja komplett per schleife auslesen kann, hab ich mal ein einfaches foreach probiert - einfach der Fehlermeldung wegen :)

[code]
Recoverable fatal error: Object of class DerivativeParams could not be converted to string in

Ich hab mir dann mal angeschaut wie piwigo bzw. das Plugin welches dieses Tabellenfeld ebenfalls nutzt, damit umgeht. Leider nicht so recht schlau raus geworden. Die nutzten letztendlich nur ein unserialize bzw. eine Funktion "safe_unserialize" die ein unserialize ergänzt um schutz vor "doppelten unserialize".

Durch google fand ich zumindest ein ähnliches Problem. Aber bekomme das nicht umgestrickt. https://community.contao.org/de/sho...rt-aus-Objekt-auslesen-Array-Objekt-protected

Er hat hier eine Ebene weniger für seine Wunschausgabe. Ansonsten ist das Array bei ihm aber ähnlich aufgebaut.

Aufbau grob bei mir:
d (array) -> thumb (object) -> sizing (object) -> ideal_size (array) -> 0 bzw. 1

Sein Aufbau:
0 (array) -> product (object) -> arrData (array) -> soldout

So kommt er ans Ziel:
Code:
$product['product']->soldout

Versucht hab ich es mit
Code:
$output['thumb']->sizing->ideal_size[0]
Ergebnis: nichts - zumindest keine Fehlermeldung mehr. Also richtiger weg? Fehler im Detail?

Danke schon mal
 
Zurück
Oben