IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Cannot redeclare class/autoloading à partir du post #11


Sujet :

Langage PHP

  1. #21
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    D'accord : include_once dirname(__DIR__)."/includes/config.php"; mais l'autoload ? (sur ce point, je doute que ça soit un oubli)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #22
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    je reviens sur mon problème d'autoload. Si j'ai bien compris, pas besoin de namespace. Il suffit s'insérer le code de l'autoload, comme je le fais au post #15 ; c'est correct ?

    Citation Envoyé par rawsrc Voir le message
    Une fois que tu as le nom de fichier pleinement qualifié, tu peux l'inclure automatiquement.
    Ca veut dire quoi pleinement qualifié ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  3. #23
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Malgré mes recherches, j'ai pas trouvé ce que signifiait fichier pleinement qualifié. Est-ce que quelqu'un peut me renseigner ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #24
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Lis bien cette discussion, toutes les explications sont dedans.

  5. #25
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Salut,

    j'ai beau avoir regardé de nouveau cette discussion, j'ai fait ce code :

    fichier principal, lignes du début :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    include_once dirname(__DIR__)."/includes/config.php";
    require_once dirname(__DIR__).'/includes/connect/testautoloader2.php';
    include_once dirname(__DIR__)."/includes/connect/connect_mysql.php";
    ?>

    config.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    session_start();
     
    define("ROOT", "html5test");
    ?>

    testautoloader2.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    include_once dirname((__DIR__))."\config.php";
    $autoloader = function($full_class_name) {
        // on prépare le terrain : on remplace le séparteur d'espace de nom par le séparateur de répertoires du système
        $name = str_replace('\\', DIRECTORY_SEPARATOR, $full_class_name);
        // on construit le chemin complet du fichier à inclure :
        // il faut que l'autoloader soit toujours à la racine du site 
        $path = ROOT."\includes\connect\\".$name.'.php';
     
        // on vérfie que le fichier existe et on l'inclut
        // sinon on passe la main à une autre autoloader (return false)
        if (is_file($path)) {
            include $path;
        } else {
            return false;
        }
    };
     
    spl_autoload_register($autoloader);
    ?>

    connect_mysql.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php 
    //include_once dirname((__DIR__))."\config.php";
    use includes\connect\MyPdo;
     
    //// connexion
    try{
    				$bdd = new MyPdo("calendar");//("calendar");
      }
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}			
    ?>

    MyPdo.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    namespace includes\connect;  
    error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE);
    ini_set('display_errors','1'); 
     
    // MyPDO
     // ls : la classe MyPdo hérite de la classe PDO (extends)
     
    class MyPdo extends PDO {
     
    	protected $DB_NAME;
     
    	protected $HOST = "---";
     
    	protected $USER ="---";
     
    	protected $PASS ="---";
     
     
     
    // ls : le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres	
    	function __construct($db_name) {	
    	/* ls : la variable $pdo_options, ça date de ma formation de 2012 */ 
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
    	$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
    	$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
     
    	$this->DB_NAME = $db_name;
    	parent::__construct('mysql:host=' . $this->HOST . ';dbname=' . $this->DB_NAME,$this->USER,$this->PASS,$pdo_options);
     
    	}
    }	
     
    ?>

    message d'erreur :
    Class 'includes\connect\MyPdo' not found in C:\wamp64\www\vhstest160218\includes\connect\connect_mysql.php on line 7
    Donc ça n'a pas suffi...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #26
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    on va reprendre :
    On doit être clair : ton fichier principal correspond au fichier sur lequel sont redirigées toutes les requêtes ? Dans ce cas, il est toujours lu au démarrage de chaque requête, c'est bien ça, j'ai bien compris ?
    dans ton fichier principal qui doit se situer à la racine du site tu mets ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    define('DIR_ROOT', __DIR__.DIRECTORY_SEPARATOR);
     
    $autoloader = function($full_class_name) {
        // on prépare le terrain : on remplace le séparteur d'espace de nom par le séparateur de répertoires du système
        $name = str_replace('\\', DIRECTORY_SEPARATOR, $full_class_name);
        // on construit le chemin complet du fichier à inclure :
        // il faut que l'autoloader soit toujours à la racine du site
        $path = DIR_ROOT.$name.'.php';
     
        // on vérfie que le fichier existe et on l'inclut
        // sinon on passe la main à une autre autoloader (return false)
        if (is_file($path)) {
            include $path;
            return true;
        } else {
            return false;
        }
    };
     
    spl_autoload_register($autoloader);
    Pour ta classe PDO, tu va faire comme ça :
    - tu va créer un dossier à la racine du site Bdd, ensuite dans ce dossier tu va créer fichier nommé PDOCalendar.php dans lequel tu va mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
     
    namespace Bdd;  // ICI ÇA CORRESPOND AUX NOMS DES RÉPERTOIRES CONTENANT LE FICHIER -> L’ARBORESCENCE DEPUIS LA RACINE DU SITE 
     
    use PDO;
     
    /**
     * @throws \PDOException
     */
    class PDOCalendar
    {
        const DB_NAME = 'calendar';
        const HOST    = '';
        const USER    = '';
        const PASS    = '';
     
        /**
         * @var \PDO
         */
        private static $cnx = null;
     
        /**
         * @return \PDO
         * @throws \PDOException
         */
        public static function getPDO()
        {
            // si la connexion n'a pas déjà été ouverte, on l'ouvre sinon on la renvoie (SINGLETON)
            if (self::$cnx === null) {
                // ouverture de la connexion
                $options = [
                    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
                    \PDO::ATTR_EMULATE_PREPARES   => false,
                    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_OBJ,
                    \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
                ];
     
                $dsn = 'mysql:host='.self::HOST.';dbname='.self::DB_NAME;
                $pdo = new \PDO($dsn, self::USER, self::PASS, $options);
                self::$cnx = $pdo;            
            }
     
            return self::$cnx;
        }
    }
    Ensuite dans ton code, partout où tu auras besoin d'un accès au données tu devras juste faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
     
    use Bdd\PDOCalendar;
     
    $pdo = PDOCalendar::getPDO();
    Comme tu peux le voir, tu n'as plus aucune inclusion à faire, le PHP se débrouille tout seul.
    L'auto-chargement transforme le nom de la classe pleinement qualifié : Bdd\PDOCalendar en un fichier DIR_ROOT/Bdd/PDOCalendar.php, puis vérifie que ce fichier existe et si oui, l'inclut pour toi.

    Si tu ne comprends pas ceci, je ne sais pas comment délayer encore plus mes explications.

  7. #27
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    en fait mon code ne fonctionne pas comme tu le penses. Ce n'est pas de la POO et donc il n'y a pas de contrôleur pour recevoir toutes les requêtes et appeler le bon code. Mes différentes pages sont au niveau 1 et si on dit que la racine est au niveau 0, ces pages sont codées comme cela :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <title>titre du site</title>
    <link href="../css/style-menu2.css" rel="stylesheet"/>
    <meta charset="UTF-8"/>
    <!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    </head>
    <body>
    <header>
    <?php include("../entete.php"); ?>
    </header>
    <nav>
    <?php include("../menu3.php"); ?>
    </nav>
     
    <section id="id_section">
    <article id="article0">
    squelette
    </article>
     
    </section>
    <footer>
    <?php include("../footer.php"); ?>
    </footer>
     
     
    </body>
    </html>
    donc un répertoire pour chaque page et ces différents répertoires sont des sous-répertoires de la racine.
    Donc si je dois créer un fichier principal qui soit à la racine et appelé à chaque fois, je pense modifier le menu et donc pour chaque rubrique, faire un lien vers un fichier unique index.php avec un paramètre indiquant la page à ouvrir et dans ce fichier index.php faire une redirection vers la page indiquée par le paramètre. Est-ce une bonne méthode ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #28
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    donc un répertoire pour chaque page et ces différents répertoires sont des sous-répertoires de la racine.
    Donc si je dois créer un fichier principal qui soit à la racine et appelé à chaque fois, je pense modifier le menu et donc pour chaque rubrique, faire un lien vers un fichier unique index.php avec un paramètre indiquant la page à ouvrir et dans ce fichier index.php faire une redirection vers la page indiquée par le paramètre. Est-ce une bonne méthode ?
    Presque, il t'est tout à fait possible de faire un tout petit contrôleur (genre micro-contrôleur) qui ne fera que appeler le bon fichier .php en fonction de l'URL reçue.
    Allez je te montre ça dans 10 minutes

  9. #29
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Donc l'idée est simple : tu continues à utiliser ton site tel quel surtout au niveau des chemins : https://www.tonsite.com/admin/journal/add ou https://www.tonsite.com/admin/journal/add.php mais en arrière plan tu centralises tous tes appels vers index.php qui devient ton unique point d'entrée du site et à partir de ce point tu décides quel fichier exécuter.

    Cette approche t'ouvre la porte du concept MVC plus précisément tu touches du doigt le Contrôleur (Front controller).
    Voici le code d'un micro-contrôleur (de mon cru) qui fait exactement ce que j'ai décrit juste avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    // micro-contrôleur
    // récupération du path de l'url
    $path  = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
    $path  = rtrim($path, '.php');
    // quand la page demandée est différente du point d'entrée du site index.php
    // on analyse la demande et on essaie de trouver un fichier qui serait suceptible
    // de prendre en charge la requête
    if ($path !== '') {
        $parts = explode('/', $path);
        // on vérifie que les valeurs du tableau ne sont que des 0..9 a..z A..Z
        foreach ($parts as $p) {
            if ( ! ctype_alnum($p)) {
                exit('Erreur dans la requête');
            }
        }
        // transformation du path du chemin de l'URL en chemin de fichier
        $file = DIR_ROOT.implode(DIRECTORY_SEPARATOR, $parts).'.php';
     
        if (is_file($file)) {
            // on passe la main au fichier en charge de fournir une réponse à la requête
            include $file;
            exit;
        } else {
            exit('Erreur dans la requête');
        }    
    }
     
    // ici tu mets code source de la page index.php à envoyer à l'utilisateur
    et donc ton fichier index.php devient (avec l'autoloader et maintenant avec le micro-contrôleur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <?php
     
    define('DIR_ROOT', __DIR__.DIRECTORY_SEPARATOR);
     
    $autoloader = function($full_class_name) {
        // on prépare le terrain : on remplace le séparteur d'espace de nom par le séparateur de répertoires du système
        $name = str_replace('\\', DIRECTORY_SEPARATOR, $full_class_name);
        // on construit le chemin complet du fichier à inclure :
        // il faut que l'autoloader soit toujours à la racine du site
        $path = DIR_ROOT.$name.'.php';
     
        // on vérfie que le fichier existe et on l'inclut
        // sinon on passe la main à une autre autoloader (return false)
        if (is_file($path)) {
            include $path;
            return true;
        } else {
            return false;
        }
    };
     
    spl_autoload_register($autoloader);
     
    // micro-contrôleur
    // récupération du path de l'url
    $path  = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
    $path  = rtrim($path, '.php');
    // quand la page demandée est différente du point d'entrée du site index.php
    // on analyse la demande et on essaie de trouver un fichier qui serait suceptible
    // de prendre en charge la requête
    if ($path !== '') {
        $parts = explode('/', $path);
        // on vérifie que les valeurs du tableau ne sont que des 0..9 a..z A..Z
        foreach ($parts as $p) {
            if ( ! ctype_alnum($p)) {
                exit('Erreur dans la requête');
            }
        }
        // transformation du path du chemin de l'URL en chemin de fichier
        $file = DIR_ROOT.implode(DIRECTORY_SEPARATOR, $parts).'.php';
     
        if (is_file($file)) {
            // on passe la main au fichier en charge de fournir une réponse à la requête
            include $file;
            exit;
        } else {
            exit('Erreur dans la requête');
        }    
    }
     
    // ici tu mets le code source de la page index.php à envoyer à l'utilisateur ou un include du genre accueil.php
    Pour que cela fonctionne tu dois indiquer au serveur web (Apache par exemple) de rediriger toutes les requêtes vers ton unique point d'entrée du site index.php
    Tu rediriges tout sauf les requêtes réclamant des fichiers de base du genre .css, .js .jpg .png ...
    Je pars du postulat de base que tes css sont dans un répertoire /css, javascript dans /js et images dans /img
    Voici ce qu tu dois ajouter dans le fichier de configuration d'apache :
    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RewriteEngine On
    RewriteCond %{REQUEST_URI} /(index)|(home)(\..{3,4})?$ [NC]
    RewriteRule ^.* http://www.tonsite.fr [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !^/css/.*$
    RewriteCond %{REQUEST_FILENAME} !^/js/.*$
    RewriteCond %{REQUEST_FILENAME} !^/img/.*$
    RewriteRule . /index.php [QSA,L]
    Une fois le fichier de configuration modifié, n'oublie pas de redémarrer le serveur web Apache pour qu'il prenne en compte la nouvelle configuration.

    Bon ça fait un gros pavé mais ça devrait te servir et aux autres aussi

  10. #30
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Ouh là là !

    autant le code de l'autoloader, je suivais, mais là, le micro-contrôleur, je suis largué (sans oublier le code du post #26). Bon ce soir et demain dans la journée, pas le temps d'y toucher mais je garde ça pour demain soir...

    et la modif de la config apache, ça concerne bien un fichier httpd.conf ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #31
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Bon, j'ai laissé ça de côté plusieurs jours, mais je m'y remets.

    Déjà, que me conseilles-tu ? Tenter de comprendre ton code avant de l'utiliser (ce qui n'est pas du tout le cas pour le moment) ou faire confiance et l'utiliser comme une boîte noire ?

    Et même si je pars sur l'option boîte noire, je ne vois pas comment m'y prendre : quel type d'URL va rentrer l'utilisateur et où est le menu ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  12. #32
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    je ne sais pas comment t'as l'habitude de procéder, donc comment faire je n'en sais rien.
    Ensuite pour les URL je ne vois pas où est le problème.
    Tes URL ne changent pas, tu continues à les utiliser comme avant, tu continues à créer tes fichiers PHP comme avant avec l'arborescence comme avant, bref ça ne change presque rien pour toi sauf qu'au lieu d'avoir un point d'entrée à chaque URL, tu n'auras plus qu'une seule et unique porte d'entrée pour tout le site ce qui te permettra de charger simplement un environnement d'exécution personnalisé avec tes fonctions, classes et modules communs à tout le site sans être obligé d'aller faire du gymkhâna pour gérer tes inclusions.

  13. #33
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Salut,
    même si je tente d'utiliser ton code sans chercher à le comprendre, je ne vois pas comment l'utiliser.
    Dans mon code actuel, chaque page a la structure suivante :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <title>titre du site</title>
    <link href="../css/style-menu2.css" rel="stylesheet"/>
    <meta charset="UTF-8"/>
    </head>
    <body>
    <header>
    <?php include("../entete.php"); ?>
    </header>
    <nav>
    <?php include("../menu3.php"); ?>
    </nav>
     
    <section>
    <article>
    <?php
    //code de la page
    ?>
    </article>
     
    </section>
    <footer>
    <?php include("../footer.php"); ?>
    </footer>
     
     
    </body>
    </html>
    Donc tu vois qu'à la ligne 13, j'inclue le menu, et effectivement pour chaque page, j'ai un point d'entrée spécifique. Et donc, dans ce menu, pour atteindre une page, l'URL (relative) est de la forme ../rép._de_la_page/page.php et donc l'URL d'une des pages du site est http://mon_site/rép._de_la_page/page.php. Je suppose donc qu'il faudra au moins enlever cet include (et est-ce que je laisse les autres ? (en-tête, footer et css (pas un include celui-là, mais quand même code commun à tout le site)). Mais en y réfléchissant, il faut bien y avoir un menu, donc plutôt garder l'include et modfier le menu, mais comment ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  14. #34
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    le micro-contrôleur va analyser l'url reçue : http://mon_site/rép._de_la_page/page.php et va vérifier s'il existe un fichier rep_racine_du_site/rep_de_la_page/page.php, si oui va l'inclure comme s'il était appelé directement

  15. #35
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    OK mais si je laisse le menu tel quel, le micro-contrôleur ne sera pas appelé, vu qu'on appelera http://mon_site/rép._de_la_page/page.php et non http://mon_site/index.php donc d'après moi, ça ne peut pas marcher...à moins que la modif de la config de apache ne soit là pour ça ! Tu peux confirmer ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  16. #36
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Oui, il faut modifier la configuration d'Apache.
    C'est le serveur web qui se charge de rediriger tout le trafic sur la page d'index.php

  17. #37
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Je suis pour le test sous wamp. J'ai modifié httpd.conf comme indiqué et créé index.php (copier-coller du code du post 29) mais
    Erreur dans la requête
    quand j'entre l'URL http://mon_site/index.php
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  18. #38
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    bon, j'ai testé chez moi et le micro-contrôleur fonctionne sans soucis.
    Tiens vérifie un truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $file = DIR_ROOT.implode(DIRECTORY_SEPARATOR, $parts).'.php';
    echo $file;
    exit;
    Vérifie que le fichier appelé existe bien.

  19. #39
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Bonsoir, j'ai investigué un peu plus et je pense avoir découvert l'origine du problème mais ne sais pas le résoudre :
    testmvc/index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	$imp=implode(DIRECTORY_SEPARATOR, $parts);
            $file = DIR_ROOT.implode(DIRECTORY_SEPARATOR, $parts).'.php';
    	echo $file." ////DIR_ROOT=".DIR_ROOT."<br/>";
    	var_dump($parts);
    	var_dump($imp);
    	exit;
    donne
    /var/www/vhosts/vercorshandisport.org/httpdocs/testmvc/testmvc/index.php ////DIR_ROOT=/var/www/vhosts/vercorshandisport.org/httpdocs/testmvc/
    array(2) { [0]=> string(7) "testmvc" [1]=> string(5) "index" } string(13) "testmvc/index"
    EDIT : j'ai testé sur serveur
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  20. #40
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ben le comportement que tu obtiens est tout à fait normal.
    Tu réclames l'url : testmvc/index.php
    Vu que DIR_ROOT=/var/www/vhosts/vercorshandisport.org/httpdocs/testmvc/ le chemin vers le fichier appelé est DIR_ROOT/testmvc/index.php ce qui donne une fois les éléments résolus : /var/www/vhosts/vercorshandisport.org/httpdocs/testmvc/testmvc/index.php

    Demande donc juste index.php ou juste la racine du site sans index.php

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [1.x] Erreur installation, cannot redeclare class sfDoctrineBaseTask
    Par __fabrice dans le forum Symfony
    Réponses: 13
    Dernier message: 31/05/2010, 13h09
  2. Réponses: 2
    Dernier message: 10/01/2010, 17h39
  3. [Dates] Fatal error : Cannot redeclare class
    Par ediawara dans le forum Langage
    Réponses: 10
    Dernier message: 27/11/2007, 14h47
  4. [Wamp] cannot redeclare class maClasse
    Par pcdj dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 10/01/2007, 08h03
  5. Cannot redeclare class...
    Par DeezerD dans le forum Langage
    Réponses: 4
    Dernier message: 02/11/2005, 18h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo