2013-11-15 3 views
0

У меня проблемы с относительным путем в php. В одном из моих классов У меня есть следующий код:Определить корневую директорию приложения

$iniPath = $_SERVER['DOCUMENT_ROOT'] . "/movies/config.ini"; 
$ini_array = parse_ini_file($iniPath, true); 

Этот код работает отлично, потому что она возвращает «/var/www/movies/config.ini».

Но проблема в том, что код не подлежит перевозке. Если он установлен на другом сервере, они не могут установить его в/movies /.

tl; dr Как указать каталог приложения в качестве корневого каталога в php?

+0

'$ _SERVER [ 'DOCUMENT_ROOT'] 'даст вам корневой каталог. Вы имеете в виду каталог (относительно корня), в котором работает текущий скрипт? – BenM

+1

Вы должны установить другую переменную для папки/подпапки, которую потенциальный пользователь будет использовать, а затем заменить имя//// имя переменной. Возможно, даже добавьте условие 'if' для загрузки. Переменная может быть чем-то влиять на '$ folder =" change_this ";' –

+0

@BenM Да, но где приложение запущено. У меня есть все мои php-классы в папке, называемой классами. Таким образом, его отношение к каталогу приложения, а не к тому, где работает этот конкретный скрипт – triunenature

ответ

1

Вы можете использовать __DIR__ или dirname(__FILE__), чтобы определить текущий путь относительно вашего приложения.

Вы можете определить константу внутри первого файл с именем (или в конфиге или загрузочный файл):

<?php 
    define('ROOT_DIR', __DIR__.'/'); 
    // and define some other base path 
    // you can also define everything in a separate file 
    define('MOVIE_DIR', ROOT_DIR.'movies/'); 
    // and define absolute path 
    define('CLASS_DIR', '/usr/local/share/something/that/will/never/change/'); 
    // then your code will looks like 
    $iniPath = MOVIE_DIR . '/config.ini'; 
    $ini_array = parse_ini_file($iniPath, true); 

EDIT: прочий альтернативные (после прочтения ваших комментариев в вашем вопросе) заключается в использовании set_include_path но, это не часто используется.

+0

Я никогда не использовал определение, я просто попробовал. В моем index.php я сделал инструкцию define, затем в моем документе класса я сделал APP_ROOT. '/config.ini', и он сказал, что не может найти «APP_ROOT/config.ini». Как передать определение с одной страницы php другому? Печенье? – triunenature

+0

нет, вы должны поместить все свои определения в один файл (давайте назовем его define.php). Затем включите этот файл в каждый файл, который должен их использовать. Основной шаблон состоит в том, чтобы иметь первую строку index.php, содержащую 'require_once ('config.php')', которая содержит define() и другой процесс инициализации, который должен выполняться во всех других .php-файлах – Asenar

+0

Интересно! Благодаря!!! Это сработало – triunenature

Смежные вопросы