Intereting Posts
JSON specialchars JSON php 5.2.13 PHP – Как убедиться, что прокси-соединение curl_multi было успешным? Возможно ли, чтобы файл PHP удалялся при выполнении? PHP-скрипт порождает запросы к бесконечному циклу SilverStripe сохраняет данные во внешней таблице Не удалось выбрать результат из результатов поиска select2 PHP – поддержка многобайтовых безопасных регулярных выражений Как получить идентификатор последней вставленной строки при использовании PDO в PHP? Использование PhpRenderer непосредственно с дочерними представлениями в ZF2 ghostscript не работает в php В PHPStorm, как я могу сделать работу типа намека, когда у меня есть метод суперкласса, который возвращает другой тип из каждого подкласса Создать программно переменный продукт и два новых атрибута в Woocommerce WideImage – Прозрачные области конвертированного PNG должны быть белыми Начинаем кэширование данных в PHP Является ли хорошей практикой использовать теги meta refresh для перенаправления вместо функции header () в php?

Включение файлов с использованием относительных путей с PHP?

При разработке моего сайта я вызывал все входящие в мои php-файлы, вызывая один единственный файл, который включает include.

Код этого файла выглядел примерно так: (я адаптировал его из учебника Lynda)

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR); defined('SITE_ROOT') ? null : define('SITE_ROOT', 'C:'.DS.'wamp'.DS.'www'.DS.'ArmyCreator'); defined('LIB_PATH') ? null : define('LIB_PATH', SITE_ROOT.DS.'includes'); defined('PUB_PATH') ? null : define('PUB_PATH', SITE_ROOT.DS.'public'); // load config file first require_once(LIB_PATH.DS."helper".DS.'config.php'); 

Теперь, когда я развертываю свой веб-сайт, я не могу понять, как объявить SITE_ROOt, чтобы он работал правильно?

РЕДАКТИРОВАТЬ

Это нормально для кода, подобного этому: require_once("../../includes/helper/initialize.php"); больше не работать после того, как я развернусь на веб-сайте?

Solutions Collecting From Web of "Включение файлов с использованием относительных путей с PHP?"

Вы можете включить файлы по отношению к каталогу include.php, выполнив:

 <? $basePath = dirname(__FILE__); require_once($basePath . "relative/path/from/basePath"); // replace the string with your real relative path 

Два предложения здесь:

  1. Вы хотите, чтобы SITE_ROOT был абсолютным путем к каталогу, в котором находятся ваши файлы. Например, в приведенном выше коде этот каталог C:\wamp\www\ArmyCreator . Вы можете определить это вручную, если знаете каталог или динамически, используя предопределенную константу __DIR__ (PHP 5.3+) или dirname(__FILE__) если вы еще не в 5.3.

  2. Включая кучу файлов сразу в целом считается плохой практикой, и вместо этого следует использовать автозагрузку. Это даст вам лучшую производительность, а также четкую структуру макета и схему именования, что приведет к улучшению кода. Для этого вы можете использовать spl_autoload_register() .

Во-первых, не злоупотребляйте тройным синтаксисом. Вместо defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR); defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR); , вы можете использовать оператор OR (который будет закорочен на логическом истинном результате):

 defined('DS') OR define('DS', DIRECTORY_SEPARATOR); 

Во-вторых, если это внутри загрузочного файла, который вам известен, просто используйте dirname(__FILE__) :

 defined('SITE_ROOT') OR define('SITE_ROOT', dirname(__FILE__)); 

В противном случае, если вы знаете относительное положение корня, вы можете использовать несколько вызовов dirname . Поэтому, если это родительский каталог текущего:

 defined('SITE_ROOT') OR define('SITE_ROOT', dirname(dirname(__FILE__))); 

Не используйте $_SERVER['DOCUMENT_ROOT'] или cwd() или hardcode ваш путь. Всегда используйте dirname(__FILE__) чтобы определить абсолютный путь. Для получения дополнительной информации о том, почему, см. Этот ответ

Во-первых: я бы сбросил DS, это BS (ehe). Windows поддерживает как C:/wamp/www и C:\wamp\www 🙂 Даже C:\wamp\www/project в порядке.

Если includes.php находится в, скажем lib/includes.php (относительно вашего корня проекта), сделайте следующее:

 define('SITE_ROOT', realpath('../')); 

Это будет динамически устанавливать SITE_ROOT .