Включать файлы php, когда они находятся в разных папках

большая часть моего сайта находится в моем корневом каталоге. И в этом каталоге есть папка" css"," функции"," изображения". Все работает нормально, когда я включаю php-файлы в индекс.PHP или любой другой файл root. Он включает его отлично и выполняет его отлично.

но проблема возникает, когда я сделал папку "блог". Таким образом, это совершенно новая и отдельная корневая папка с CMS и ее собственными "корневыми" файлами. И я пытаюсь включить css из основного корневого каталога или некоторые php-файлы из папки "функции" в основной корневой каталог, все ломается. Я знаю, что должен включить его как ../functions/myfile.com. Но эти файлы включают в себя некоторые другие файлы, поэтому он просто не будет работать должным образом и не сможет включать другие файлы должным образом.

есть ли идеи, как решить эту проблему?

4 ответов


вы можете добраться до root С каждого сайта с помощью $_SERVER['DOCUMENT_ROOT']. для тестирования только вы можете эхо из пути, чтобы убедиться, что он работает,если вы сделаете это правильно. вы никогда не хотите показывать пути локального сервера для таких вещей, как включает в себя и требует.

сайт 1

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

включает в себя под сайт один будет at:

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

сайт 2

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

фактический код для доступа к услугам с site1 в внутри site2 вы скажете:

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

он будет использовать только относительные путь файла, выполняющего запрос, если вы попытаетесь получить к нему доступ, исключив document root и root Слэш:

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

включенные пути не имеют места в коде спереди конец (live) сайта в любом месте, и должны быть защищены и использованы в только производственные среды.

кроме того, для URL-адресов на самом сайте вы можете сделать их относительно домена. Браузеры будут автоматически заполнять остальные, потому что они знают, на какую страницу они смотрят. Поэтому вместо:

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

вы должны использовать:

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

для хорошего SEO вы захотите убедиться, что URL-адреса для блога не существуют в другом домен, в противном случае он может быть помечен как дубликат сайта. С учетом сказанного вы также можете добавить строку в свой robots.txt на только site1 в:

User-agent: *
Disallow: /blog/

другие возможности:

найдите свой IP-адрес и включите этот фрагмент кода:

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'];       
}

помните, если ваш провайдер изменяет ваш IP, поскольку у вас есть динамический IP DCHP, вам нужно будет изменить IP в этом файле, чтобы увидеть результаты. Я бы поставил это файл в include, а затем требовать его на страницах для отладки.

если вы в порядке с современными методами, такими как использование браузера консоли журнала вы можете сделать это вместо этого и просмотреть его в интерфейсе отладки браузера:

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

Если я правильно вас понимаю, у вас есть две папки, в одной из которых находится ваш PHP-скрипт, который вы хотите include в файл, который находится в другой папке?

Если это так, вы просто должны следовать по следам правильный путь. Предположим, ваши папки настроены следующим образом:

root
    includes
        php_scripts
            script.php
    blog
        content
            index.php

Если это предлагаемая структура папок, и вы пытаетесь включить "скрипта.файл php" в индексе".PHP " папка, вам нужно включить это путь:

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

то, как я это делаю, визуально. Я поставил указатель мыши на указатель.php (глядя на файловую структуру), затем каждый раз, когда я поднимаюсь в папку, я набираю другой"../ "Тогда вы должны убедиться, что вы идете вверх по структуре папок над папками, в которые вы хотите начать спускаться. После этого, это просто обычная иерархия папок.


ни один из вышеперечисленных ответов не исправил эту проблему для меня. Я сделал это следующим образом (Laravel с сервером Ubuntu):

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

старайтесь не использовать относительные пути. Используйте универсальный include, где вы назначаете переменную сервера DocumentRoot глобальной переменной и строите абсолютные пути оттуда. В качестве альтернативы для более крупных проектов рассмотрите возможность реализации автозапуска PSR-0 SPL.