[WIP] serialize/unserialize robustes pour stockage en base
#5520
Draft
cerdic
wants to merge 7 commits from issue_5095
into master
pull from: issue_5095
merge into: spip:master
spip:master
spip:4.2
spip:4.1
spip:dev/issue_5560_dispositions_prive
spip:4.0
spip:3.2
spip:dev/issue_4626_menu_squelettes
spip:fix_issue_5454
spip:issue_5427_bis
spip:coquille_doc
spip:issue_5344
spip:dev/hasard_fixe
spip:issue_4836
spip:debug_ecrire_fichier
spip:fix_modifier_login
spip:dev/instituer_ergo
spip:dev_infos_image
spip:fix/valider_url_distante
spip:issue_4946
spip:3.1
spip:boutons-danger
spip:issue_4717
spip:dev-sortable
spip:issue_4705
spip:dev/autoloader
spip:issue_4678
spip:issue_4101
spip:3.0
spip:2.1
spip:2.0
spip:1.9.2
spip:1.9.1
spip:1.8
Reviewers
Request review
No reviewers
Labels
Clear labels
Amélioration, nouvelle fonctionnalité
Ca ne fonctionne pas
Ce ticket est un doublon
Ticket invalide
Ignoré, c'est comme Ca...
Apply labels
accessibilité
amélioration
Amélioration, nouvelle fonctionnalité
APIs
authentification
base de données
bug
Ca ne fonctionne pas
code généré
compilo
css
divers
documentation
doublon
Ce ticket est un doublon
ergonomie
espace privé
filtres et balises
formulaires
Inscription
installation
invalide
Ticket invalide
javascript
langues
LDAP
plugin
PostgreSQL
refusé
Ignoré, c'est comme Ca...
sécurité
traduction
à confirmer
No Label
accessibilité
amélioration
APIs
authentification
base de données
bug
code généré
compilo
css
divers
documentation
doublon
ergonomie
espace privé
filtres et balises
formulaires
Inscription
installation
invalide
javascript
langues
LDAP
plugin
PostgreSQL
refusé
sécurité
traduction
à confirmer
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
4 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: spip/spip#5520
Reference in New Issue
There is no content yet.
Delete Branch 'issue_5095'
Deleting a branch is permanent. It CANNOT be undone. Continue?
No
Yes
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
Refs #5095 donc
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
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.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…
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 ?
44f505643b
to6b43433645
3 months agoJ'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
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.Et débuts de tests unitaires en relation spip/tests#18
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 ?