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 :

autoload veut pas marcher


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut autoload veut pas marcher
    Bonjour,

    je crée une nouvelle discussion pour avoir un titre juste...

    Je me suis inspiré du code que me conseillait rawsrc dans https://www.developpez.net/forums/d1...-post-sharp11/ mais ça veut pas :
    Fatal error: Class 'bdd\PDOCalendar' not found in C:\wamp64\www\vhstest031217\index.php on line 8
    voici mon code :
    index.php (à la racine)) :
    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
    include "autoloader/autoloader.php";
    $rep=$_GET['rep'];
    $page=$_GET['page'];
     
    use bdd\PDOCalendar;
     
    $bdd = PDOCalendar::getPDO();
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <title>index</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>
    <?php 	require_once((__DIR__).'/_includes/html0-topPHP.php'); // INIT + FONCTIONS et autres config en PHP ?>
    <header>
    <?php include("entete.php"); ?>
    </header>
    <nav>
    <?php include("menu3.php"); ?>
    </nav>
    <SCRIPT LANGUAGE="JavaScript">
    <?php $adresse=$rep."/".$page.".php";?>
    document.location.href="<?php echo $adresse;?>";
    </SCRIPT>
     
     
    </body>
    </html>

    autoloader.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
    <?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);
    ?>

    menu3.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
     <div class="page">
    <ul class="menu">
     
    <li ><a href="../index.php?rep=accueil&page=accueil">Accueil</a></li>
     
     
    <li><a href="#">Photos</a>
    	<ul>
     
    		<li><a href="#" class="plus">Evénements</a>
    				<ul class="col_2 col3_decal">
    					<li><a href="../index.php?rep=CPF_2015&page=CPF_2015">Championnats de France ski nordique handisport 2015</a></li>
    					<li><a  ="../index.php?rep=bessans2017&page=bessans17">Marathon de Bessans 2017</a></li>
    				</ul>
    		</li>
    etc
    Quel est le souci ?

  2. #2
    Membre émérite
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 340
    Par défaut
    Bonjour,
    On a :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    include "autoloader/autoloader.php";
    Par conséquent, dans "autoloader.php" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    define('DIR_ROOT', __DIR__.DIRECTORY_SEPARATOR);
    ...
    $path = DIR_ROOT.$name.'.php';
    $path contiendra le dossier "autoloader".
    Or, je suppose que le dossier "bdd" n'est pas dans "autoloader".

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    excellent. J'ai corrigé dans autoloader.php define('DIR_ROOT', dirname(__DIR__).DIRECTORY_SEPARATOR); et y a plus d'erreur

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    Salut laurentSc

    Si tu suivais précisément les instructions données, tu éviterais bien des écueils...
    Regarde ce qui est écrit dans l'autoloader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // on construit le chemin complet du fichier à inclure :
    // il faut que l'autoloader soit toujours à la racine du site
    $path = DIR_ROOT.$name.'.php';
    Si tu ranges le fichier autloader.php dans le répertoire autoloader, tu n'es plus à la racine du site...

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je reviens sur ce sujet après une "petite" pause En fait, non pas dodo car j'ai fait avancé autre chose. Néanmoins, j'ai encore un problème car si je mets l'autoloader tel qu'il m'a été donné (et cette fois, à la racine du site !), dès que j'appelle la page principale (qui est tout le temps appelée vu qu'elle joue le rôle de controller), page blanche, au lieu d'aller sur la page demandée.

    Le code actuel :
    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
    <?php
    include "autoloader.php";
    $rep=$_GET['rep'];
    $page=$_GET['page'];
     
     use bdd\PDOCalendar;
    $bdd = PDOCalendar::getPDO();//var_dump($bdd);exit();*/
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <title>index</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>
    <?php 	require_once((__DIR__).'/_includes/html0-topPHP.php'); // INIT + FONCTIONS et autres config en PHP ?>
    <header>
    <?php include("entete.php"); ?>
    </header>
    <nav>
    <?php include("menu3.php"); ?>
    </nav>
    <SCRIPT LANGUAGE="JavaScript">
    <?php 
    if (empty($rep)&&empty($page)) $rep=$page="accueil";
    $adresse=$rep."/".$page.".php";//$adresse="http://localhost/vhstest031217/".$rep."/".$page.".php";?>
    document.location.href="<?php echo $adresse;?>";
    </SCRIPT>
    </body>
    </html>

    autoloader.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
    <?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 :a
        // 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);
    ?>

    La page blanche, c'est si je décommente les lignes 6 et 7 de la page principale. Est-ce que j'ai donné toutes les informations nécessaires pour qu'on puisse m'aider ?

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    Salut,

    essaie avec ce code :
    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
    <?php
     
    include "autoloader.php";
     
    use bdd\PDOCalendar;
     
    $bdd  = PDOCalendar::getPDO();
    $rep  = $_GET['rep']  ?? false;
    $page = $_GET['page'] ?? false;
     
    $body = DIR_ROOT.'accueil.php'; // par défaut on sert la page d'accueil
     
    if (($rep !== false) && ($page !== false)) {
        // si autre page demandée, on vérifie que le fichier qui en est en charge existe bien et on le charge
        if (substr($page, -4) !== '.php') {
            $page .= '.php';
        }
        $path = DIR_ROOT.$rep.DIRECTORY_SEPARATOR.$page;
        if (is_file($path)) {
            $body = $path;
        }
    }
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <title>index</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>
    <?php require_once DIR_ROOT.'_includes'.DIRECTORY_SEPARATOR.'html0-topPHP.php'; // INIT + FONCTIONS et autres config en PHP ?>
    <header>
    <?php include 'entete.php'; ?>
    </header>
    <nav>
    <?php include 'menu3.php'; ?>
    </nav>
    <?php include $body; ?>
    </body>
    </html>
    N'oublie pas qu'avec ce système toutes les url doivent être de la forme
    index.php?rep=répertoire&page=une_page_du_site

Discussions similaires

  1. [OpenOffice][Tableur] bouton qui ne veut pas marcher (macro assignée ne se déclenche pas)
    Par mipps dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 12/01/2009, 12h16
  2. public class ne veut pas marcher!
    Par jerem721 dans le forum Graphisme
    Réponses: 3
    Dernier message: 19/09/2007, 20h45
  3. [MySQL] INSERT INTO qui ne veut pas marcher
    Par Tee shot dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/03/2007, 17h42
  4. mon "insert" ne veut pas marcher !!
    Par harlock59 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 02/01/2006, 13h17
  5. Réponses: 14
    Dernier message: 16/05/2005, 13h20

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