Bonjour,

Je rencontre un petit problème avec mon code.

J'aimerai inclure de code php depuis un autre script en php, je suis débutant, j'aimerai savoir comment faire pour pouvoir mettre un include dans un autre include avec des chemins différents.

Un exemple :

<?php

require('../../admin/MySQL/db-config.php')

session_start();
$user = $_SESSION['logged_username'];
$sql = 'SELECT `perm` FROM `users` WHERE `username` = ?';
$result = $db->prepare($sql);
$result->execute([$user]);
while ($all_result = $result->fetch())
{
    if ($all_result['perm'] == 5)
    {
        $graduation = 5;
    }
    elseif ($all_result['perm'] == 1)
    {
        $graduation = 1;
    }
}
if ($graduation == 5)
{
    $graduation_name = 'Simple membre';
}
elseif ($graduation == 1)
{
    $graduation_name = 'administateur';
}

?>

Je voudrai inclure ce script graduation.php dans un autre script avec un require, mais quand je le fais, j'ai des erreurs qui me disent que le chemin est introuvable vers ../../admin/MySQL/db-config.php si je fais un require dans un autre fichier php.

J'ai ce message d'erreur qui s'affiche "Warning: include(): open_basedir restriction in effect. File(../../admin/MySQL/db-config.php) is not within the allowed path(s)"

Je suis prenneur de toute(s) solution(s), je pourrai réecrire le code php mais ça me prendrai beaucoup de temps à chaque fois que j'ai besoin de ce code. Merci

5 réponses


Curvata
Réponse acceptée

Dans le fichier 'index.php' dans le dossier 'admin', tu inclus le fichier '../db-config.php' donc celui-ci est présent à la racine de ton projet, ensuite tu inclus depuis ton fichier 'db-config.php' le fichier 'db-users.php' qui se trouve dans le dossier 'MySQL/db' mais le dossier n'existe pas à la racine mais dans le dossier 'admin'. Donc, si j'ai bien compris la structure de tes dossiers, tu devrais faire require('admin/MySQL/db/db-users.php'); dans ton fichier 'db-config.php'

C'est quoi la structure de ton dossier ? Tu remontes peut-être trop dans tes dossiers ? Tu es en local ?

Oui justement je remonte trop bas, mais si je veux utiliser ce script php dans un autre fichier je ne peux pas,
exemple:
db-config.php : require('MySQL/db/db-users.php');
localhost/admin/index.php : require('../db-config.php');
Quand dans mon fichier admin j'inclu db-config.php, alors db-config demande à inclure MySQL/db/db-users.php du coup ça donne ce chemin là :
localhost/admin/MySQl/db/db-users.php
du coup aucun fichier n'existe, c'est pareil dans l'autre sens. Je n'ai toujours pas trouvé la solution.

Dans le fichier 'index.php' dans le dossier 'admin', tu inclus le fichier '../db-config.php' donc celui-ci est présent à la racine de ton projet, ensuite tu inclus depuis ton fichier 'db-config.php' le fichier 'db-users.php' qui se trouve dans le dossier 'MySQL/db' mais le dossier n'existe pas à la racine mais dans le dossier 'admin'. Donc, si j'ai bien compris la structure de tes dossiers, tu devrais faire require('admin/MySQL/db/db-users.php'); dans ton fichier 'db-config.php'

Normalement, il faudrait utiliser des méthodes tel que MVC, et l'autowiring.
Mais pour ton cas, si tu veux, au lieu:

  • d'utiliser des chemins relatifs. (ex: admin/myslql/user.php)
  • Utilise le chemin absolu du fichier (ex: htttp:localhost/admin/myslql/user.php)