Panel not running - reflection error

         7B. ListenerService\Daemon::init()
            [/usr/local/apnscp/lib/lservice.php:28]
[Sat May 09 00:19:25 2026] Checking if frontend started
INFO   : Frontend HTTP started with PID `4072436'
[Sat May 09 00:19:25 2026] Loading modules...
[Sat May 09 00:19:25 2026] EXCEPTION: Call to undefined method ReflectionMethod::hasPrototype() 
[/usr/local/apnscp/lib/apnscpfunction.php:880]


         0B. apnscpFunctionInterceptor::_apply_wildcard_permission(ReflectionClass, [name:"Ghost_Module_Surrogate"], 3, [*:3, get_versions:15, is_current:15, next_version:15, install:3, plugin_status:3, install_plugin:3, ])
            [/usr/local/apnscp/lib/apnscpfunction.php:836]
         1B. apnscpFunctionInterceptor::_exported_commands(Ghost_Module_Surrogate, [[*:3, get_versions:15, is_current:15, next_version:15]])
            [/usr/local/apnscp/lib/apnscpfunction.php:908]
         2B. apnscpFunctionInterceptor->add_backend_exported_functions("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:495]
         3B. apnscpFunctionInterceptor->instantiate_backend_module("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:468]
         4B. apnscpFunctionInterceptor->load_all_backend_modules()
            [/usr/local/apnscp/lib/lservicelib8.pht:249]
         5B. ListenerService\Daemon->start()
            [/usr/local/apnscp/lib/lservicelib8.pht:170]
         6B. ListenerService\Daemon->__construct()
            [/usr/local/apnscp/lib/lservicelib8.pht:1466]
         7B. ListenerService\Daemon::init()
            [/usr/local/apnscp/lib/lservice.php:28]

(8af7205f-2099-559f-a5b5-0dc95bba3369 Error) EXCEPTION: Call to undefined method ReflectionMethod::hasPrototype() 
[/usr/local/apnscp/lib/apnscpfunction.php:880]
         0B. apnscpFunctionInterceptor::_apply_wildcard_permission(ReflectionClass, [name:"Ghost_Module_Surrogate"], 3, [*:3, get_versions:15, is_current:15, next_version:15, install:3, plugin_status:3, install_plugin:3, ])
            [/usr/local/apnscp/lib/apnscpfunction.php:836]
         1B. apnscpFunctionInterceptor::_exported_commands(Ghost_Module_Surrogate, [[*:3, get_versions:15, is_current:15, next_version:15]])
            [/usr/local/apnscp/lib/apnscpfunction.php:908]
         2B. apnscpFunctionInterceptor->add_backend_exported_functions("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:495]
         3B. apnscpFunctionInterceptor->instantiate_backend_module("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:468]
         4B. apnscpFunctionInterceptor->load_all_backend_modules()
            [/usr/local/apnscp/lib/lservicelib8.pht:249]
         5B. ListenerService\Daemon->start()
            [/usr/local/apnscp/lib/lservicelib8.pht:170]
         6B. ListenerService\Daemon->__construct()
            [/usr/local/apnscp/lib/lservicelib8.pht:1466]
         7B. ListenerService\Daemon::init()
            [/usr/local/apnscp/lib/lservice.php:28]
         0B. apnscpFunctionInterceptor::_apply_wildcard_permission(ReflectionClass, [name:"Ghost_Module_Surrogate"], 3, [*:3, get_versions:15, is_current:15, next_version:15, install:3, plugin_status:3, install_plugin:3, ])
            [/usr/local/apnscp/lib/apnscpfunction.php:836]
         1B. apnscpFunctionInterceptor::_exported_commands(Ghost_Module_Surrogate, [[*:3, get_versions:15, is_current:15, next_version:15]])
            [/usr/local/apnscp/lib/apnscpfunction.php:908]
         2B. apnscpFunctionInterceptor->add_backend_exported_functions("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:495]
         3B. apnscpFunctionInterceptor->instantiate_backend_module("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:468]
         4B. apnscpFunctionInterceptor->load_all_backend_modules()
            [/usr/local/apnscp/lib/lservicelib8.pht:249]
         5B. ListenerService\Daemon->start()
            [/usr/local/apnscp/lib/lservicelib8.pht:170]
         6B. ListenerService\Daemon->__construct()
            [/usr/local/apnscp/lib/lservicelib8.pht:1466]
         7B. ListenerService\Daemon::init()
            [/usr/local/apnscp/lib/lservice.php:28]


[root@p102 apnscp]# cpcmd misc:cp-version
revision: 0c62e0634a4b0b809958d0ce6ced0afaeee7e5a1
timestamp: 1778257269
ver_maj: 3
ver_min: 2
ver_patch: 48
ver_pre: ''
dirty: false
debug: false

[root@p102 apnscp]# upcp
[root@p102 apnscp]# w
 00:16:43 up 8 days,  9:12,  1 user,  load average: 3.86, 4.00, 3.61
[root@p102 apnscp]# yum update -y
timescale_timescaledb                                                                                                                                                                             895  B/s | 833  B     00:00    
Dependencies resolved.
Nothing to do.
Complete!
[root@p102 apnscp]# 

Give upcp a go again.

upcp still fails to complete with those composer / github private repo errors.
running upcp --reset doesn’t solve it.

Trying to fix some sites with PHP 503 errors also doesn’t work.
This seems to be affecting others as well but the fix doesn’t seem universal.

]# EditDomain --reconfig --all --force
(Error) EXCEPTION: Class "MikeRoetgers\DependencyGraph\DependencyManager" not found 
[/usr/local/apnscp/lib/Opcenter/Service/ModulePriority.php:77]
         0. Opcenter\Service\ModulePriority->score()
            [/usr/local/apnscp/lib/Opcenter/Service/ModulePriority.php:57]
         1. Opcenter\Service\ModulePriority->sort()
            [/usr/local/apnscp/lib/Opcenter/Service/ModulePriority.php:46]
         2. Opcenter\Service\ModulePriority::prioritize(["aliases", "auth", "bandwidth", "billing", "cgroup", "crontab", "diskquota", "dns", "files", "ftp", ])
            [/usr/local/apnscp/lib/Opcenter/SiteConfiguration.php:682]
         3. Opcenter\SiteConfiguration->getModulesPrioritized()
            [/usr/local/apnscp/lib/Opcenter/SiteConfiguration.php:650]
         4. Opcenter\SiteConfiguration->verifyAll()
            [/usr/local/apnscp/lib/Opcenter/Account/Edit.php:120]
         5. Opcenter\Account\Edit->installServices()
            [/usr/local/apnscp/lib/Opcenter/Account/Edit.php:88]
         6. Opcenter\Account\Edit->exec()
            [/usr/local/apnscp/bin/EditDomain:119]

Same build/version as prior posted.

When a customer tries to change their PHP version, they get a red banner error with that exception in it. So if a site is down, restarting the pool and/or editing all domains does not work.

cpcmd scope:set cp.update-policy edge-major
upcp

or…

cd /usr/local/apnscp
git checkout v3.2.48.6
upcp

Either way, flipping back to 3.2.48 with a composer.lock change junks vendor/ resulting in this process.

FWIW, I’m already on v3.2.48.6

Edge Major didn’t work either, now ApisCP won’t start again.
Back to this error again…

            [/usr/local/apnscp/lib/lservice.php:28]
         0B. apnscpFunctionInterceptor::_apply_wildcard_permission(ReflectionClass, [name:"Ghost_Module_Surrogate"], 3, [*:3, get_versions:15, is_current:15, next_version:15, install:3, plugin_status:3, install_plugin:3, ])
            [/usr/local/apnscp/lib/apnscpfunction.php:836]
         1B. apnscpFunctionInterceptor::_exported_commands(Ghost_Module_Surrogate, [[*:3, get_versions:15, is_current:15, next_version:15]])
            [/usr/local/apnscp/lib/apnscpfunction.php:908]
         2B. apnscpFunctionInterceptor->add_backend_exported_functions("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:495]
         3B. apnscpFunctionInterceptor->instantiate_backend_module("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:468]
         4B. apnscpFunctionInterceptor->load_all_backend_modules()
            [/usr/local/apnscp/lib/lservicelib8.pht:249]
         5B. ListenerService\Daemon->start()
            [/usr/local/apnscp/lib/lservicelib8.pht:170]
         6B. ListenerService\Daemon->__construct()
            [/usr/local/apnscp/lib/lservicelib8.pht:1466]
         7B. ListenerService\Daemon::init()
            [/usr/local/apnscp/lib/lservice.php:28]
[Tue May 12 15:20:10 2026] Checking if frontend started
INFO   : Frontend HTTP started with PID `318029'
[Tue May 12 15:20:11 2026] Loading modules...
[Tue May 12 15:20:11 2026] EXCEPTION: Call to undefined method ReflectionMethod::hasPrototype() 
[/usr/local/apnscp/lib/apnscpfunction.php:880]


         0B. apnscpFunctionInterceptor::_apply_wildcard_permission(ReflectionClass, [name:"Ghost_Module_Surrogate"], 3, [*:3, get_versions:15, is_current:15, next_version:15, install:3, plugin_status:3, install_plugin:3, ])
            [/usr/local/apnscp/lib/apnscpfunction.php:836]
         1B. apnscpFunctionInterceptor::_exported_commands(Ghost_Module_Surrogate, [[*:3, get_versions:15, is_current:15, next_version:15]])
            [/usr/local/apnscp/lib/apnscpfunction.php:908]
         2B. apnscpFunctionInterceptor->add_backend_exported_functions("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:495]
         3B. apnscpFunctionInterceptor->instantiate_backend_module("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:468]
         4B. apnscpFunctionInterceptor->load_all_backend_modules()
            [/usr/local/apnscp/lib/lservicelib8.pht:249]
         5B. ListenerService\Daemon->start()
            [/usr/local/apnscp/lib/lservicelib8.pht:170]
         6B. ListenerService\Daemon->__construct()
            [/usr/local/apnscp/lib/lservicelib8.pht:1466]
         7B. ListenerService\Daemon::init()
            [/usr/local/apnscp/lib/lservice.php:28]

(8af7205f-2099-559f-a5b5-0dc95bba3369 Error) EXCEPTION: Call to undefined method ReflectionMethod::hasPrototype() 
[/usr/local/apnscp/lib/apnscpfunction.php:880]
         0B. apnscpFunctionInterceptor::_apply_wildcard_permission(ReflectionClass, [name:"Ghost_Module_Surrogate"], 3, [*:3, get_versions:15, is_current:15, next_version:15, install:3, plugin_status:3, install_plugin:3, ])
            [/usr/local/apnscp/lib/apnscpfunction.php:836]
         1B. apnscpFunctionInterceptor::_exported_commands(Ghost_Module_Surrogate, [[*:3, get_versions:15, is_current:15, next_version:15]])
            [/usr/local/apnscp/lib/apnscpfunction.php:908]
         2B. apnscpFunctionInterceptor->add_backend_exported_functions("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:495]
         3B. apnscpFunctionInterceptor->instantiate_backend_module("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:468]
         4B. apnscpFunctionInterceptor->load_all_backend_modules()
            [/usr/local/apnscp/lib/lservicelib8.pht:249]
         5B. ListenerService\Daemon->start()
            [/usr/local/apnscp/lib/lservicelib8.pht:170]
         6B. ListenerService\Daemon->__construct()
            [/usr/local/apnscp/lib/lservicelib8.pht:1466]
         7B. ListenerService\Daemon::init()
            [/usr/local/apnscp/lib/lservice.php:28]
         0B. apnscpFunctionInterceptor::_apply_wildcard_permission(ReflectionClass, [name:"Ghost_Module_Surrogate"], 3, [*:3, get_versions:15, is_current:15, next_version:15, install:3, plugin_status:3, install_plugin:3, ])
            [/usr/local/apnscp/lib/apnscpfunction.php:836]
         1B. apnscpFunctionInterceptor::_exported_commands(Ghost_Module_Surrogate, [[*:3, get_versions:15, is_current:15, next_version:15]])
            [/usr/local/apnscp/lib/apnscpfunction.php:908]
         2B. apnscpFunctionInterceptor->add_backend_exported_functions("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:495]
         3B. apnscpFunctionInterceptor->instantiate_backend_module("ghost")
            [/usr/local/apnscp/lib/apnscpfunction.php:468]
         4B. apnscpFunctionInterceptor->load_all_backend_modules()
            [/usr/local/apnscp/lib/lservicelib8.pht:249]
         5B. ListenerService\Daemon->start()
            [/usr/local/apnscp/lib/lservicelib8.pht:170]
         6B. ListenerService\Daemon->__construct()
            [/usr/local/apnscp/lib/lservicelib8.pht:1466]
         7B. ListenerService\Daemon::init()
            [/usr/local/apnscp/lib/lservice.php:28]

It’s not. hasPrototype() does not exist in v3.2.48.6. In fact, that line is entirely different.

v3.2.48.6 is commit 8d431715f1e49ad2fe5ad91087d748ac87e58ca7.

[root@p102 apnscp]# git status
HEAD detached from v3.2.48.6
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        lib/Opcenter/Dns/Providers/Powerdns
        public/css/themes/lithium.css
        public/css/themes/lithium.css.map
        public/css/themes/lithium.min.css
        public/css/themes/lithium.min.css.map
        public/images/themes/lithium/
        share/
        storage/cockpit.pem
        storage/screenshots/
        storage/themes/apnscp.png
        storage/themes/classic.png
        storage/themes/launchpad.png
        storage/themes/lithium.png
        storage/themes/material.png
        storage/themes/obsidian.png

nothing added to commit but untracked files present (use "git add" to track)
[root@p102 apnscp]# cpcmd misc:cp-version
revision: 6b1dcb3e8d5c1e141cee8f057f72318ab5a5446d
timestamp: 1778257269
ver_maj: 3
ver_min: 2
ver_patch: 48
ver_pre: 56-g6b1dcb3e8
dirty: false
debug: false

[root@p102 apnscp]# cpcmd scope:get cp.update-policy
edge-major
[root@p102 apnscp]# cd /usr/local/apnscp
[root@p102 apnscp]# git checkout v3.2.48.6
Previous HEAD position was 6b1dcb3e8 SEC: Weak visibility on unauthenticated login controller allows open query to siteinfo,email. Researched by Curtis @ https://terabit.io/ (Login)
HEAD is now at 8d431715f SEC: Weak visibility on unauthenticated login controller allows open query to siteinfo,email. Researched by Curtis @ https://terabit.io/ (Login)
[root@p102 apnscp]# upcp
warning: skipped previously applied commit db014c68b
warning: skipped previously applied commit 0b0938ea0
warning: skipped previously applied commit 242aa3512
warning: skipped previously applied commit d7d87c09d
warning: skipped previously applied commit 04e694371
warning: skipped previously applied commit 68aab86e5
warning: skipped previously applied commit 25d8abeaa
warning: skipped previously applied commit 8d431715f
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
warning: unable to unlink 'resources/playbooks/roles/filesystem/swap/handlers/main.yml': Permission denied
warning: unable to unlink 'resources/playbooks/roles/filesystem/swap/meta/main.yml': Permission denied
dropping 908e8a14c2aeca25813fda768c6f58a4c0850bf6 CHG: bump (migrations) -- patch contents already upstream
dropping 50eca27bdf98f47e978cc66122911e4c0193a82c Backport 59a2ba9b, f5912c6b, f6ddaa10 -- patch contents already upstream
dropping ca92487ad55c94763dc5ee86356589136e86246e CHG: Use release with bundled React assets (Invoiceninja) -- patch contents already upstream
Successfully rebased and updated detached HEAD.
/usr/local/apnscp/lib/modules/surrogates /usr/local/apnscp /usr/local/apnscp
/usr/local/apnscp /usr/local/apnscp
Composer could not detect the root package (apisnetworks/apiscp) version, defaulting to '1.0.0'. See https://getcomposer.org/root-version
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Package divineomega/artisan-menu is abandoned, you should avoid using it. Use jord-jd/artisan-menu instead.
Package divineomega/json-key-value-store is abandoned, you should avoid using it. Use jord-jd/json-key-value-store instead.
Package doctrine/cache is abandoned, you should avoid using it. No replacement was suggested.
Package fruitcake/laravel-cors is abandoned, you should avoid using it. No replacement was suggested.
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
Package true/punycode is abandoned, you should avoid using it. No replacement was suggested.
Generating autoload files
102 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Compiled services and packages files removed!
Job for apnscp.service failed because the control process exited with error code.
See "systemctl status apnscp.service" and "journalctl -xe" for details.
Nothing to migrate.
Nothing to migrate.

I manually removed the swap/handlers and swap/meta files and it still says it can’t unlink /shrug

Ok, git reset --hard v3.2.48.6 did the trick, but if I run upcp it reverts the commit for some reason. I was able to restart ApisCP so at least the panel allows logins and the only errors are Derecations. I’m guessing this will die after the next scheduled update though.

If I run upcp right now, it will finish and say the service isn’t restarted and that line 880 will be back. If I reset git again, it will be gone and all files correct.

Edit:

The panel is up with the Reflection error gone but I’m back to the DepencyManager issue.

[root@p102 apnscp]# EditDomain --reconfig --all --force
(Error) EXCEPTION: Class "MikeRoetgers\DependencyGraph\DependencyManager" not found 
[/usr/local/apnscp/lib/Opcenter/Service/ModulePriority.php:77]
         0. Opcenter\Service\ModulePriority->score()
            [/usr/local/apnscp/lib/Opcenter/Service/ModulePriority.php:57]
         1. Opcenter\Service\ModulePriority->sort()
            [/usr/local/apnscp/lib/Opcenter/Service/ModulePriority.php:46]
         2. Opcenter\Service\ModulePriority::prioritize(["aliases", "auth", "bandwidth", "billing", "cgroup", "crontab", "diskquota", "dns", "files", "ftp", ])
            [/usr/local/apnscp/lib/Opcenter/SiteConfiguration.php:682]
         3. Opcenter\SiteConfiguration->getModulesPrioritized()
            [/usr/local/apnscp/lib/Opcenter/SiteConfiguration.php:650]
         4. Opcenter\SiteConfiguration->verifyAll()
            [/usr/local/apnscp/lib/Opcenter/Account/Edit.php:120]
         5. Opcenter\Account\Edit->installServices()
            [/usr/local/apnscp/lib/Opcenter/Account/Edit.php:88]
         6. Opcenter\Account\Edit->exec()
            [/usr/local/apnscp/bin/EditDomain:119]

Give this a go:

cd /usr/local/apnscp
cpcmd scope:set cp.update-policy major
git checkout v3.2.48.6
upcp
# bumps to 3.2.48.7...
# builds PHP 8.3...
cpcmd scope:set cp.update-policy edge-major
# solves MikeRoetgers\DependencyGraph inclusion
upcp

Composer issue solved, ioncube loader issue introduced.

[root@p102 apnscp]# upcp
Cannot load the ionCube PHP Loader - it was built with configuration API420210902,NTS, whereas running engine is API420230831,NTS

[root@p102 apnscp]# php -v
PHP 8.2.30 (cli) (built: Jan  1 2026 00:34:06) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.30, Copyright (c) Zend Technologies
    with the ionCube PHP Loader v15.5.0, Copyright (c) 2002-2026, by ionCube Ltd.
    with Zend OPcache v8.2.30, Copyright (c), by Zend Technologies

[root@p102 apnscp]# /usr/local/apnscp/bin/php-bins/apnscp_php -v
Cannot load the ionCube PHP Loader - it was built with configuration API420210902,NTS, whereas running engine is API420230831,NTS
PHP 8.3.31 (cli) (built: May 12 2026 21:08:48) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.31, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.31, Copyright (c), by Zend Technologies
[root@p102 apnscp]# 

What’s upcp -sbv apnscp/install-extensions report? If unsolved, run again with added -f parameter. ionCube should be built in that migration assuming it completed.

Ok, that allowed me to complete the previous steps.

EditDomain --reconfig --all --force now runs without the previous issues and ApisCP is running.

That doesn’t make sense. You’re running the same component from the migration, so unless apnscp_php_version was overrode to 8.3, that block would trigger.

Do you have a migration log from either step that you can share? First is most beneficial.

I did have to run with -f as the first attempt had zero success or failures.

If it’s logged, I’d be happy to share it with you. I’ve since logged out of that server.

It’s not used previously.

# grep -rsil apnscp_php migrations/
migrations/2020_05_28_172056_add-lmdb.yml
migrations/2020_07_17_094211_apiscp-php-74.yml
migrations/2023_03_07_221523_session-strict-mode.yml
migrations/2023_03_28_202044_move-php-8.1-redux.yml
migrations/2023_08_05_132316_update-rpm-key.yml
migrations/2025_08_05_130433_introduce-php83.yml
migrations/2025_07_12_103155_rename-evasive-shield.yml
[root@rocky-test playbooks]# grep -rsil apnscp_php migrations/ | xargs grep -i force
# empty

I’ll leave this open if anyone else has corroborating information.