Включать файлы 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.