$_SERVER["DOCUMENT_ROOT"] inconnue...

7 réponses
AuteurMessage

Maximus32
Membre

Photo de Maximus32

Inscrit le : 13/05/2009

# Le 01/09/2010 à 17:22

... en ligne de commande.

En fait, je veux modifier un script PHP qui s'exécute tous les soir avec CRON et je viens de m'apercevoir que lorsqu'on lance une exécution PHP en ligne de commande (sans utiliser de navigateur) PHP ne connait pas certaines variables d'environnement comme entre autres $_SERVER["DOCUMENT_ROOT"].

Y a-t-il une autre variable à utiliser dans ce cas là ou une modification dans la config d'Apache ou PHP ?
J'ai regardé dans phpinfo() mais j'ai rien trouvé d'intéressant...

Je peux évidemment passer par une variable initialisée en dur (genre $DOC_ROOT = "/home/site/www/") mais je préfère éviter.

Mandataire AutoOuvrir dans une nouvelle fenetre | Lentilles de contactOuvrir dans une nouvelle fenetre | Chaines à neigeOuvrir dans une nouvelle fenetre

Rano
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 01/09/2010 à 17:28

Un coup de :
if (!$_SERVER["DOCUMENT_ROOT"]) $_SERVER["DOCUMENT_ROOT"] = dirname(__FILE__);

?

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Bool
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 01/09/2010 à 17:31

Hello,

en fait $_SERVER['DOCUMENT_ROOT'] est fournie par Apache et est également facultative, donc dans tous les cas se baser uniquement dessus est dangereux.

Perso j'ai un fichier de config à la racine de tous les sites, donc dedans je mets un truc du genre :

define('WEB_DIR', dirname(__FILE__));

Et ce fichier est toujours inclus via un chemin relatif : require '../../bootstrap.php';

En espérant que ça puisse t'aider. En tous cas chez nous ça tourne depuis X arborescences différentes sans problèmes, avec des Apache qui ne renseignent pas le DOCUMENT_ROOT ainsi qu'en ligne de commande directement.

Google is watching you.

PyRoFlo
Modérateur

Photo de PyRoFlo

Inscrit le : 09/05/2005

# Le 01/09/2010 à 17:33

Tout pareil que Bool.

Si t'as pas envie de reprendre tes scripts et qu'ils consomment pas énormément de ressources, tu peux les exécuter en faisant un wget au moins tu auras toutes tes variables.

Feu d'artifice ParisOuvrir dans une nouvelle fenetre

Maximus32
Membre

Photo de Maximus32

Inscrit le : 13/05/2009

# Le 01/09/2010 à 18:07

Merci les gars je vais mettre ça en place, ça sera effectivement plus propre !

Mandataire AutoOuvrir dans une nouvelle fenetre | Lentilles de contactOuvrir dans une nouvelle fenetre | Chaines à neigeOuvrir dans une nouvelle fenetre

dob
Modérateur

Photo de dob

Inscrit le : 10/05/2005

# Le 01/09/2010 à 22:36

__DIR__ à partir de PHP 5.3 aussi (== dirname(__FILE__))

Julien TartarinOuvrir dans une nouvelle fenetre
Founder & CEO @ Mailjet.comOuvrir dans une nouvelle fenetre

Bool
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 01/09/2010 à 22:46

Yep dob, me semblait avoir vu passé ça sur la mailing aussi. Ce sera toujours ça de pris.

Google is watching you.

Akarys
Membre

Photo de Akarys

Inscrit le : 19/01/2008

# Le 02/09/2010 à 05:38

Rano a dit :
Un coup de :
if (!$_SERVER["DOCUMENT_ROOT"]) $_SERVER["DOCUMENT_ROOT"] = dirname(__FILE__);

Attention, à ce genre de bidouille, d'autant qu'il est prévu que les variables d'environnement PHP ($_SERVER, $_GET, ...) passent en "constantes" dans une version Php 6.* ...

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.