Bonjour,
J'ai un petit problème avec la fonction mkdir(). En fait cette fonction ne me pose pas problème en elle-même, puisque je l'ai testé ailleurs, et je comprends bien son fonctionnement.
Mais dans mon site utilisant le principe de ce MVC, je n'arrive pas à lui fournir le chemin appropiré à mon cas.

Voici comment j'appelle une image dans mes vues.

// Ceci fonctionne très bien dans mes vues
<?php echo BASE_URL.DS.'webroot'.DS; ?>img/image.png

J'utilise une fonction register dans mon controller users, donc usersController, qui utilise elle-même une fonction du model User, qui s'appelle "creerEspaceMembre()".
Cette fonction creerEspaceMembre() devra enregistrer un dossier qui aura pour nom, l'id d'un utilisateur. Ce dossier devra être créer dans le dossier img du dossier webroot.
Je fais donc ceci :

// Cette fonction prend donc en paramètres un tableau données qui concerne le nouveau membre
public function creerEspaceMembre($data) {
$path = BASE_URL.DS.'webroot'.DS.'img'.$data->id;
return mkdir($path);
}
// Lorsque j'execute la fonction, MAMP m'avertit que le chemin fourni dans mkdir() n'est pas correcte

// J'ai donc essayé ceci, qui convient en local, mais qui ne fonctionnera pas une fois le projet déployé
public function creerEspaceMembre($data) {
$path = '/Users/olivierbaisse/Desktop/Sites/ZRT/webroot/img/membre'.$data->id;
return mkdir($path);
}

Je me prends la tête la dessus depuis déjà un bon moment, et je suis sûr que mon erreur est ridicule.

Merci d'avance à la personne qui a la solution à mon problème.

3 réponses


Typhon
Réponse acceptée

Je crois que tu confonds l'utilisation de la constante BASE_URL et de la constante ROOT.

Si ce que tu veux c'est générer un lien dans le code HTML tu dois utiliser BASE_URL, par contre ci ce que tu veux, c'est générer une chemin physique sur ton serveur, tu dois te servir de ROOT.

Dis moi ce que cela donne si tu fais comme ceci
$path = ROOT.DS.'webroot'.DS.'img'.$data->id;

SacreOl
Auteur

C'est sympa pour l'explication de la différence entre les constantes ROOT et BASE_URL, j'avais du mal en effet à les comprendre. C'est pourquoi ton mérite ton point pour un futur badge. =)
Mais j'ai finalement trouvé ma réponse un peu loin dans le tutoriel gràce à la méthode webroot($url) qui permet de faire tout le boulot.
Mais merci encore pour l'explication.

SacreOl
Auteur

Voici l'erreur à laquelle j'ai droit

Forbidden
You don't have permission to access / on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.