Salut tout le monde !

Je me suis lancé sur un projet depuis peu, et après avoir commencer à le coder de mon côté je me suis enfin décidé à voir les tutos de A à Z et de faire mon site en MVC en parallèle. Mais petit problème, j'ai une erreur et je capte pas du tout d'où elle provient j'ai pourtant comparer 100 fois mon code avec celui de Grafikart, je vois pas le problème ..
Voici le code erreur :

Warning: require(./core/includes.php) [function.require]: failed to open stream: No such file or directory in /home/tpebalis/www/Life/webroot/index.php on line 9
Fatal error: require() [function.require]: Failed opening required './core/includes.php' (include_path='.:/usr/share/php5') in /home/tpebalis/www/Life/webroot/index.php on line 9

Et voici mon code de la page webroot/index.php :

<?php
define('WEBROOT',dirname( __FILE__ ));
define('ROOT', dirname('WEBROOT'));
define('DS',DIRECTORY_SEPARATOR);
define('CORE',ROOT.DS.'core');
define('BASE_URL', dirname(dirname($_SERVER'SCRIPT_NAME'])));
require CORE.DS.'includes.php';
new Dispatcher;
?>

Merci d'avance !

8 réponses


Il manque un point devant le slash de core.

Babou
Auteur

De quoi?
Je vois pas de quoi tu parles :p

Normalement, un require est codé comme ça:

require "../core/includes.php"

Mais dans ton message d'erreur c'est écrit "./core/includes.php".

Après je ne peut pas d'aidé de plus je ne n'ai pas regardé le tuto.

Tu peux nous donner l'arborescence de tes dossiers et ou est placé ton fichier index.php ?

@palmer

Quand tu fais ./core/includes.php dans ton index.php cela veut dire que le dossier core est au même niveau que index.php et cela revient au même que faire core/includes.php.

Et ../core/includes.php cela veut dire que tu recule d'un dossier.

Donc son erreur viens pas de là et je sais pas d'ou elle vient tu as regardé sur google si il y avait des solutions

Dans certains cas le include './core/fichier.php' ne revient pas au même que sans le './' devant.
Mais ici il n'y a aucune différence. L'erreur vient du positionnement de ton fichier core par rapport à l'appel que tu en fais dans l'index.php.
Pour qu'on puisse te guider, il faut que tu nous donnes ton arborescence.

Babou
Auteur

Mon arborescence est :

Controller -> PageController.php
Core -> Controller.php + dispatcher.php + includes.php + request.php + router.php
Model ->
View -> Errors -> 404.php
     -> Layout -> default.php
     -> Pages -> index.php
Webroot -> Css -> style.css
        -> Image
        -> index.php

J'ai rajouter "../" et ca marche beaucoup mieux merci :D
Mais maintenant j'ai 3 autres erreurs.. Les voici :

Notice: Undefined index: PATH_INFO in C:\wamp\www\Life\core\request.php on line 7
Warning: require(.\controller\Controller.php) [function.require]: failed to open stream: No such file or directory in C:\wamp\www\Life\core\dispatcher.php on line 29
Fatal error: require() [function.require]: Failed opening required '.\controller\Controller.php' (include_path='.;C:\php\pear') in C:\wamp\www\Life\core\dispatcher.php on line 29

Et voici mes pages request.php et dispatcher.php :
request.php :

<?php
class Request{

    public $url; // URL appellé par l'utilisateur

    function __construct(){
        $this->url = $_SERVER'PATH_INFO'];
    }

}
?>

Et dispatcher.php :

<?php
class Dispatcher{

    var $request;

    function __construct(){
        $this->request = new Request();
        Router::parse($this->request->url,$this->request);
        $controller = $this->loadController();
        if(!in_array($this->request->action,get_class_methods($controller))){
            $this->error('Le controller '.$this->request->controller.' n\'a pas 
            de méthode '.$this->request->action);
        }
        call_user_func_array(array($controller,$this->request->action),$this->request->params);
        $controller->render($this->request->action);
    }

    function error($message){
    header("HTTP/1.0 404 Not Found");
        $controller = new Controller($this->request);
        $controller->set('message', $mesage);
        $controller->render('/errors/404');
        die();
    }

    function loadController(){
        $name = ucfirst($this->request->controller).'Controller';
        $file = ROOT.DS.'controller'.DS.$name.'.php';
        require $file;
        return new $name($this->request);

    }

}
?>

Une idée ? :)

Ligne 7 de request.php : $this->url = (isset($_SERVER'PATH_INFO'])) ? $_SERVER'PATH_INFO'] : '/';
Ligne 28 de dispatcher : $file = ROOT.DS.'Core'.DS.$name.'.php';