Настройка 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
изменится в зависимости от того, что его включает.
Есть ли лучший способ? Это имеет значение?
Ответы
Ответ 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;
}
}
Таким образом, я могу изменить то, как я это делаю позже. Конечно, вам все равно нужно найти способ включить код включения:)