[WIP] serialize/unserialize robustes pour stockage en base #5520

Draft
cerdic wants to merge 7 commits from issue_5095 into master
Owner

Une proposition de classe utilitaire pour régler le problème de serialization que l'on peut stocker en base sans risque, et de deserialization, y compris sur des données legacy, sans utiliser la fonction native php unserialize()

Mise en application dans le core

Une proposition de classe utilitaire pour régler le problème de serialization que l'on peut stocker en base sans risque, et de deserialization, y compris sur des données legacy, sans utiliser la fonction native php `unserialize()` Mise en application dans le core
Poster
Owner

Refs #5095 donc

Refs #5095 donc
Poster
Owner

Et evidemment, avant de continuer, il faudrait valider que mon nommage de classe est OK (ou proposer un autre nommage, moi ça m'est égal), et écrire des tests unitaires pour les 2 fonctions serialize et unserialize dans les différents cas d'usage

Et evidemment, avant de continuer, il faudrait valider que mon nommage de classe est OK (ou proposer un autre nommage, moi ça m'est égal), et écrire des tests unitaires pour les 2 fonctions serialize et unserialize dans les différents cas d'usage
Owner

C’est pas la lib la plus maintenue du placard, semble t’il :)

Toujours est-il qu’elle ne gère pas les Enum en PHP 8.1+ qui font une fatale si tu tentes d’en désérialiser.

<?php
use Spip\Utils\Serializer;

error_reporting(E_ALL);
ini_set ("display_errors", "On");

require_once 'vendor/autoload.php';

enum Dir {
    case Left;
}

Serializer::unserialize(
	Serializer::serialize(Dir::Left)
);

Fatal error: Uncaught Exception: Unable to unserialize type "E"


Accessoirement si on ne démarre pas ecrire/inc_versions.php, on a Call to undefined function Spip\Utils\spip_log(). Il faudra vraiment trouver pour améliorer ça aussi…
Plus tard…

C’est pas la lib la plus maintenue du placard, semble t’il :) Toujours est-il qu’elle ne gère pas les `Enum` en PHP 8.1+ qui font une fatale si tu tentes d’en désérialiser. ```php <?php use Spip\Utils\Serializer; error_reporting(E_ALL); ini_set ("display_errors", "On"); require_once 'vendor/autoload.php'; enum Dir { case Left; } Serializer::unserialize( Serializer::serialize(Dir::Left) ); ``` > Fatal error: Uncaught Exception: Unable to unserialize type "E" ---- Accessoirement si on ne démarre pas ecrire/inc_versions.php, on a `Call to undefined function Spip\Utils\spip_log()`. Il faudra vraiment trouver pour améliorer ça aussi… Plus tard…
b_b commented 3 months ago
Owner

Petite coquille dans le 3e log de commit "les données de condiguration" => "les données de configuration".

Pour d'autres libs, les deux premières de https://packagist.org/?query=Serializer ne feraient pas le job ?

Petite coquille dans le 3e log de commit "les données de condiguration" => "les données de configuration". Pour d'autres libs, les deux premières de https://packagist.org/?query=Serializer ne feraient pas le job ?
cerdic force-pushed issue_5095 from 44f505643b to 6b43433645 3 months ago
Poster
Owner

J'ai tout repris et forcepushé, en me basant sur https://github.com/zumba/json-serializer qui est plus à jour et robuste et gère aussi la sérialization json des contenus en charset isotruc

J'ai tout repris et forcepushé, en me basant sur https://github.com/zumba/json-serializer qui est plus à jour et robuste et gère aussi la sérialization json des contenus en charset isotruc
b_b commented 3 months ago
Owner

Je lis "Json Serializer requires PHP >= 7.0 and tested until PHP 7.4", ça n'est pas problématique ? Ha non, le readme est pas à jour, ça semble testé en PHP 8.0 cf 2c29fe4937 => mais la question reste ouverte pour PHP 8.2.

Je lis "Json Serializer requires PHP >= 7.0 and tested until PHP 7.4", ça n'est pas problématique ? Ha non, le readme est pas à jour, ça semble testé en PHP 8.0 cf https://github.com/zumba/json-serializer/commit/2c29fe493742da018eb2831d7cdb929f80e4fa6a => mais la question reste ouverte pour PHP 8.2.
Poster
Owner

Et débuts de tests unitaires en relation spip/tests#18

Et débuts de tests unitaires en relation https://git.spip.net/spip/tests/pulls/18
cerdic added 1 commit 3 months ago
cerdic added 1 commit 3 months ago
cerdic added 1 commit 3 months ago
cerdic added 1 commit 3 months ago
marcimat added 7 commits 2 months ago
marcimat added 7 commits 2 months ago
Owner

si je comprends bien, lors de la migration d'une base de version inférieure on va pouvoir se retrouver dans spip_meta avec un mix de valeurs sérialisée "old style" (en PHP) et d'autres en json ?

Faut il prévoir de faire un utilitaire de conversion pour tout passer en json lors de la maj vers 5.0 ?

si je comprends bien, lors de la migration d'une base de version inférieure on va pouvoir se retrouver dans spip_meta avec un mix de valeurs sérialisée "old style" (en PHP) et d'autres en json ? Faut il prévoir de faire un utilitaire de conversion pour tout passer en json lors de la maj vers 5.0 ?
This pull request has changes conflicting with the target branch.
  • composer.lock
Sign in to join this conversation.
Loading…
There is no content yet.