Подтвердить что ты не робот

Настройка PHP Включить путь на основе сайта?

Я могу установить путь включения PHP в php.ini:

include_path = /path/to/site/includes/

Но затем пострадают другие сайты, поэтому это не хорошо.

Я могу установить PHP include в начале каждого файла:

$path = '/path/to/site/includes/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

Но это похоже на плохую практику и затуманивает все.

Таким образом, я могу включить его, а затем включить его в каждый файл:

include 'includes/config.php';

или

include '../includes/config.php';

Это то, что я делаю прямо сейчас, но путь включения config.php изменится в зависимости от того, что его включает.

Есть ли лучший способ? Это имеет значение?

4b9b3361

Ответ 1

Если вы используете apache в качестве веб-сервера, вы можете переопределить (если разрешите) параметры, используя файлы .htaccess. Подробнее см. руководство по PHP.

В основном вы помещаете в корневой сайт файл с именем .htaccess, который содержит некоторые значения PHP ini. Если вы настроили Apache для переопределения, этот сайт будет использовать все значения в вашей конфигурации PHP + значения, указанные вами в файле .htaccess.

Может использоваться только с директивами типа PHP_INI_ALL и PHP_INI_PERDIR

как указано на странице, с которой я связан. Если вы перейдете к полному списку, вы увидите, что путь include является директивой PHP_INI_ALL.

Ответ 2

Эрик Ван Бракель дал, ИМХО, один из лучших ответов.

Дополнительно, если вы используете Apache и виртуальные хосты, вы можете настроить их прямо в них. Используя этот метод, вам не придется забывать оставлять команды php_admin в вашем .htaccess.

Ответ 3

Используйте файл php.ini в корне сайта, если ваша установка использует PHP как CGI (наиболее частый случай на общих хостах) с тем же синтаксисом, что и серверный php.ini; поместите его в .htaccess, если у вас есть PHP как модуль Apache (если вы не уверены в phpinfo()):

php_value include_path "где угодно"

Обратите внимание, что php.ini для каждой папки не влияет на подпапки.

Ответ 4

Почему вы считаете, что append включить путь - это плохая практика?

Этот код рядом с корнем script не должен быть таким...

$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());

IMHO главное преимущество заключается в том, что он переносимый и совместимый не только с Apache

EDIT: я видел недостаток этого метода: небольшое влияние на производительность. см. http://www.geeksengine.com/article/php-include-path.html

Ответ 5

В зависимости от того, как настроен ваш хост, вам может быть разрешено поместить файл php.ini в корень вашего домашнего каталога с дополнительными конфигурационными директивами.

Ответ 6

В вашем приложении должен быть файл конфигурации, написанный на PHP. Затем включите это с относительной страницей на каждую страницу в программе. Этот конфигурационный файл будет иметь переменную для пути к каталогу include, dir, dir и т.д.

Ответ 7

Вы можете установить include_path в свой файл php.ini. Я человек perl, поэтому я ожидаю, что смогу загрузить, и include сделать правильно. У меня есть все мои включения в определенный каталог, который добавляется в include_path. Я могу делать что-то вроде

require_once "ClassName.php";

Мне не нужно беспокоиться об относительных путях или местоположениях файлов.

Я также написал свой собственный CustomRequire, чтобы сделать что-то вроде

function CustomRequire ($file) {
    if(defined('MYINCLUDEPATH')) {
        require_once MYINCLUDEPATH . "/$file";
    } else {
        require_once $file;
    }
}

Таким образом, я могу изменить то, как я это делаю позже. Конечно, вам все равно нужно найти способ включить код включения:)