web-dev-qa-db-fra.com

PHP inclure le chemin absolu

J'ai une variable sur mon site appelée $ basePath qui est définie comme suit:

$basePath = '/Systems/dgw/';

Je l'utilise sur tous mes tags css, js et images en tant que tel (raccourci pour une meilleure visibilité):

<link href="<?php echo $basePath; ?>include/assets/css/bootstrap.min.css">

Je n'ai aucun problème avec ces inclus et ils fonctionnent bien dans n'importe quel fichier et dans le dossier que je suis.

J'ai une certaine page incluse qui a la ligne suivante:

<img src="<?php echo $basePath; ?>images/new_logo.png" alt="logo"/>

Et l'image montre très bien. La ligne après celle-ci indique:

<?php include($basePath.'include/assets/common/topMessages.php');?>

Mais l'inclusion ne se produit pas. Quand j'essaye comme ça:

<?php include('../../include/assets/common/topMessages.php');?>

Ça marche.

Quelqu'un a une idée de ce qui pourrait être faux?

16
digicom

De cette façon, vous ne pouvez pas inclure de fichiers php relativement à votre racine Web. En effet, si vous utilisez la barre oblique comme premier caractère, la référence ira beaucoup plus loin que la racine de votre document. Ainsi, au lieu d'utiliser votre chemin de base, vous pouvez faire quelque chose comme ceci:

<?php 
   $path = $_SERVER['DOCUMENT_ROOT'];
   $path .= "/yourpath/yourfile.php";
   include_once($path);
?>
43
Laurent S.

Si votre serveur ne remplit pas "racine_document", vous en aurez peut-être besoin



    require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/path/to/file.php");

J'utilise cette ligne de code. Il retourne au "sommet" de l'arborescence du site, puis au fichier souhaité.
Par exemple, disons que j'ai cet arbre de fichiers:
domain.com/aaa/index.php
domain.com/bbb/ccc/ddd/index.php
domain.com/_resources/functions.php

Je peux inclure le fichier functions.php où que je sois, simplement en le collant

require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/_resources/functions.php");



Si vous devez utiliser ce code plusieurs fois, vous pouvez créer une fonction qui renvoie la partie "str_repeat ('../", (substr_count (getenv (' SCRIPT_URL '), 1/1))). Ensuite, insérez simplement cette fonction dans le premier fichier que vous incluez. J'ai un fichier "initialize.php" que j'inclus tout en haut de chaque page php et qui contient cette fonction. La prochaine fois que je dois inclure des fichiers, j’utilise en fait la fonction (nommée "path_back"):

require(path_back()."/_resources/another_php_file.php");
2
user4783311

Vous pouvez ajouter un include_path = ".:/home/myuser/mysite.com/" à votre php.ini ou vous pouvez ajouter quelque chose comme ceci dans votre script avant la include ou require:

set_include_path(get_include_path() . ":/home/myuser/mysite.com/");

Le premier fonctionnera pour tous les scripts de votre site Web.

La deuxième option ne fonctionnera que pour le script qui a la setincludepath sur le code, pour le reste de l'application, cela ne fonctionnera que si vous avez un objet appelé dans chaque script qui ajoute la setincludepath.

0
raphvon