Настройка 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'; 

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

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

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

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

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

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

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

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

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

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

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

Почему, по вашему мнению, добавить путь включения – это плохая практика?

Этот код рядом с корневым скриптом не должен быть таким уж плохим …

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

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

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

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

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

Вы также можете указать 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; } } 

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