• Inviting everyone who uses WordPress management tools in Plesk
    The Plesk team is conducting a 60-minute research session that includes an interview and a moderated usability test.
    To participate, please use this link .
    Your experience will help shape product decisions and ensure the tools better support real-world use cases.

Issue Joomla Toolkit - Cannot access offset of type string on string

RalfMeyer

New Pleskian
Server operating system version
Debian 11
Plesk version and microupdate number
Plesk Obsidian 18.0.76.2
Hi everyone,

Does anyone else have an issue with Joomla Toolkit where, after installing a Joomla instance from within the toolkit, it does not show up in it?

When clicking on the "Joomla" button directly at the domain we get an error:
TypeTypeError
MessageCannot access offset of type string on string
FileUiLibrary.php
Line79

We also get the same error, when running "plesk ext joomla-toolkit --instances-list":

Code:
$ plesk ext joomla-toolkit --instances-list
Cannot access offset of type string on string

Thanks for your help.
 
Thank you for the confirmation. Could you please try reinstalling the Joomla extension?

Code:
plesk bin extension --uninstall joomla-toolkit
plesk bin extension --install joomla-toolkit
 
Hi @Sebahat.hadzhi, we get the following error when trying to uninstall it. I am not sure if this is related:

Code:
[2026-03-02 19:07:12.833] 2679666:69a5d1d0cb63c ERR [extension/joomla-toolkit] The execution of pre-uninstall.php has failed with the following message:
[2026-03-02 19:07:12.826] 2679668:69a5d1d0c989a ERR [panel] Site without PhysicalHosting cannot be Webspace:
0: /opt/psa/admin/plib/Webspace.php:556
    Webspace->_loadPHosting()
1: /opt/psa/admin/plib/Webspace.php:490
    Webspace->getPHosting()
2: /opt/psa/admin/plib/Webspace.php:460
    Webspace->getSysUser()
3: /opt/psa/admin/plib/Webspace.php:191
    Webspace->getRootPath()
4: /opt/psa/admin/plib/pm/Domain.php:377
    pm_Domain->getHomePath()
5: /opt/psa/admin/plib/modules/joomla-toolkit/scripts/pre-uninstall.php:8
ERROR: PleskFatalException: Site without PhysicalHosting cannot be Webspace (Webspace.php:556)
The execution of pre-uninstall.php has failed with the following message:
[2026-03-02 19:07:12.826] 2679668:69a5d1d0c989a ERR [panel] Site without PhysicalHosting cannot be Webspace:
0: /opt/psa/admin/plib/Webspace.php:556
    Webspace->_loadPHosting()
1: /opt/psa/admin/plib/Webspace.php:490
    Webspace->getPHosting()
2: /opt/psa/admin/plib/Webspace.php:460
    Webspace->getSysUser()
3: /opt/psa/admin/plib/Webspace.php:191
    Webspace->getRootPath()
4: /opt/psa/admin/plib/pm/Domain.php:377
    pm_Domain->getHomePath()
5: /opt/psa/admin/plib/modules/joomla-toolkit/scripts/pre-uninstall.php:8
ERROR: PleskFatalException: Site without PhysicalHosting cannot be Webspace (Webspace.php:556)

After installing it again after the error, "plesk ext joomla-toolkit --instances-list" returns nothing, after installing a Joomla instance again once we get "Cannot access offset of type string on string" and the instance is not shown (same issue as before).
 
Thank you. Could you please execute the following command on the server:

Code:
plesk db "SELECT htype FROM domains WHERE name LIKE '%example.com%'"

replace example.com with one of the Joomla instance you cannot access
 
Thank you for the update. The reported error typically originates when the subscription is set to "no hosting" type, but that doesn't seem to be the case here. I am not entirely sure what else might be causing the issue. What I can suggest is to try repairing the Plesk database for some inconsistencies:

Code:
plesk repair db -y

If that doesn't show any result it will be best to open a ticket with Plesk support for investigation directly on the server.
 
Hi @Sebahat.hadzhi,


We found the root cause and a workaround:

The Joomla Toolkit executes internal CLI commands (e.g. "site:list") using a PHP binary. In our case, it picked up "/usr/local/php85/bin/php" (PHP 8.5) — a custom-built PHP version compiled by us and registered as a PHP handler. However, the affected domain was configured to use PHP 8.3 shipped by Plesk, and our PHP 8.5 was intentionally disabled for the tests. The toolkit appears to simply select the newest PHP version on the system regardless of the domain's setting or whether that version is enabled:

Code:
$ plesk bin php_handler --list | grep php85
           php85-fastcgi-nc            8.5          8.5.0       8.5  fastcgi     /usr/local/php85/bin/php-cgi    /usr/local/php85/bin/php        /etc/php/8.2/fpm/php.ini     true disabled

The bundled Symfony Console and Joomlatools Console use implicit nullable parameters, which emit Deprecated warnings to stdout on PHP 8.4+. This can be seen when enabling the debug mode of Plesk and running
Code:
plesk ext joomla-toolkit --instances-scan

These warnings are printed before the JSON output the toolkit expects to parse, causing a JSON parse failure (Syntax error) that surfaces as Cannot access offset of type string on string — both in CLI and in the Plesk UI (UiLibrary.php:79).

Debug log showing the toolkit invoking PHP 8.5 despite the domain being set to PHP 8.3:
Code:
[2026-03-13 17:51:59.127] DEBUG [extension/joomla-toolkit] Starting: '/opt/psa/admin/bin/filemng' 'tester.test_iko228qu5ib' 'exec' '/var/www/vhosts/tester.test/httpdocs' '/usr/local/php85/bin/php' '-d' 'open_basedir=' '-d' 'memory_limit=256M' '/opt/psa/admin/plib/modules/joomla-toolkit/vendor/joomlatools/console/bin/joomla' 'site:list' '--www=/var/www/vhosts/tester.test' '--config'

Deprecation warnings polluting stdout before the JSON output:
Code:
Deprecated: Joomlatools\Console\Application::run(): Implicitly marking parameter $input as nullable is deprecated, the explicit nullable type must be used instead in /opt/psa/admin/plib/modules/joomla-toolkit/vendor/joomlatools/console/src/Joomlatools/Console/Application.php on line 71

Deprecated: PleskJoomlaToolkit\Symfony\Component\Console\Application::run(): Implicitly marking parameter $input as nullable is deprecated, the explicit nullable type must be used instead in /opt/psa/admin/plib/modules/joomla-toolkit/vendor/symfony/console/Application.php on line 98

... (dozens more deprecation warnings) ...

{"command":"site:list","data":{"/var/www/vhosts/tester.test/httpdocs":{...}}}

Resulting parse failure:
Code:
[2026-03-13 17:51:59.245] ERR [extension/joomla-toolkit] Syntax error

Which then causes the UI error:
Code:
[2026-03-13 17:55:26.391] ERR [panel] Cannot access offset of type string on string:
0: /opt/psa/admin/plib/modules/joomla-toolkit/library/UiLibrary.php:79
    PleskExt\JoomlaToolkit\UiLibrary::getInstanceData(integer '1')
1: /opt/psa/admin/plib/modules/joomla-toolkit/library/UiLibrary.php:25
    PleskExt\JoomlaToolkit\UiLibrary::getListData(string '', integer '1', integer '5')
2: /opt/psa/admin/plib/modules/joomla-toolkit/controllers/IndexController.php:33
    IndexController->indexAction()

Workaround​

  1. Set error_reporting = E_ALL & ~E_DEPRECATED in the php.ini of the PHP version the toolkit actually uses (in our case /usr/local/php85/etc/conf.d/disable_deprecated_output.ini).
  2. Uninstall and reinstall the Joomla Toolkit extension, then re-scan.

Additional bug found​


While analysing this issue, another bug was found: It currently seems that the Joomla Toolkit allows the installation of the current Joomla version on PHP versions that are too old (lower than 8.3). The Toolkit should prevent installing Joomla on domains with a too old PHP version activated. It seems that when the very first install of Joomla on a server using the Toolkit is done on a domain with a PHP version that is too old, it can permanently break the toolkit with the same "Cannot access offset of type string on string" error. In this case, the issue can be resolved by uninstalling the extension and reinstalling it, then, broken instances are marked as "broken" when listing them via the CLI (as they should be).

Suggestions for the Development Team​


1. Suppress deprecation output in internal CLI calls. The toolkit already passes -d open_basedir= and -d memory_limit=256M when invoking PHP. Adding -d error_reporting=E_ALL&~E_DEPRECATED (or -d display_errors=Off) would prevent warnings from polluting the JSON output regardless of PHP version — the most straightforward fix.

2. Respect the domain's configured PHP version — or pin to a Plesk-shipped binary. The toolkit selecting the newest registered PHP version, even when disabled, is unexpected and problematic. It should either use the domain's configured PHP handler, or use a known-compatible version shipped by Plesk.

3. Do not allow installation of Joomla on domains with too old PHP version. (Currently older than 8.3).

Note: The uninstall error (Site without PhysicalHosting cannot be Webspace) appears to be a separate issue only occurring on uninstalls and does not seem to cause issues otherwise.
 
Back
Top