Les constantes PHP undefined - mais qu'ils sont définis!
Je suis en utilisant des constantes pour définir les différentes variables de configuration au sein d'un script.
La INC_PATH constante est définie dans le script qui inclut la bibliothèque de classe.
define('INC_PATH',$_SERVER['DOCUMENT_ROOT'].'includes/');
include('class.lib.php');
La bibliothèque de classe contient divers include('someClass.php') les lignes. Il contient également:
require(INC_PATH.'DB.class.php');
La bibliothèque de classe lance un avis:
Use of undefined constant INC_PATH - assumed 'INC_PATH'
Comment est la bibliothèque de classe pas en mesure de voir que la INC_PATH constant a été défini? J'ai pensé constantes ont été mondial?
êtes-vous sûr que c'est en effet
Des éclats d'obus, Il n'est pas, mais quelle différence pourrait que faire si il a été? Serait-il la cause de l'une des constantes de ne pas être défini? Qui ne semble pas faire sens.
Oh, mais c'est logique. Dans le dernier cas, vous comprennent le interprétée version du script, qui ne savent pas du tout les constantes que vous avez défini lors de l'inclure, car il est exécuté par lui-même dans une autre demande (à l'initiative du serveur).
Alors, comment voulez-vous le faire fonctionner sans être une autre demande? Il y a d'autres fichiers inclus plus tard dans le script, l'utilisation de diverses constantes avec pas de problèmes. Comment est-ce qu'ils travaillent alors que celui-ci ne l'est pas?
Pouvez-vous essayer
include('class.lib.php');
pas quelque chose comme include('http://example.com/class.lib.php');
?Des éclats d'obus, Il n'est pas, mais quelle différence pourrait que faire si il a été? Serait-il la cause de l'une des constantes de ne pas être défini? Qui ne semble pas faire sens.
Oh, mais c'est logique. Dans le dernier cas, vous comprennent le interprétée version du script, qui ne savent pas du tout les constantes que vous avez défini lors de l'inclure, car il est exécuté par lui-même dans une autre demande (à l'initiative du serveur).
Alors, comment voulez-vous le faire fonctionner sans être une autre demande? Il y a d'autres fichiers inclus plus tard dans le script, l'utilisation de diverses constantes avec pas de problèmes. Comment est-ce qu'ils travaillent alors que celui-ci ne l'est pas?
Pouvez-vous essayer
get_defined_constants()
pour voir si le contenu est conforme à votre schéma de la pile d'appel?...
OriginalL'auteur bcmcfc | 2010-07-09
Vous devez vous connecter pour publier un commentaire.
Oui, mais ils doivent être définies avant:
En réponse à votre commentaire
Je ne peux pas reproduire:
a.php
b.php.inc
c.php.inc
Demandant
a.php
donne:Je ne peux pas reproduire (voir edit). Je suis à l'aide de PHP 5.3.0.
Juste par curiosité, as-tu essayé avec le code que Artefacto posté? J'obtiens les mêmes résultats que Artefacto dans mon environnement.
Je ne peux pas reproduire l'erreur avec Artefacto du code.
quelle est donc la différence entre votre code et @Artefacto du code? Cela me suggère que Artefacto a répondu à votre question.
OriginalL'auteur Artefacto
Un sauvage deviner (la peine de vérifier tout de même) : le Présent avis pourrait survenir si votre ligne
est appelé parfois avant la déclaration de la INC_PATH constante.
Modifier votre fichier de bibliothèque de classe et de vérifier qui comprend en fait le fichier :
OriginalL'auteur JonG
Est-il possible que le
define()
appelé est dans un bloc de code qui n'est pas en cours d'exécution, comme unif()
déclaration?Qu'obtenez-vous si vous vérifiez la valeur de
INC_PATH
immédiatement avant de l'inclureclass.lib.php
?OriginalL'auteur pferate
Probablement vous écrivez le code
au sein d'un bloc.
Si yo écrire votre code dans n'importe quel bloc, si le bloc n'est pas exécutée alors de variables ou de constantes déclarées dans le bloc n'aura pas été initialisé.
Supposons que, Vous faire un code comme celui-ci,
Il donnera une sortie comme ça:
Corriger cela pour résoudre votre problème.
OriginalL'auteur chanchal1987
Vous assurer que c'est exactement le problème? Ce message d'erreur est moytly affiché sur l'accès aux valeurs de tableau avec pas de guillemets pour les touches:
L'ajout des guillemets simples dans votre message d'erreur sont l'indicateur, les citations ne seront pas ajoutés à la constante.
Je vois 😉 Mais ce message d'erreur est due à l'utilisation non-existence de constantes dans les situations où une chaîne doit être utilisé.
Posté erreur vient en effet à partir d'une constante indéfinie, mais pas toujours de l'oubli des devis pour une chaîne de caractères. Les constantes sont très utiles si vous n'êtes pas familier avec eux.
Ce n'est pas vrai, j'en vois un tableau: $_SERVER... 😉 hahaha.
OriginalL'auteur Tobias P.