Archive
upgrades
-
Laravel 9: Symfony 6 underneath, and a smaller upgrade than expected
Seven hours of work, one silent upload bug, and a framework that mostly got out of the way. Notes on Flysystem 3, the PHP 8.0.2 floor, the new accessor syntax and full text search.
-
The MySQL 8 upgrade: collations, sql_mode, and the CTEs we finally used
Moving a seven-year-old schema from 5.7 to 8.0 took a weekend. Two startup failures came from my.cnf, ONLY_FULL_GROUP_BY broke three reports, and a collation mismatch on one join reached production.
-
Upgrading to Symfony 6: the deprecations bill comes due
We went 4.4 LTS to 5.4 to 6.0 in six weeks. Clearing 214 deprecation messages on 5.4 was the actual work; the version bump took an afternoon. Notes on the security rewrite and two removals we missed.
-
PHP 8, three months in: the JIT was the least of it
We moved twelve app servers from PHP 7.4 to 8.0 in January. The JIT did nothing measurable and is switched off. The comparison semantics and internal TypeErrors are what actually cost us a night.
-
Laravel 8, and why we stayed on Blade
Notes from taking a small client dashboard to Laravel 8.15: namespaced seeders, class-based factories, squashed migrations, job batching. Then the argument we actually had, which was whether to adopt Livewire, and why we did not.
-
Typed properties, six weeks in
Six weeks on PHP 7.4 across twelve boxes. Typed properties shortened our classes and introduced a silent failure mode in the serializer, preloading gave back six milliseconds, and the deprecation sweep found two real bugs.
-
JSON_THROW_ON_ERROR earned its keep
A truncated partner payload decoded to null for nineteen days and nobody noticed, because json_decode reports failure with the same value it returns on success. One PHP 7.3 flag fixed that.
-
PHP 7.2, libsodium, and the password hashing we finally fixed
A users table with md5 and salted sha1 in one column. Why PHP 7.2 does not let you bulk convert any of it, why Argon2i needed a build flag we did not have, and the rehash-on-login code that works.