Fatal error après mise à jour avec la dernière version #9

Closed
opened 2023-01-06 14:54:35 +00:00 by franck-paul · 3 comments
franck-paul commented 2023-01-06 14:54:35 +00:00 (Migrated from github.com)
Fatal error: Uncaught Error: Class "Dotclear\Plugin\pacKman\Admin" not found in /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-plugins/pacKman/_admin.php:16

Stack trace:

#0 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/inc/core/class.dc.modules.php(1151): require()
#1 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/inc/core/class.dc.modules.php(1102): dcModules->loadModuleFile('/Users/franck...')
#2 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/inc/core/class.dc.modules.php(459): dcModules->loadNsFile('pacKman', 'admin')
#3 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/inc/admin/class.dc.admin.php(207): dcModules->loadModules('/Users/franck...', 'admin', 'fr')
#4 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/inc/admin/prepend.php(23): dcAdmin->init()
#5 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/admin/plugins.php(9): require('/Users/franck...')
#6 {main} thrown in /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-plugins/pacKman/_admin.php on line 16

Config de développement :

  • deux chemins de plugins dans DC_PLUGINS_ROOT, celui de Dotclear et un autre situé à l'extérieur.
  • PHP 8.1 et MySQL
  • pacKman installé dans le 2e répertoire, en dehors de Dotclear

Peut-être lié aux deux répertoires de plugins ? Je n'ai pas approfondi.

``` Fatal error: Uncaught Error: Class "Dotclear\Plugin\pacKman\Admin" not found in /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-plugins/pacKman/_admin.php:16 Stack trace: #0 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/inc/core/class.dc.modules.php(1151): require() #1 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/inc/core/class.dc.modules.php(1102): dcModules->loadModuleFile('/Users/franck...') #2 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/inc/core/class.dc.modules.php(459): dcModules->loadNsFile('pacKman', 'admin') #3 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/inc/admin/class.dc.admin.php(207): dcModules->loadModules('/Users/franck...', 'admin', 'fr') #4 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/inc/admin/prepend.php(23): dcAdmin->init() #5 /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-dc/admin/plugins.php(9): require('/Users/franck...') #6 {main} thrown in /Users/franck/Documents/EGO/Geekeries/Internet/htdocs/git-plugins/pacKman/_admin.php on line 16 ``` Config de développement : - deux chemins de plugins dans DC_PLUGINS_ROOT, celui de Dotclear et un autre situé à l'extérieur. - PHP 8.1 et MySQL - pacKman installé dans le 2e répertoire, en dehors de Dotclear Peut-être lié aux deux répertoires de plugins ? Je n'ai pas approfondi.
JcDenis commented 2023-01-06 23:54:37 +00:00 (Migrated from github.com)

J'utilise 3 répertoires de plugins (testé dans les 3) et je n'arrive pas à reproduire (dc dev / php 8.1.12 / windows) :(

Possibilités :

  • espace de noms dans les implode() des _perpend.php et Prepend.php,
  • test de constante dans les defined() sur l'espace de nom root,

Peux tu essayer en virant le test class_exists() du fichier _prepend.php ?

J'utilise 3 répertoires de plugins (testé dans les 3) et je n'arrive pas à reproduire (dc dev / php 8.1.12 / windows) :( Possibilités : - espace de noms dans les implode() des _perpend.php et Prepend.php, - test de constante dans les defined() sur l'espace de nom root, Peux tu essayer en virant le test class_exists() du fichier _prepend.php ?
franck-paul commented 2023-01-07 10:52:51 +00:00 (Migrated from github.com)

Trouvé :

C'est implode('\\', ['Dotclear','Plugin', basename(__NAMESPACE__), $lib]) qui pose problème, chez moi ça retourne Dotclear\Plugin\Dotclear\Plugin\pacKman\Admin

Sachant que basename(__NAMESPACE__) donne Dotclear\Plugin\pacKman.

Le code modifié qui fonctionne chez moi :

        foreach (self::LIBS as $lib) {
            Clearbricks::lib()->autoload([
                implode('\\', [basename(__NAMESPACE__), $lib]) => __DIR__ . DIRECTORY_SEPARATOR . $lib . '.php',
            ]);
        }

Du coup je ne comprends pas pourquoi ça fonctionne chez toi !

Trouvé : C'est `implode('\\', ['Dotclear','Plugin', basename(__NAMESPACE__), $lib])` qui pose problème, chez moi ça retourne `Dotclear\Plugin\Dotclear\Plugin\pacKman\Admin` Sachant que `basename(__NAMESPACE__)` donne `Dotclear\Plugin\pacKman`. Le code modifié qui fonctionne chez moi : ```php foreach (self::LIBS as $lib) { Clearbricks::lib()->autoload([ implode('\\', [basename(__NAMESPACE__), $lib]) => __DIR__ . DIRECTORY_SEPARATOR . $lib . '.php', ]); } ``` Du coup je ne comprends pas pourquoi ça fonctionne chez toi !
JcDenis commented 2023-01-07 12:24:37 +00:00 (Migrated from github.com)

basename(NAMESPACE) retourne paKman chez moi, et c'est bien une différence de system windows vs linux, basename() sous windows accepte les séparateurs \ pas sous Linux ... Faut que je trouve autre chose pour le faire

basename(__NAMESPACE__) retourne paKman chez moi, et c'est bien une différence de system windows vs linux, basename() sous windows accepte les séparateurs \ pas sous Linux ... Faut que je trouve autre chose pour le faire
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: JcDenis/pacKman#9
No description provided.