php include_paths в htaccess

У меня есть несколько вещей в разных файлах, которые вызываются из разных мест. Я пытался использовать переменную $ROOT, но поскольку я использую несколько разных файлов (index.php, view.php, admin/index.php и т. д.) и не имею начальной загрузки (или что-то еще называется), я не всегда могу получить $ROOT из вещей, вызываемых ajax и т.д..

если я установлю include_path через htaccess примерно так:

php_value include_path ".;C:\wamp\www\project\"

Я предполагаю, что это не включает подкаталоги, и мне также придется добавить строку для каждого другого каталога, в котором находятся мои файлы, даже если они находятся в C:\wamp\www\project\components или C:\wamp\www\project\model?

И мне добавить новые строки или запятые? Я не могу найти в Интернете ни одного примера использования htaccess для установки путей включения с несколькими путями...

С другой стороны, есть ли способ получить все, что относится к моей переменной $ ROOT, и использовать абсолютные пути, и каким-то образом каждый файл, даже если он находится в разных местах, ссылается на эту конкретную переменную? (без необходимости вносить массовые изменения во все файлы в приложении?) Преимущество этого заключается в том, что нужно только изменить файл при изменении/развертывании сервера, но я не знаю, как начать это делать!

Благодарность :)


person Damon    schedule 30.08.2011    source источник
comment
Вы можете динамически изменить путь включения из скрипта, что позволит вам использовать переменную $ROOT. Но тогда вы сталкиваетесь с проблемой куриного яйца: если $ROOT находится в файле, которого еще нет в вашем пути включения, вы не можете включить его без абсолютного пути.   -  person Marc B    schedule 30.08.2011
comment
Да... этот потенциал курицы и яйца - это то, что я пытаюсь обойти. Это делает мой мозг грустным. Я предполагаю, что если я включу путь к каталогу с конфигурацией, require_once config.php в верхней части каждой страницы, а затем использую мою переменную $root везде, где я должен быть покрыт?   -  person Damon    schedule 30.08.2011


Ответы (2)


Я предполагаю, что это не включает подкаталоги,

Почему ты не попробовал? (он включает в себя подкаталоги)

Я не могу найти в Интернете ни одного примера использования htaccess для установки путей включения с несколькими путями.

? Вы уже предоставили один:

php_value include_path ".;C:\wamp\www\project\"

Пути '.' и 'C:\wamp\www\project\'

(Кстати, лучше использовать '/' в качестве разделителя каталогов - это позволяет избежать путаницы с экранированием в стиле unix)

person symcbean    schedule 30.08.2011
comment
p.s. файлы не включались, но я не был уверен, было ли это из-за подкаталога или просто мой файл htaccess вообще не работает .. я думаю, это последнее - person Damon; 30.08.2011
comment
@ Деймон: '.' текущий каталог - person symcbean; 31.08.2011
comment
текущий каталог по отношению к файлу htaccess, а не к файлу php? (причина, по которой я так много читал об этом, сбивает с толку, заключается в том, что «написать путь» можно по-разному..) - person Damon; 31.08.2011
comment
Текущий каталог исполняемого процесса — по умолчанию это каталог, в котором был запущен базовый php-скрипт (т.е. не изменяется для файлов, включенных из других мест) - person symcbean; 31.08.2011
comment
разве это не то место, где он ищет файлы? или это переопределяется htaccess, если это не указано явно? - person Damon; 31.08.2011

В среде Windows вы должны использовать точку с запятой для разделения путей включения следующим образом:

php_value include_path ".;C:\wamp\www\project\;C:\wamp\www\project\components;C:\wamp\www\project\models"

Но я не уверен, почему вы хотите это сделать. Добавление подкаталогов открывает возможность конфликтов имен файлов. Если у вас есть, C:\wamp\www\project\components\example.php и C:\wamp\www\project\models\example.php, включение обоих подкаталогов в ваш путь включения создаст неоднозначность при попытке включить любой файл. Если у вас уже есть каталог проекта в вашем пути включения, вы уже можете вызывать что-либо внутри него, используя относительный путь. Например:

<?php include 'components/example.php'; ?>

Это будет включать C:\wamp\www\project\components\example.php и устранит вероятность любых конфликтов имен файлов.

person Raider    schedule 30.08.2011