Running PHP via CLI after switching PHP versions shows some warnings. Broken symlink?

Here’s my results from your steps. Note this machine was built with PHP 7.0 instead of 8.2.

# Verify system PHP version 7.0
cpcmd php:version
cpcmd scope:set cp.bootstrapper php_multiphp '[7.4,7.0]'
upcp -sb php/multiphp

Results:

# ls -l /usr/lib64/20*
# 7.0
lrwxrwxrwx 1 root root 51 Aug 28 16:45 /usr/lib64/20151012 -> /.socket/php/multiphp/native/7.0/usr/lib64/20151012
# 7.4
lrwxrwxrwx 1 root root 51 Aug 28 16:42 /usr/lib64/20190902 -> /.socket/php/multiphp/native/7.4/usr/lib64/20190902

# ls -l /home/virtual/FILESYSTEMTEMPLATE/siteinfo/usr/lib64/20*
lrwxrwxrwx 1 root root 51 Aug 28 16:45 /home/virtual/FILESYSTEMTEMPLATE/siteinfo/usr/lib64/20151012 -> /.socket/php/multiphp/native/7.0/usr/lib64/20151012
lrwxrwxrwx 1 root root 51 Aug 28 16:42 /home/virtual/FILESYSTEMTEMPLATE/siteinfo/usr/lib64/20190902 -> /.socket/php/multiphp/native/7.4/usr/lib64/20190902

Do you see a different module layout in /home/virtual/FILESYSTEMTEMPLATE versus what’s in the account’s vfs? If so, it’s due to OverlayFS caching dentries. In order for a directory entry to fully update, all open file handles must be released to it. Sometimes you can get away with cpcmd admin:kill-site siteXX ; cpcmd -d siteXX file:purge to terminate all processes on the site, then force OverlayFS to dump its cache.

Additionally, in this situation 8.2 shouldn’t be built as multiPHP because it duplicates system PHP. Use `php.multi’ Scope to set these versions:

# Add 8.1
cpcmd scope:set php.multi 8.1
# Remove 8.0
cpcmd scope:set php.multi '[8.0:false]'

There are additional checks in the Scope to prevent building a system PHP version as multiPHP, plus it merges results into php_multiphp.