1

yop,

en imaginant que le fichier "plop.php" contienne ça :
<?php

define ('version', '1.0');

define ('ceci_ne_doit_pas_etre_recuperee', 17);
define ('ceci_non_plus', 53);

?>

Existe-t-il un moyen tt con en php de récuperer localement la valeur de la constante 'version' de plop.php dans un autre script ? (sans qu'elle soit définie ds mon script principal, et sans récuperer les deux autres constantes)

(je m'attends un peu à la réponse mais avant de changer de solution, on sait jamais... ^^)
mci :]
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

Tu peux peut-être le faire avec des expressions régulières.
Quelque chose qui ressemble à ça :
echo "version = ".valeur_define("./plop.php","version");

function valeur_define($file,$var) {
	$file=file($file);
	$res=array_values(preg_grep ("/^ *define *\( *(['\"])${var}\1 *,.*/i", $file));
	preg_match_all("/.*, *(['\"]?)(.*)\1 *\).*/i",$res[0],$res);
	return $res[2][0];
}
avatar

3

ué c'est ce que je m'étais dit, mais c'est carrément laid :/
(et puis il manque un truc qui échapperait les caractères spéciaux de $var, et pê encore d'autres cas foireux moins évidents)

le pb c'est surtout que ce define ne me sert que dans ce cas, donc si je l'utilise pas tel quel ça sert plus à rien que ça soit un define (ça aurait pu être une affectation de variable ms ça regle pas le pb, donc si y'a vraiment aucune solution pkoi pas un commentaire spécial ds la source, matché ac une regexp oué sorry)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

Ben de toute façon soit :
- tu as confiance en plop.php et tu sais qu'il suit une structure bien particulière, dans ce cas-là tu peux faire par exemple
na);
[ul]define("version","plop");
if ($define_version_only)
  return;
define(gnagnag

ou encore, si tu ne veux pas toucher à plop.php ou que tu veux pouvoir récupérer "ceci_non_plus",
my_define($var,$val) {
  if ($var=='version')
    throw $val; // ou l'équivalent en PHP
}

(mais ça suppose qu'il n'y ait aucun code avec effet de bord en dehors des define())[/ul]
- tu n'as pas confiance en plop.php ou bien il peut y avoir du code qui ne suit pas cette règle, dans ce cas-là tu es obligé de scanner le fichier comme le fait Thepro

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

hmm plop.php est à moi donc la 1ere solution est parfaite, j'avais pas pensé à ça ms c'est tt con, thx happy
(du mal à m'habituer aux define qui definent pas si on quitte le code avant grin)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)