Intereting Posts

PHP абсолютный путь к корню

Я не могу поверить, что у PHP нет простого решения этого простого вопроса. У ASP.NET есть знак, который заботится об этой проблеме и запускает все с корневого уровня. Вот моя проблема:

localhost/MySite -->Admin -- Edit.php -->Class -- class.EditInfo.php -->Texts -- MyInfo.txt --ShowInfo.php 

Внутри class.EditInfo.php Я обращаюсь к MyInfo.txt, поэтому я определил относительный путь «../Texts/MyInfo.txt». Затем я создал объект EditInfo в Admin / Edit.php и получил доступ к Texts / MyInfo.txt, он работал нормально.

Но теперь мне нужно создать объект EditInfo в ShowInfo.php и получить доступ к Texts / MyInfo.txt, и вот в чем проблема. Поскольку я использую относительный путь в моем классе всякий раз, когда я создаю objEditInfo и пытаюсь получить доступ к MyInfo.txt, я получаю ошибку «Файл не существует».

Теперь я ищу что-то, что эквивалентно «~ / Texts / MyInfo.txt» ASP.NET. Есть ли что-то подобное этому? Или мне нужно установить путь с некоторым условием if / else?


ОБНОВИТЬ:

    Я использовал $ _SERVER ['DOCUMENT_ROOT']. Я использовал подпапку, где был мой фактический веб-сайт. Поэтому мне пришлось использовать $ _SERVER ['DOCUMENT_ROOT']. "/ MySite", а затем добавить остальную часть адреса ("/Texts/MyInfo.php") к нему.

    Related of "PHP абсолютный путь к корню"

    Создайте константу с абсолютным путем к корню, используя define в ShowInfo.php :

     define('ROOTPATH', __DIR__); 

    OR (PHP <= 5.3)

     define('ROOTPATH', dirname(__FILE__)); 

    Теперь используйте его:

     if (file_exists(ROOTPATH.'/Texts/MyInfo.txt') { // ... } 

    Или используйте DOCUMENT_ROOT определенный в $_SERVER :

     if (file_exists($_SERVER['DOCUMENT_ROOT'].'/Texts/MyInfo.txt') { // ... } 

    `

    В PHP есть глобальная переменная, содержащая различные детали, связанные с сервером. Это называется $ _SERVER. Он также содержит корень:

      $_SERVER['DOCUMENT_ROOT'] 

    Единственная проблема заключается в том, что записи в этой переменной предоставляются веб-сервером, и нет гарантии, что все веб-серверы предлагают их.

    Вы можете получить доступ к переменной $ _SERVER ['DOCUMENT_ROOT'] :

     <?php $path = $_SERVER['DOCUMENT_ROOT']; $path .= "/subdir1/yourdocument.txt"; ?> 

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

     <?php define('SITE_ROOT', dirname(__FILE__)); $file_path = SITE_ROOT . '/Texts/MyInfo.txt'; ?> 

    Затем config.php в каждый скрипт точки входа и ссылку SITE_ROOT в свой код, а не укажите относительный путь.

    Всегда лучше начинать любой пользовательский PHP-проект с помощью файла начальной загрузки, где вы определяете наиболее часто используемые пути как константы на основе значений, извлеченных из $_SERVER . Это должно сделать миграцию ваших проектов или частей вашего проекта на другой сервер или в другой каталог на сервере, что намного проще.

    Вот как я определяю свои корневые пути:

     define("LOCAL_PATH_ROOT", $_SERVER["DOCUMENT_ROOT"]); define("HTTP_PATH_ROOT", isset($_SERVER["HTTP_HOST"]) ? $_SERVER["HTTP_HOST"] : (isset($_SERVER["SERVER_NAME"]) ? $_SERVER["SERVER_NAME"] : '_UNKNOWN_')); 

    Путь LOCAL_PATH_ROOT – это корень документа. Путь HTTP_PATH_ROOT эквивалентен при доступе к одному и тому же пути через HTTP.

    В этот момент преобразование любого локального пути в HTTP-путь можно выполнить с помощью следующего кода:

     str_replace(LOCAL_PATH_ROOT, RELATIVE_PATH_ROOT, $my_path) 

    Если вы хотите обеспечить совместимость с серверами на базе Windows, вам также нужно будет заменить селектор каталогов на разделитель URL:

     str_replace(LOCAL_PATH_ROOT, RELATIVE_PATH_ROOT, str_replace(DIRECTORY_SEPARATOR, '/', $my_path)) 

    Вот полный код начальной загрузки, который я использую для шаблона PHP PowerTools :

     defined('LOCAL_PATH_BOOTSTRAP') || define("LOCAL_PATH_BOOTSTRAP", __DIR__); // ----------------------------------------------------------------------- // DEFINE SEPERATOR ALIASES // ----------------------------------------------------------------------- define("URL_SEPARATOR", '/'); define("DS", DIRECTORY_SEPARATOR); define("PS", PATH_SEPARATOR); define("US", URL_SEPARATOR); // ----------------------------------------------------------------------- // DEFINE ROOT PATHS // ----------------------------------------------------------------------- define("RELATIVE_PATH_ROOT", ''); define("LOCAL_PATH_ROOT", $_SERVER["DOCUMENT_ROOT"]); define("HTTP_PATH_ROOT", isset($_SERVER["HTTP_HOST"]) ? $_SERVER["HTTP_HOST"] : ( isset($_SERVER["SERVER_NAME"]) ? $_SERVER["SERVER_NAME"] : '_UNKNOWN_')); // ----------------------------------------------------------------------- // DEFINE RELATIVE PATHS // ----------------------------------------------------------------------- define("RELATIVE_PATH_BASE", str_replace(LOCAL_PATH_ROOT, RELATIVE_PATH_ROOT, getcwd())); define("RELATIVE_PATH_APP", dirname(RELATIVE_PATH_BASE)); define("RELATIVE_PATH_LIBRARY", RELATIVE_PATH_APP . DS . 'vendor'); define("RELATIVE_PATH_HELPERS", RELATIVE_PATH_BASE); define("RELATIVE_PATH_TEMPLATE", RELATIVE_PATH_BASE . DS . 'templates'); define("RELATIVE_PATH_CONFIG", RELATIVE_PATH_BASE . DS . 'config'); define("RELATIVE_PATH_PAGES", RELATIVE_PATH_BASE . DS . 'pages'); define("RELATIVE_PATH_ASSET", RELATIVE_PATH_BASE . DS . 'assets'); define("RELATIVE_PATH_ASSET_IMG", RELATIVE_PATH_ASSET . DS . 'img'); define("RELATIVE_PATH_ASSET_CSS", RELATIVE_PATH_ASSET . DS . 'css'); define("RELATIVE_PATH_ASSET_JS", RELATIVE_PATH_ASSET . DS . 'js'); // ----------------------------------------------------------------------- // DEFINE LOCAL PATHS // ----------------------------------------------------------------------- define("LOCAL_PATH_BASE", LOCAL_PATH_ROOT . RELATIVE_PATH_BASE); define("LOCAL_PATH_APP", LOCAL_PATH_ROOT . RELATIVE_PATH_APP); define("LOCAL_PATH_LIBRARY", LOCAL_PATH_ROOT . RELATIVE_PATH_LIBRARY); define("LOCAL_PATH_HELPERS", LOCAL_PATH_ROOT . RELATIVE_PATH_HELPERS); define("LOCAL_PATH_TEMPLATE", LOCAL_PATH_ROOT . RELATIVE_PATH_TEMPLATE); define("LOCAL_PATH_CONFIG", LOCAL_PATH_ROOT . RELATIVE_PATH_CONFIG); define("LOCAL_PATH_PAGES", LOCAL_PATH_ROOT . RELATIVE_PATH_PAGES); define("LOCAL_PATH_ASSET", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET); define("LOCAL_PATH_ASSET_IMG", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_IMG); define("LOCAL_PATH_ASSET_CSS", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_CSS); define("LOCAL_PATH_ASSET_JS", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_JS); // ----------------------------------------------------------------------- // DEFINE URL PATHS // ----------------------------------------------------------------------- if (US === DS) { // needed for compatibility with windows define("HTTP_PATH_BASE", HTTP_PATH_ROOT . RELATIVE_PATH_BASE); define("HTTP_PATH_APP", HTTP_PATH_ROOT . RELATIVE_PATH_APP); define("HTTP_PATH_LIBRARY", false); define("HTTP_PATH_HELPERS", false); define("HTTP_PATH_TEMPLATE", false); define("HTTP_PATH_CONFIG", false); define("HTTP_PATH_PAGES", false); define("HTTP_PATH_ASSET", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET); define("HTTP_PATH_ASSET_IMG", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_IMG); define("HTTP_PATH_ASSET_CSS", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_CSS); define("HTTP_PATH_ASSET_JS", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_JS); } else { define("HTTP_PATH_BASE", HTTP_PATH_ROOT . str_replace(DS, US, RELATIVE_PATH_BASE)); define("HTTP_PATH_APP", HTTP_PATH_ROOT . str_replace(DS, US, RELATIVE_PATH_APP)); define("HTTP_PATH_LIBRARY", false); define("HTTP_PATH_HELPERS", false); define("HTTP_PATH_TEMPLATE", false); define("HTTP_PATH_CONFIG", false); define("HTTP_PATH_PAGES", false); define("HTTP_PATH_ASSET", HTTP_PATH_ROOT . str_replace(DS, US, RELATIVE_PATH_ASSET)); define("HTTP_PATH_ASSET_IMG", HTTP_PATH_ROOT . str_replace(DS, US, RELATIVE_PATH_ASSET_IMG)); define("HTTP_PATH_ASSET_CSS", HTTP_PATH_ROOT . str_replace(DS, US, RELATIVE_PATH_ASSET_CSS)); define("HTTP_PATH_ASSET_JS", HTTP_PATH_ROOT . str_replace(DS, US, RELATIVE_PATH_ASSET_JS)); } // ----------------------------------------------------------------------- // DEFINE REQUEST PARAMETERS // ----------------------------------------------------------------------- define("REQUEST_QUERY", isset($_SERVER["QUERY_STRING"]) && $_SERVER["QUERY_STRING"] != '' ? $_SERVER["QUERY_STRING"] : false); define("REQUEST_METHOD", isset($_SERVER["REQUEST_METHOD"]) ? strtoupper($_SERVER["REQUEST_METHOD"]) : false); define("REQUEST_STATUS", isset($_SERVER["REDIRECT_STATUS"]) ? $_SERVER["REDIRECT_STATUS"] : false); define("REQUEST_PROTOCOL", isset($_SERVER["HTTP_ORIGIN"]) ? substr($_SERVER["HTTP_ORIGIN"], 0, strpos($_SERVER["HTTP_ORIGIN"], '://') + 3) : 'http://'); define("REQUEST_PATH", isset($_SERVER["REQUEST_URI"]) ? str_replace(RELATIVE_PATH_BASE, '', $_SERVER["REQUEST_URI"]) : '_UNKNOWN_'); define("REQUEST_PATH_STRIP_QUERY", REQUEST_QUERY ? str_replace('?' . REQUEST_QUERY, '', REQUEST_PATH) : REQUEST_PATH); // ----------------------------------------------------------------------- // DEFINE SITE PARAMETERS // ----------------------------------------------------------------------- define("PRODUCTION", false); define("PAGE_PATH_DEFAULT", US . 'index'); define("PAGE_PATH", (REQUEST_PATH_STRIP_QUERY === US) ? PAGE_PATH_DEFAULT : REQUEST_PATH_STRIP_QUERY); 

    Если вы добавите вышеуказанный код в свой собственный проект, вывод всех пользовательских констант в этот момент (что вы можете сделать с помощью get_defined_constants(true) должен дать результат, который выглядит примерно так:

     array ( 'LOCAL_PATH_BOOTSTRAP' => '/var/www/libraries/backend/Data/examples', 'URL_SEPARATOR' => '/', 'DS' => '/', 'PS' => ':', 'US' => '/', 'RELATIVE_PATH_ROOT' => '', 'LOCAL_PATH_ROOT' => '/var/www', 'HTTP_PATH_ROOT' => 'localhost:8888', 'RELATIVE_PATH_BASE' => '/libraries/backend/Data/examples', 'RELATIVE_PATH_APP' => '/libraries/backend/Data', 'RELATIVE_PATH_LIBRARY' => '/libraries/backend/Data/vendor', 'RELATIVE_PATH_HELPERS' => '/libraries/backend/Data/examples', 'RELATIVE_PATH_TEMPLATE' => '/libraries/backend/Data/examples/templates', 'RELATIVE_PATH_CONFIG' => '/libraries/backend/Data/examples/config', 'RELATIVE_PATH_PAGES' => '/libraries/backend/Data/examples/pages', 'RELATIVE_PATH_ASSET' => '/libraries/backend/Data/examples/assets', 'RELATIVE_PATH_ASSET_IMG' => '/libraries/backend/Data/examples/assets/img', 'RELATIVE_PATH_ASSET_CSS' => '/libraries/backend/Data/examples/assets/css', 'RELATIVE_PATH_ASSET_JS' => '/libraries/backend/Data/examples/assets/js', 'LOCAL_PATH_BASE' => '/var/www/libraries/backend/Data/examples', 'LOCAL_PATH_APP' => '/var/www/libraries/backend/Data', 'LOCAL_PATH_LIBRARY' => '/var/www/libraries/backend/Data/vendor', 'LOCAL_PATH_HELPERS' => '/var/www/libraries/backend/Data/examples', 'LOCAL_PATH_TEMPLATE' => '/var/www/libraries/backend/Data/examples/templates', 'LOCAL_PATH_CONFIG' => '/var/www/libraries/backend/Data/examples/config', 'LOCAL_PATH_PAGES' => '/var/www/libraries/backend/Data/examples/pages', 'LOCAL_PATH_ASSET' => '/var/www/libraries/backend/Data/examples/assets', 'LOCAL_PATH_ASSET_IMG' => '/var/www/libraries/backend/Data/examples/assets/img', 'LOCAL_PATH_ASSET_CSS' => '/var/www/libraries/backend/Data/examples/assets/css', 'LOCAL_PATH_ASSET_JS' => '/var/www/libraries/backend/Data/examples/assets/js', 'HTTP_PATH_BASE' => 'localhost:8888/libraries/backend/Data/examples', 'HTTP_PATH_APP' => 'localhost:8888/libraries/backend/Data', 'HTTP_PATH_LIBRARY' => false, 'HTTP_PATH_HELPERS' => false, 'HTTP_PATH_TEMPLATE' => false, 'HTTP_PATH_CONFIG' => false, 'HTTP_PATH_PAGES' => false, 'HTTP_PATH_ASSET' => 'localhost:8888/libraries/backend/Data/examples/assets', 'HTTP_PATH_ASSET_IMG' => 'localhost:8888/libraries/backend/Data/examples/assets/img', 'HTTP_PATH_ASSET_CSS' => 'localhost:8888/libraries/backend/Data/examples/assets/css', 'HTTP_PATH_ASSET_JS' => 'localhost:8888/libraries/backend/Data/examples/assets/js', 'REQUEST_QUERY' => false, 'REQUEST_METHOD' => 'GET', 'REQUEST_STATUS' => false, 'REQUEST_PROTOCOL' => 'http://', 'REQUEST_PATH' => '/', 'REQUEST_PATH_STRIP_QUERY' => '/', 'PRODUCTION' => false, 'PAGE_PATH_DEFAULT' => '/index', 'PAGE_PATH' => '/index', ) 

    используйте dirname(__FILE__) в глобальном файле конфигурации.

    Лучший способ Использование dirname (). Поскольку SERVER ['DOCUMENT_ROOT'] не работает на всех серверах, а также возвращает путь к запуску сервера.

     $root = dirname( __FILE__ ); $root = __DIR__; $filePath = realpath(dirname(__FILE__)); $rootPath = realpath($_SERVER['DOCUMENT_ROOT']); $htmlPath = str_replace($root, '', $filePath);