/ au début d'un lien pour accéder au dossier racine ne fonctionne pas dans php include.
par exemple "/example/example.php"
Quelle est la solution?
Je suppose que par dossier racine vous entendez la racine de votre document Web plutôt que la racine du système de fichiers.
À cette fin, vous pouvez soit
include('example/example.php')
include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
J'ai eu ce problème aussi. La réponse de Paul Dixon est correcte, mais peut-être que cela vous aidera à comprendre pourquoi:
Le problème ici est que PHP est un langage côté serveur. Lorsque des documents HTML purs peuvent accéder aux fichiers en fonction de l’URL racine que vous avez configurée sur le serveur (c.-à-d. Pour accéder à une image à partir d’un sous-répertoire sur lequel vous vous trouvez, vous utiliseriez /images/example.jpg
pour aller du répertoire principal vers le bas), PHP accède effectivement à la racine du serveur lorsque vous utilisez include (/images/example.jpg)
La structure de site que vous avez configurée se trouve en réalité dans un système de fichiers du serveur Apache. La racine de mon site ressemble à ceci, en partant de la racine du serveur pour descendre:
/home2/siteuserftp/public_html/test/
"test" représente la racine de votre site
Donc, pour répondre à votre question, pourquoi PHP include ne donne pas le résultat souhaité (il fonctionne exactement comme il se doit), c'est parce que vous demandez au code PHP d'essayer trouvez votre fichier à la racine du serveur, alors qu’il se trouve à la racine HTML de votre site, ce qui pourrait ressembler à ce qui précède.
Votre fichier serait basé sur la racine du site "test /" et ressemblerait à ceci:
/home2/siteuserftp/public_html/test/about/index.php
La réponse fournie par Paul Dixon:
include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
est exactement ce qui va résoudre votre problème (ne vous inquiétez pas de chercher la racine du document pour remplacer 'DOCUMENT_ROOT', PHP le fera pour vous. Assurez-vous simplement que vous avez littéralement 'DOCUMENT_ROOT' dedans)
MODIFIER:
Plus d'informations DOCUMENT_ROOT et autre PHP variables SERVEUR peuvent être trouvés ici
include () (et de nombreuses autres fonctions telles que require (), fopen (), etc.) fonctionnent toutes hors du système de fichiers local, pas de la racine Web.
Alors, quand tu fais quelque chose comme ça
include( "/example/example.php" );
Vous essayez d'inclure à partir de la racine de votre machine * nix.
Et bien qu'il existe une multitude de façons d'aborder ce que vous faites, les suggestions de Paul Dixon sont probablement vos meilleurs choix.
Chaque serveur Web a un dossier public_html
, dans lequel vous conservez généralement vos fichiers, etc. En utilisant /
, vous n'obtiendrez pas le public_html
, mais vous le dirigerez vers la racine principale (inaccessible). Donc, utilisez $_SERVER['DOCUMENT_ROOT']."/your/locati.on"
à la place
J'ai résolu ce problème sur une machine exécutant Windows et IIS avec les éléments suivants:
<?php
$docroot = 'http://www.example.com/';
include ($docroot.'inc-header.php');
?>
Si vous êtes sur une machine de développement locale, vous pouvez forcer votre domaine à pointer sur localhost en ajoutant les éléments suivants dans C:\Windows\System32\drivers\etc\hosts.
127.0.0.1 www.example.com
En outre, vous devrez activer allow_url_include dans php.ini comme si
allow_url_include = On
Pour moi, l'astuce suivante a fonctionné… .. J'utilise Windows avec IIS, donc DOCROOT est C:\Inetpub\wwwroot.
subst W: C:\Inetpub\wwwroot
include_path = ".; c:\php\active\includes; W: \" doc_root = W:\
Maintenant, les deux versions autorisées:
include '/common/common.inc'; // accès au mappé W: root inclure 'common/common.inc'; // accès à W: dans include_path
certaines versions de PHP peuvent avoir le délimiteur à la fin de la racine du document, d'autres pas. En pratique, vous voudrez peut-être utiliser:
$r = trim(filter_input(INPUT_SERVER, 'DOCUMENT_ROOT', FILTER_SANITIZE_STRING));
if (substr($r, 0, 1) == '/')
{
define("PATCH_SEPARATOR", "/");
}
else
{
define("PATCH_SEPARATOR", "\\");
}
if (substr($r, -1) == PATCH_SEPARATOR)
{
include_once ($r . 'example/example.php');
}
else
{
include_once ($r . PATCH_SEPARATOR . 'example/example.php');
}