PHP включает абсолютный путь

У меня есть переменная на моем сайте с именем $basePath, которая устанавливается как:

$basePath = '/Systems/dgw/';

Я использую его во всех моих тегах css, js и images так (сокращен для лучшей видимости):

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

У меня нет проблем с этими включениями, и они отлично работают в любом месте и в любой папке.

У меня есть некоторая включенная страница, которая имеет следующую строку:

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

И изображение просто отлично. Строка после этого указывает:

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

Но включение не происходит. Когда я пробую это так:

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

Он работает.

Кто-нибудь знает, что может быть неправильно?

Ответ 1

Вы не можете включить php файлы относительно вашего веб-сайта таким образом, потому что если вы используете косую черту в качестве первого символа, ссылка будет намного глубже, чем только ваш корень документа. Таким образом, вместо использования базового пути вы можете сделать что-то вроде этого:

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

Ответ 2

Если ваш сервер не заполняет "document_root", вам может понадобиться этот



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

Я использую эту строку кода. Он возвращается к "вершине" дерева сайта, затем переходит в желаемый файл.
Например, скажем, у меня есть это дерево файлов:
domain.com/aaa/index.php
domain.com/bbb/ccc/ddd/index.php
domain.com/_resources/functions.php

Я могу включить файл functions.php откуда бы я ни был, просто скопировав

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



Если вам нужно использовать этот код много раз, вы можете создать функцию, которая возвращает "str_repeat ('../", (substr_count (getenv (' SCRIPT_URL '),'/') -1)) ". Затем просто вставьте эту функцию в первый файл, который вы включили. У меня есть файл initialize.php, который я включаю в самый верх каждой страницы php и который содержит эту функцию. В следующий раз, когда я должен включить файлы, я фактически просто использую функцию (называемую" path_back"):

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

Ответ 3

Вы можете добавить include_path = ".:/home/myuser/mysite.com/" в свой php.ini или добавить что-то вроде этого в свой script до include или require:

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

Первый будет работать для всех скриптов, запущенных на вашем веб-сайте.

Второй вариант будет работать только для script, который имеет код setincludepath в коде, для остальной части приложения он не будет работать, если у вас нет объекта, который вы вызываете в каждом script, который добавляет setincludepath.