Настройка пути включения PHP для каждого сайта?
Вопрос
Я могу установить путь включения PHP в php.ini
:
include_path = /path/to/site/includes/
Но тогда это затронет и другие веб-сайты, так что это бесполезно.
Я могу установить PHP-включение в начале каждого файла:
$path = '/path/to/site/includes/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
Но это кажется плохой практикой и запутывает ситуацию.
Итак, я могу включить это, а затем включить в каждый файл:
include 'includes/config.php';
или
include '../includes/config.php';
Это то, что я делаю прямо сейчас, но путь включения config.php
будет меняться в зависимости от того, что в него входит.
Есть ли способ лучше?Это имеет значение?
Решение
Если вы используете Apache в качестве веб-сервера, вы можете переопределить (если разрешите) настройки, используя .htaccess файлы.Видеть руководство по PHP для получения подробной информации.
По сути, вы помещаете файл с именем .htaccess в корне вашего сайта, который содержит немного PHP ini
ценности.Если вы настроили Apache для разрешения переопределений, этот сайт будет использовать все значения в вашей конфигурации PHP + значения, указанные вами в .htaccess файл.
Можно использовать только с
PHP_INI_ALL
иPHP_INI_PERDIR
директивы типа
как указано на странице, на которую я дал ссылку.Если вы перейдете к полному списку, вы увидите, что путь включения — это PHP_INI_ALL
директива.
Другие советы
Эрик Ван Бракел дал, ИМХО, один из лучших ответов.
Более того, если вы используете Apache и виртуальные хосты, вы можете настроить включения непосредственно в них.Используя этот метод, вам не придется забывать оставлять команды php_admin в вашем .htaccess.
Использовать php.ini файл на сайте корень, если ваша установка использует PHP как компьютерная графика (наиболее частый случай на общих хостах) с тем же синтаксисом, что и общесерверный php.ini;положить это в .htaccess
если у вас PHP в качестве модуля Apache (выполните phpinfo()
если не уверены):
php_value include_path "wherever"
Обратите внимание, что для каждой папки php.ini does
не влияет подпапки.
Как вы думаете, почему добавление пути для включения — плохая практика?
Этот код в верхней части корневого скрипта не должен быть таким уж плохим...
$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());
ИМХО, главное преимущество в том, что он портативен и совместим не только с Apache.
РЕДАКТИРОВАТЬ:Я увидел недостаток этого метода:небольшое влияние на производительность.видеть http://www.geeksengine.com/article/php-include-path.html
В зависимости от того, как настроен ваш хост, вам может быть разрешено разместить php.ini
файл в корне вашего домашнего каталога с дополнительными директивами конфигурации.
Ваше приложение должно иметь файл конфигурации, написанный на PHP.Затем включите это с соответствующей страницей на каждую страницу программы.В этом файле конфигурации будет переменная для пути к каталогу include, каталогу шаблонов, каталогу изображений и т. д.
Вы можете установить 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;
}
}
Таким образом, я смогу изменить способ включения позже.Конечно, вам все равно нужно найти способ включить включаемый код :)