Bonjour,
je debute en php, j'ai une class panier en php inspiré du site grafikart qui a besoin les parametres de connexion de la bdd, mais ces parametres existent deja dans un fichier à la racine sur mon serveur, comment peut on faire appal à ce fichier pour que ma class puisse utiliser ces paramettres de connexion de la bdd sans devoir à redefinir tout ça dans ma classe.
j'ai essayé avec un require("monfichierde config.php"), cela m'envoie une erreur " Parse error: syntax error, unexpected 'require"
Merci pour votre lumière.
Non, je ne pense pas au problème de syntaxe, j'ai verifié plusieurs fois, c'est peut ^stre la classe qui n'accepte pas un include ou require d'un fichier exterieur, la portée du fichier est peut retrainte. je n'en rien, mais pour une classe on doit pouvoir renseigner comment aller chercher ces informations autrement. Sauf l'avis d'un expert peut m'éclaicir la-dessus.
merci à toi quand même.
La syntaxe la plus simple :
require 'path/to/file.php';
Il n'est pas nécessaire depuis quelques versions d'ajouter les parenthèses...
Mais il faut donner le chemin EXACT vers ton fichier (en relatif : '../repertoire/fichier.php' pour retrourner vers la racine de ton répertoire, ou en absolu en pointant exactement l'endroit où il se trouve sur ton serveur)
Sur le require tu peut pour trouver facilement le chemin une constante qui existe dans php qui est :
$chemin = "chemin vers ton fichier depuis le dossier ou est ton fichier qui utilise le code/file.php";
require __DIR__."/".$chemin;
exemple :
ma class est dans : RACINE/php/class/maclass.php
mon fichier en inclusion : RACINE/include/myfile.php
ca donne :
$chemin = "../../include/myfile.php";
require __DIR__."/".$chemin;
Esceque j'ais été clair ?
Si non peut t'on avoir le rendu erreur d'un :
error_reporting(E_ALL);
ini_set('display_errors', 1);
Bonjour,
ça marche toujours pas, des erreurs impossible de communiquer avec un fichier venant de l'extérieur de la classe.
voici ma configuration actuelle.
class DB{
require("../mondossier_config/connex_configuration.php");
private $db;
public function __construct($host = null, $database = null, $username = null, $password = null){
if($host != null){
$this->host = $host;
$this->database = $database;
$this->username = $username;
$this->password = $password;
}
...
// dans mon fichier config à la racine à 1 niveau en dessous du dossier contenant ma classe
// ../mondossier_config/connex_configuration.php
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'mydatabase_test';
Hors, si j'écris ces paramètres directement dans la classe à la place de mon require(), cela fonctionne sans pb.
L'inconvénient quand je change des paramètres dans ma config, si j'oublie de les changes pour la classe ça plate tout.
si vous pouvez me guider.
Slt, met ton require ou include en dehors de la class, je veux dire avant : class DB ... cependant si un fichier viens d'un site web ou d'un serveur distant regarde dans le fichier php.ini pour activer cette option.
TJ_
require("../mondossier_config/connex_configuration.php");
class DB{
private $db;
public function __construct($host = null, $database = null, $username = null, $password = null){
if($host != null){
$this->host = $host;
$this->database = $database;
$this->username = $username;
$this->password = $password;
}
Slt, Merci pour cette réponse, mais j'ai deja tenté de mettre le require à l'exterieur de la classe ça marche pas non plus. Il faut que je precise dans la classe les variables de connexion sont declarées en private , voilà la vraie structure de la classe:
class DB{
private $host = 'localhost';
private $username = 'root';
private $password = '';
private $database = 'mydatabase_test';
private $db;
public function __construct($host = null, $database = null, $username = null, $password = null){
if($host != null){
$this->host = $host;
$this->database = $database;
$this->username = $username;
$this->password = $password;
}
Les erreurs sont du type : Parse error: syntax error, unexpected 'include' (T_INCLUDE), expecting function (T_FUNCTION) in...(quand include() est à l'interieur de la classe)
ou Notice: Undefined property: DB::$host in L:\wamp\www... (quand include() est à l'exterieur de la classe)
Pour info : Mon serveur est en local sur WAMP 2.4 il n'y a pas de connexion distante.
Alors là par contre... si tu as une class de connexion à ta base de donnée... pourquoi diable veux tu créer et inclure un fichier contenant les variables de connexion ?
Tu peux te faire le fichier de configuration retournant un tableau de paramètres et une méthode (dans ta classe db) pour récupérer les paramètres du style :
private $settings = [];
// $file
public function __construct($file)
{
$this->settings = require($file);
$this->host = $this->get('host');
// etc...
}
public function get($key)
{
if( isset($this->settings[$key]) )
{
return $this->settings[$key];
}
return null;
}