Intereting Posts
Как изменить ниже переписать url, чтобы разрешить больше подпапок, когда все URL перенаправлены на индексную страницу? PHP + HTACCESS + mod_rewrite + сегменты URL с разной длиной нумерация страниц array_slice Рекомендации по производительности для поиска уникальной перестановки Образы PHP из каталога – Случайный порядок Как использовать Ajax в плагине WordPress? WooCommerce – переадресация страницы корзины на страницу проверки пустая вставка PDF, отправленная с использованием FPDF и SwiftMailer Неустранимая ошибка HelperSet не найдена при настройке Doctrine Console (с помощью CodeIgniter) Bycript / Blowfish и Salts с существующей системой auth Кнопка «Предотвратить обратную связь» отображает уведомление о подтверждении POST определить статус http, который будет отправлен в php JMSSerializerBundle: укажите группу для каждого атрибута Ошибка Swift-Mailer, «Адрес в почтовом ящике не соответствует RFC" Как рассчитать время, прошедшее с PHP или Zend_Date?

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');?> 

Оно работает.

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

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

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

Если ваш сервер не заполняет «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"); 

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

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

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

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