web-dev-qa-db-fra.com

Inclure les fichiers php lorsqu'ils se trouvent dans différents dossiers

La plupart de mon site Web se trouve dans mon répertoire racine. Et dans ce répertoire, il y a le dossier "css", "functions", "images". Tout fonctionne bien lorsque j'inclus des fichiers php dans index.php ou tout autre fichier racine. Il l'inclut bien et l'exécute très bien.

Mais un problème survient lorsque je crée le dossier "blog". Il s'agit donc d'un dossier racine totalement nouveau et séparé avec CMS et ses propres fichiers "racine". Et j'essaie d'inclure css du répertoire racine principal ou des fichiers php du dossier "fonctions" dans le répertoire racine principal, tout tombe en panne. Je sais que je dois l'inclure comme ../functions/myfile.com. Mais ces fichiers incluent d'autres fichiers, il ne fonctionnera donc pas correctement et ne pourra pas inclure d'autres fichiers correctement.

Y a-t-il une idée de comment résoudre ce problème?

12
FosAvance

Vous pouvez accéder à root depuis chaque site en utilisant $_SERVER['DOCUMENT_ROOT']. Pour les tests UNIQUEMENT, vous pouvez faire écho au chemin pour vous assurer qu'il fonctionne, si vous le faites de la bonne façon. Vous ne voulez JAMAIS montrer les chemins du serveur local pour des choses comme inclut et nécessite.

Site 1

echo $_SERVER['DOCUMENT_ROOT']; //should be '/main_web_folder/';

Inclut sous le site un serait à:

echo $_SERVER['DOCUMENT_ROOT'].'/includes/'; // should be '/main_web_folder/includes/';

Site 2

echo $_SERVER['DOCUMENT_ROOT']; //should be '/main_web_folder/blog/';

Le code réel auquel accéder comprend de site1 à l'intérieur de site2 vous diriez:

include($_SERVER['DOCUMENT_ROOT'].'/../includes/file_from_site_1.php');

Il n'utilisera le relatif chemin du fichier exécutant la requête que si vous essayez d'y accéder en excluant le document root et la barre oblique root:

 //(not as fool-proof or non-platform specific)
 include('../includes/file_from_site_1.php');

Les chemins d'accès inclus n'ont aucune place dans le code sur le front end (live) du site, et doivent être sécurisés et utilisés dans environnements de production uniquement.

De plus, pour les URL sur le site lui-même, vous pouvez les faire par rapport au domaine. Les navigateurs rempliront automatiquement le reste car ils savent quelle page ils consultent. Donc au lieu de:

<a href='http://www.__domain__name__here__.com/contact/'>Contact</a>

Tu devrais utiliser:

<a href='/contact/'>Contact</a>

Pour un bon référencement, vous devez vous assurer que les URL du blog n'existent pas dans l'autre domaine, sinon il peut être marqué comme un site en double. Cela étant dit, vous pouvez également ajouter une ligne à votre robots.txt fichier pour [~ # ~] uniquement [~ # ~] site1:

User-agent: *
Disallow: /blog/

Autres possibilités:

Recherchez votre adresse IP et incluez cet extrait de code:

function is_dev(){
  //use the external IP from Google.
  //If you're hosting locally it's 127.0.01 unless you've changed it.
  $ip_address='xxx.xxx.xxx.xxx';

  if ($_SERVER['REMOTE_ADDR']==$ip_address){
     return true;
  } else {
     return false;
  } 
}

if(is_dev()){
    echo $_SERVER['DOCUMENT_ROOT'];       
}

N'oubliez pas que si votre FAI change votre IP , comme vous avez une IP dynamique DCHP, vous devrez changer l'IP dans ce fichier pour voir les résultats. Je mettrais le fichier ça dans un include, puis je l'exigerais sur les pages de débogage.

Si vous êtes d'accord avec les méthodes modernes comme l'utilisation du navigateur journal de la console vous pouvez le faire à la place et l'afficher dans l'interface de débogage du navigateur:

if(is_dev()){
    echo "<script>".PHP_EOL;
    echo "console.log('".$_SERVER['DOCUMENT_ROOT']."');".PHP_EOL;
    echo "</script>".PHP_EOL;       
}
21
AbsoluteƵERØ

Si je vous comprends bien, vous avez deux dossiers, l'un contient votre script php que vous voulez include dans un fichier qui se trouve dans un autre dossier?

Si tel est le cas, il vous suffit de suivre la piste dans le bon sens. Supposons que vos dossiers soient configurés comme ceci:

root
    includes
        php_scripts
            script.php
    blog
        content
            index.php

S'il s'agit de la structure de dossiers proposée et que vous essayez d'inclure le fichier "Script.php" dans votre dossier "index.php", vous devez l'inclure de cette façon:

include("../../../includes/php_scripts/script.php");

Ma façon de procéder est visuelle. Je mets le pointeur de ma souris sur l'index.php (en regardant la structure du fichier), puis chaque fois que je monte un dossier, je tape un autre "../" Ensuite, vous devez vous assurer de monter la structure du dossier AU-DESSUS des dossiers dans lequel vous voulez commencer à descendre. Après cela, c'est juste une hiérarchie de dossiers normale.

7
ntgCleaner

Aucune des réponses ci-dessus n'a résolu ce problème pour moi. Je l'ai fait comme suit (Laravel avec serveur Ubuntu):

<?php
     $footerFile = '/var/www/website/main/resources/views/emails/elements/emailfooter.blade.php';
     include($footerFile);
?>
2
MBouwman

Essayez de ne jamais utiliser de chemins relatifs. Utilisez une inclusion générique où vous affectez la variable serveur DocumentRoot à une variable globale et construisez des chemins absolus à partir de là. Sinon, pour les projets plus importants, envisagez d'implémenter un chargeur automatique PSR-0 SPL.

1
Niels Keurentjes