Bonjour a tous,

Merci pour la mise a disposition de toutes ces formations! Malgré cela, je rencontre un petit problème avec mon code.

Ce que je fais

J'ai développé une extension pour mon projet sous wordpress. Elle comporte des classes dans un dossier Class, qui contient l'autoloader, d'autres classes et des sous-dossiers d'autres classes.
Class est dans le namespace "monnamespace", et les sous dossiers dans les namespaces "monnamespace/messousnamespaces"
En local cela fonctionnait et je suis allé quasiment au bout de mon extension. Je commence à monter mon site distant, mais l'autoloader ne fonctionne pas, il me semble que ce n'est que sur les sous dossiers. J'ai vu dans les forums que certains évoquent des problèmes de majuscules mais je crois que dans mon cas tout est bon, et ca fonctionnait en local.

Mon fichier autoloader:

class Autoloader {

    static function register() {
        spl_autoload_register( array( __CLASS__ , 'autoload' ) );
    }

    static function autoload( $class ){
        if ( stripos( $class , __NAMESPACE__ . '\\Emails\\' ) === 0 ){
            $class = str_replace( __NAMESPACE__ . '\\Emails\\' , '' , $class );
            require  __DIR__ . '/Emails/' . $class. '.php';
        }

        elseif ( stripos( $class , __NAMESPACE__ . '\\Sections\\' ) === 0 ){
            $class = str_replace( __NAMESPACE__ . '\\Sections\\' , '' , $class );
            require  __DIR__ . '/Sections/' . $class. '.php';
        }

        elseif ( stripos( $class , __NAMESPACE__ . '\\Refund\\' ) === 0 ){
            $class = str_replace( __NAMESPACE__ . '\\Refund\\' , '' , $class );
            require  __DIR__ . '/Refund/' . $class. '.php';
        }

        elseif ( stripos( $class , __NAMESPACE__ . '\\Orders\\' ) === 0 ){
            $class = str_replace( __NAMESPACE__ . '\\Orders\\' , '' , $class );
            require  __DIR__.'/Orders/'.$class.'.php';
        }

        elseif ( stripos( $class , __NAMESPACE__ . '\\' ) === 0 ){
            $class = str_replace( __NAMESPACE__ . '\\' , '' , $class );
            require  __DIR__ . '/' . $class. '.php';
        }

    }

}

Ce que je veux

Quelqu'un peut-il m'orienter? Est-ce le début de l'adresse en amont de public_html? les droits sur le serveur? Les séparateurs (local sous wamp, distant sous linux) ? une erreur grossière de ma part sans doute ?

Ce que j'obtiens

Voici les erreurs en front, d'autres du même type dans le debug de worpress:
Warning: require(/home/grouzbgh/public_html/wp-content/plugins/grouplug/Class/Orders/Order_intercept.php): failed to open stream: No such file or directory in /home/grouzbgh/public_html/wp-content/plugins/grouplug/Class/Autoloader.php on line 36

(Filezilla montre bien le fichier, voici la copie de l'adresse: /public_html/wp-content/plugins/grouplug/Class/Orders/Order_Intercept.php )

Warning: require(/home/grouzbgh/public_html/wp-content/plugins/grouplug/Class/Orders/Order_intercept.php): failed to open stream: No such file or directory in /home/grouzbgh/public_html/wp-content/plugins/grouplug/Class/Autoloader.php on line 36

Fatal error: require(): Failed opening required '/home/grouzbgh/public_html/wp-content/plugins/grouplug/Class/Orders/Order_intercept.php' (include_path='.:/opt/cpanel/ea-php72/root/usr/share/pear') in /home/grouzbgh/public_html/wp-content/plugins/grouplug/Class/Autoloader.php on line 36
(si quelqu'un peut expliquer la partie addresse de include_path aux débutants?)

Merci d'avance pour vos conseils

2 réponses


PatAlgar
Auteur
Réponse acceptée

Bravo Carouge10...: pour la rapidité et le sens de l'observation. Je n'ai pas pu te répondre aussi rapidement mais c'était bien ce "i" là le problème dans l'instanciation et clairement il m'avait échappé! Je vais devoir m'interresser à bien configurer en local pour avoir la même sensibilité que le serveur distant et éviter ce genre de surprise. Merci encore pour la réactivité!

Bonsoir,
Bah justement si tu n'as pas fait d'erreur en écrivant sur le forum, le fichier Order_intercept.php n'existe pas. Toi tu as le fichier Order_Intercept.php, ce qui est différent.... attention à la casse