variables déja déclarée

Eléphant du PHP | 254 Messages

29 sept. 2008, 19:07

Bien l'bonjour,

J'ai un petit séchage la ...

Code : Tout sélectionner

Notice: Constant DB_HOST already defined in C:\EasyPHP 2.0b1\www\ExternalTD\class\databaseconfig.inc on line 14
Bon je sais bien ce que ce message veux dire, mais bon après une recherche sur la string "DB_HOST" dans l'intégralité de mon projet, je n'obtiens pas le renseignement voulut :

resultat de recherche :

Code : Tout sélectionner

class\databaseconfig.inc (14): define ( "DB_HOST" , "localhost" ) ; class\mysqldb.inc (26): function MysqlDb ( $Host=DB_HOST, $User =DB_LOGIN, $Pass = DB_PASS, $Db =DB_NAME ) class\mysqldb.inc (29): $this->Host = DB_HOST ;
De plus la recherche pour savoir ou est ce que j'inclue ce fichier databaseconfig.inc me donne ceci:

Code : Tout sélectionner

EntityObject.php (7):include_once "class/databaseconfig.inc" ; index.php (20): include_once "class/databaseconfig.inc" ; ui\Admin\pythonpopup.php (83):include_once "../../class/databaseconfig.inc" ; ui\Map\mappopframe.php (55):include_once "../../class/databaseconfig.inc" ; ui\Text\textpopup.php (12):include_once "../../class/databaseconfig.inc" ;
tout mes include étant des include_once sur ce fichier je ne sais plus trop ou chercher, quelqu'un a t'il déjà eu un problème similaire ?
Pour info cette application a été développée en phph4 et je fais le portage sur php5 en ce moment

merci :)

Eléphanteau du PHP | 20 Messages

30 sept. 2008, 00:32

c'est peut-être ton php qui date:
Ce comportement a changé en PHP 5 - le chemin est normalisé d'abord, donc, le fichier C:\PROGRA~1\A.php est reconnu comme étant identique au fichier C:\Program Files\a.php et le fichier ne sera inclus qu'une seule fois.

Eléphant du PHP | 254 Messages

30 sept. 2008, 00:49

Oui mon PHP date c'est clair, c'est une appli qui a été commencée il y a 4 ans, seulement dans mon cas il me signale une double déclaration, or je ne trouve la ligne

Code : Tout sélectionner

define ( "DB_HOST" , "localhost" ) ;
qu'une seule fois dans mon projet, et le fichier dans lequel se trouve cette ligne est unique, et est inclu a chaque fois avec des "include_once"

D'où ma perplexité :)

ViPHP
fab
ViPHP | 2657 Messages

30 sept. 2008, 04:09

je pense qu'il voulait dire que ta version de PHP date :p
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 254 Messages

30 sept. 2008, 11:31

Huhu ok :p

Mais en fait je bosse sur easyphp 2.0.0.0, donc il me semble sur du PHP5

Eléphant du PHP | 254 Messages

10 oct. 2008, 22:24

Té désolé de revenir dessus mais je developpe le reste du projet, et j'ai toujours ce notice en haut de page, ma version est PHP Version 5.2.0, l'appication a été developpée a l'origine en php4

- Y aurait il un probleme avec les include_once ?

- la syntaxe
function MysqlDb ( $Host=DB_HOST, $User =DB_LOGIN,  $Pass = DB_PASS, $Db =DB_NAME )
est elle dépréciée en php5 ?

J'aurais bien besoin du quart du début d'une piste :)

ViPHP
ViPHP | 2287 Messages

10 oct. 2008, 23:37

Il y a deux possibilités : soit cette constante est définie plusieurs fois dans le même fichier (problème d'include_once dont tout le monde parlait jusqu'à maintenant), soit elle est définie ailleurs (cette possibilité n'a pas été totalement éliminée).

Pour être sûr il te faut faire une recherche sur l'ensemble des fichiers en recherchant l'instruction define et en regardant ce qui ressort (car on peut aussi -malheureusement- définir une constante avec un nom variable ce qui aurait pu échapper à ta recherche initiale...).

Une autre possibilité serait l'utilisation d'auto_prepend_file sur ta configuration php, avec l'inclusion systématique d'un fichier définissant ces constantes et provoquant donc le conflit (peut-être complètement en dehors de ton application).

Si ça n'aide pas, je me mettrais à chercher du côté des possibilités "farfelues" (du genre stockage de code directement dans la base de données, ou à tout autre endroit qui n'a pas lieu d'être).

Enfin, si tu renonces finalement à trouver où se passe le premier define, tu peux encadrer le second (celui que tu connais) de cette manière :
if(!defined( "DB_HOST" )) define ( "DB_HOST" , "localhost" ) ; 
Ainsi la constante ne sera déclarée que si elle ne l'a pas déjà été auparavant, ce qui supprimera du même coup ton message d'erreur (et, avouons-le, c'est tout de même plus propre, non ? :-) )
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 254 Messages

11 oct. 2008, 00:07

Merci pour ta réponse :)

475 define dans le projet :p, la plupart dans le meme fichier, mais une seule concenant cette constante, définie dans un fichier ultra court, ce meme fichier etant toujours inclu par des include_once

Pas d'auto_prepend_file, je bosse actuellement sur une version easyphp par défaut sans configuration spécifique

Pas d'endroit farfelu, j'ai participé a l'élaboration de ce code au début, et pendant un bon moment ... C'est bien ca qui me rend fou lol
Le probleme pourrait il venir de la configuration d'origine du serveur sur lequel tournait cette application ? Car je ne vois plus que ca, mais malheureusement je n'ai plus acces a cette configuration ...
Je me demande si l'affichage de ces messages "notice" n'etait pas désactivés ...
Ca ne change pas mon probleme néanmoins. Je pense que je vais opter sur ta derniere solution, je n'ai que 4 constantes dans ce cas la, et ce n'est plus un projet pro

Si je met des if devant tous mes define, je ne trouve pas ca plus propre non :) (475 if ^^) Mais c'est rageant de ne pas trouver le cheveux sur la soupe