This fixes most issues with PHP 8.1. Some issues still remain that I was unable to fix.
Details
- Reviewers
Ekubischta - Group Reviewers
Blessed Committers O1: Blessed Committers - Maniphest Tasks
- T15198: PHP 8.2 deprecations fix strategies
T15190: PHP 8.1: strlen() and other scalar-only functions do not accept NULL anymore - understand fix strategies
T15064: Make Phorge compatible with PHP 8.1/8.2/8.3/8.4
Used PHP linting, tested in browser, checked logs, etc
Diff Detail
- Repository
- rP Phorge
- Lint
Lint Skipped - Unit
Tests Skipped
Event Timeline
I've been think about what to do with this for a while, and I have to say, it's a hard one.
First, thanks for doing this, this is definitively needed. But in its current form, it is effectively impossible to review. There are changes to js files, which I think is a clear indication that this is likely automated.
This patch suppresses the deprecation errors at each site, but there might be a simpler workaround in the same spirit: change the error_reporting calls (of which there are only a handful) to exclude E_DEPRECATED. That would risk masking any other deprecations (probably fine in production, but not in development), whereas this patch risks hiding any non-deprecation errors at these locations.
Depending on how the allow_null RFC is handled, Phabricator/Phorge could potentially need no code changes, except to make it refuse to run on PHP 8.1.
Yeah if that RFC passes then that would make things way easier. And yes I used sed for a lot of the changes.
I got differential working under PHP 8.1 by doing a global replace of single parameter strlen commands to add the null coalesce operator
perl -pi -e 's/(strlen\(\$[a-zA-Z\d_]+)\)/$1 ?? "")/g' `find . -type f -name '*.php'`
There were a couple of other fixes needed to a few isolated preg_match(), trim(), strcasecmp() statements.
Then had to revert the PHP upgrade as PHP 8.1 broke a different application :-/
This revision is nearly impossible to test
See my comments here D25030#1893
Error suppression with "@" is a poor solution to this issue
Thank you for this comment. Inspired by this, I tried to cover some cases with a different approach. The result is here:
D25097: PHP 8.2: fixes for strlen() not accepting NULL anymore
The reasons are here:
Maybe we can retry here (smaller):
D25097: PHP 8.2: fixes for strlen() not accepting NULL anymore