• The new Python extension is now available. It allows customers to deploy and manage WSGI-based Python applications on their websites directly from Plesk.
  • The Plesk Mobile apps for iOS and Android and the Plesk Mobile Center extension have been deprecated, and are no longer available for new installations. In Plesk Obsidian 18.0.84, the Plesk Mobile Center extension will be removed from servers during the upgrade, and the Plesk Mobile apps will lose their server management features.
  • The Social Login extension has been deprecated and will be removed in Plesk Obsidian 18.0.84. After that, it will no longer be possible to log in to Plesk with a Google, Facebook, GitHub account, or with a passkey. Plesk usernames and passwords, as well as logging in with a WebPros Account, are not affected.

Issue Joomla Toolkit - Scan fails (another one...)

ThiloS

Basic Pleskian
Server operating system version
Ubuntu 24.04.5
Plesk version and microupdate number
Plesk Obsidian 18.0.82 Update 2
I know the are several other post like that...
I have about 75 Joomla Sites managed on this server. (3 websites with the newest Joomla 5 - and Virtuemart / all other sites with Joomla 6.2)
In my case when scanning for new Joomla-Instances i get the following error:

Die Aufgabe "ext-joomla-toolkit-task\scan" ist fehlgeschlagen.
PHP Fatal error: Uncaught Error: Class "Version6af1a32b38890" not found in /opt/psa/admin/plib/modules/joomla-toolkit/vendor/joomlatools/console/src/Joomlatools/Console/Command/Site/Listing.php:114 Stack trace: #0 /opt/psa/admin/plib/modules/joomla-toolkit/vendor/joomlatools/console/src/Joomlatools/Console/Command/Site/Listing.php(189): Joomlatools\Console\Command\Site\Listing->scanDir()
#1 /opt/psa/admin/plib/modules/joomla-toolkit/vendor/joomlatools/console/src/Joomlatools/Console/Command/Site/Listing.php(190): Joomlatools\Console\Command\Site\Listing->scanDirDepth()
#2 /opt/psa/admin/plib/modules/joomla-toolkit/vendor/joomlatools/console/src/Joomlatools/Console/Command/Site/Listing.php(69): Joomlatools\Console\Command\Site\Listing->scanDirDepth()
#3 /opt/psa/admin/plib/modules/joomla-toolkit/vendor/symfony/console/Command/Command.php(259): Joomlatools\Console\Command\Site\Listing->execute()
#4 /opt/psa/admin/plib/modules/joomla-toolkit/vendor/symfony/console/Application.php(870): PleskJoomlaToolkit\Symfony\Component\Console\Command\Command->run()
#5 /opt/psa/admin/plib/modules/joomla-toolkit/vendor/symfony/console/Application.php(261): PleskJoomlaToolkit\Symfony\Component\Console\Application->doRunCommand()
#6 /opt/psa/admin/plib/modules/joomla-toolkit/vendor/symfony/console/Application.php(157): PleskJoomlaToolkit\Symfony\Component\Console\Application->doRun()
#7 /opt/psa/admin/plib/modules/joomla-toolkit/vendor/joomlatools/console/src/Joomlatools/Console/Application.php(83): PleskJoomlaToolkit\Symfony\Component\Console\Application->run()
#8 /opt/psa/admin/plib/modules/joomla-toolkit/vendor/joomlatools/console/bin/joomla(12): Joomlatools\Console\Application->run()
#9 {main} thrown in /opt/psa/admin/plib/modules/joomla-toolkit/vendor/joomlatools/console/src/Joomlatools/Console/Command/Site/Listing.php on line 114


Any ideas what to do? .. or is there an official support for this paid extension? (i can only find the Plesk Support - not a Joomla Toolkit Support...)

Greets,
Thilo
 
Hi, @ThiloS . Does the scanner fail for all instances or only for specific websites/versions? Please run the following command for one of the instances that is failing:

Code:
  grep -n "class " /var/www/vhosts/domain.com/httpdocs/libraries/src/Version.php

or is there an official support for this paid extension? (i can only find the Plesk Support - not a Joomla Toolkit Support...)

There's no designated support team for the extension itself. Support access depends on the main Plesk license.
 
Hi Sebahat,

the scanner is meant to find new joomla-instances on the server. (in my case it's a J6.2 instance - but i don't think that the J-version matters...)
The scanner runs - but doesn't find the existing new website. And then i get the error-list in the first post.

i hope my provider can share the issue with the plesk support-team. I cannot drectly start a ticket, since i have some retail-id, which is not meant for direct support...
 
Hi @ThiloS,

I had a look at the toolkit code behind your stack trace. The line numbers match exactly, so we're looking at the same Listing.php. Line 114 is "$version = new $class();".

Here's what the scanner does for every Joomla 4/5/6 instance it finds (libraries/src/Version.php):
1. reads the file and strips the first <?php
2. removes the exact string "namespace Joomla\CMS;"
3. renames "class Version" to "class Version<uniqid>" (that's your "Version6af1a32b38890")
4. runs eval() on the result and does new Version<uniqid>()

So "Class not found" means: the eval ran without an error, but no class with that name ended up in the global namespace. Going by the code, that can only happen if

- the Version.php is empty, truncated or not readable for the user running the scan
- there is no "class Version" in it that the regex catches
- the namespace line is not exactly "namespace Joomla\CMS;", so the class stays inside a namespace

There's no class_exists() check after the eval, so ONE odd file kills the whole scan. That would also explain why your new J6.2 site never shows up.

Also: Listing.php doesn't touch the database at all, so the manifest_cache fix can't help with this specific error (it's probably a different bug, like the one Sebahat mentioned in other threads).

One more thing from your trace: scanDir() is called three levels below the web root it scans. So the broken instance is probably not sitting directly in httpdocs but in a subfolder. I don't know which --www path Plesk passes, so take that with a grain of salt.

What to check (as root, read-only, nothing gets changed):
Code:
find /var/www/vhosts -path '*/libraries/src/Version.php' | while read -r f; do printf '%s size=%s mode=%s owner=%s ns=%s class=%s\n' "$f" "$(stat -c %s "$f")" "$(stat -c %a "$f")" "$(stat -c %U "$f")" "$(grep -c 'namespace Joomla\\CMS;' "$f")" "$(grep -ciE 'class Version' "$f")"; done > /tmp/version-check.txt

Then look at the result:
Code:
cat /tmp/version-check.txt

A healthy file is several KB big and shows ns=1 and class=1 or higher. Look for lines with

- size=0 or a really tiny size
- ns=0 or class=0
- a weird owner or mode compared to the other sites

If one of them sticks out, post the first lines of that file (just that one):
Code:
head -n 30 /var/www/vhosts/DOMAIN/httpdocs/PATH/libraries/src/Version.php

And it would help to know your Joomla Toolkit version too (Plesk > Extensions > My Extensions), because the toolkit has its own version number, separate from Plesk.

IMPORTANT before you post anything: please anonymize it! The paths contain your domain names, so replace them with something like example.com / domainA / domainB. Customer names and usernames in the paths too. Only the structure (size, ns, class, owner, mode) matters, not the real names.

I haven't seen your server, this is purely from reading the code, so I can't say for sure which of the three cases it is. The output above should show it quickly.

Regards
Tessa
 
Back
Top