Bonjour,
j'ai suivi le tutoriel sur altorouter et lors que je demare le seveur interne de php tous fonction mais sa chamboule avec Xampp meme sur un serveur mutialisé voici l erreur :

Wa****mairning: require(../template/.php): failed to open stream: No such file or directory in C:\xampp\htdocs\ALYIA\public\index.php on line 23

Fatal error: require(): Failed opening required '../template/.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\ALYIA\public\index.php on line 23

9 réponses


Bonjour,
Sans code c'est difficile d'aider.
De plus, on dirait qu'il te manque le nom du fichier à inclure dans le dossier template.

seurf
Auteur

<?php
require '../vendor/autoload.php';

$uri = $_SERVER['REQUEST_URI'];

$router = new AltoRouter();
$router->map( 'GET', '/', 'home', 'home');
$router->map( 'GET', '/shop', 'shop', 'shop');
$router->map( 'GET', '/about', 'about', 'about');
$router->map( 'GET', '/contact', 'contact','contact');
$router->map( 'GET', '/cart', 'cart','cart');
$router->map( 'GET', '/blog/[*:slug]-[i:id]', 'blog/article', 'article');
$match = $router->match();
if ($match !== null) {
require '../elements/header.php';
if (is_callable($match['target'])) {
call_user_func_array($match['target'], $match['params']);
}else {
$params = $match['params'];
require "../template/{$match['target']}.php";
}
require '../elements/footer.php';
}

Bonjour.
Pour commencer :

j'ai suivi le tutoriel sur altorouter

Où as-tu vu sur le site un tutoriel traitant de la librairie Altorouter ?
Il n'y en a aucun à que je sache, autant que ce soit un tutoriel spécifique à la librairie, qu'un tutoriel ou une formation qui l'utilise.
Ensuite, à quoi sert la définission de la variable $uri, si tu ne t'en sert pas ?
Pour terminer dans ta condition tu vérifies si la valeur retournée par la fonction match n'est pas null, sauf que la fonction ne retourne jamais null mais elle peut retourner false, donc soit tu remplaces if ($match !== null) par :

if ($match !== false)
// ou
if ($match != null)
// ou
if (!$match)
// ou
if (!empty($match))

Au passage, quand vous avez des problèmes de code, pensez à debogguer votre code : Déboguer son code PHP et puis :

sa chamboule avec Xampp meme sur un serveur mutialisé

Je ne vois pas ce que ça changerait entre l'un ou l'autre, sinon as-tu bien pensé à créer le fichier .htaccess ?
Source : Altorouter » Using AltoRouter : Rewrite all requests to AltoRouter.

seurf
Auteur

require '../vendor/autoload.php';

$uri = $_SERVER['REQUEST_URI'];

$router = new AltoRouter();
$router->map( 'GET', '/', 'home', 'home');
$router->map( 'GET', '/shop', 'shop', 'shop');
$router->map( 'GET', '/about', 'about', 'about');
$router->map( 'GET', '/contact', 'contact','contact');
$router->map( 'GET', '/cart', 'cart','cart');
$router->map( 'GET', '/blog/[*:slug]-[i:id]', 'blog/article', 'article');
$match = $router->match();
if (is_array($match)) {
require '../elements/header.php';
if (is_callable($match['target'])) {
call_user_func_array($match['target'], $match['params']);
}else {
$params = $match['params'];
require "../template/{$match['target']}.php";
}
require '../elements/footer.php';
}else{
echo"404";
}

Heu, si tu veux expliquer d'où tu as vu le tutoriel dont tu parles, ce serait mieux de donner le lien vers celui-ci, que ce soit sur le site ou sur YouTube, au lieu de vouloir afficher le lecteur YouTube de la vidéo en question.
Je ne te l'ai pas dit dans mon précédent message, mais tu pourrais au moins placer le code dans la balise prévue à cet effet.
De plus que tu montres du code mais tu ne dis pas s'il y a du changement avec ou non, si tu as une erreur et si c'est le cas, tu ne montres même pas l'erreur qui t'es retournée.
Encore une fois, tu définis la variable $uri, mais tu ne l'utilises à aucun moment, à croire que tu ne prends même pas en compte ce que l'on te dit.

Bonjour,

Je pense qu'il parle de ce tuto: https://www.grafikart.fr/tutoriels/router-php-1149
Le titre ne parle que de "router" mais il s'appuie de fait sur Altorouter.

Visiblement c'est la ligne "require "../template/{$match['target']}.php";" qui pose souci, le $match['target'] semble vide.
Dans le "else", as-tu esssayé un var_dump($match['target']); par exemple, pour voir ce que ça retourne ?

@Lartak le $uri est donné dans le tuto et effectivement ne sert à rien ensuite. Faut s'en prendre à l'auteur. ;)

le $uri est donné dans le tuto et effectivement ne sert à rien ensuite. Faut s'en prendre à l'auteur. ;)

Si tu veux dire l'auteur du tutoriel, je ne crois pas non, car il a défini la variable $uri au début du tutoriel car il s'en servait avant de montrer le cas avec l'utilisation de la librairie, mais ce que je lui reproches surtout, c'est de recopier son code sans prendre en compte ce que je lui ai dit dans mon message avant sa réponse, c'est à dire de ne répondre à aucune de mes questions et sans parler de la situation dans laquelle il se trouve après avoir modifié son code.

J'ai bien compris ne t'inquiète pas, je tentais de détendre un poil l'atmosphère mais c'est visiblement raté. ;)

Bref, à voir s'il va prendre en compte tes remarques et faire juste le petit test que je lui mets histoire de lever les doutes.