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.

12 réponses


visiblement, une erreur de syntaxe dans ton require. Regardes si l'as bien saisi.

jvnet
Auteur

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.

require('somefile.php');
Où as tu fais le require ?
Utilises tu un autoloader ?

On peut avoir l'ensemble du contenu du fichier qui fait le require ?

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);
jvnet
Auteur

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;
}
jvnet
Auteur

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;
    }