Я могу установить путь включения 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.
Can be used only with
PHP_INI_ALLandPHP_INI_PERDIRtype directives
как указано на странице, на которую я ссылался. Если вы перейдете к полному списку, вы увидите, что путь включения - это директива PHP_INI_ALL.
Вы также можете установить include_path в файле php.ini. Я любитель Perl, так что рассчитываю, что смогу загрузить include, и include будет делать все правильно. У меня все включения находятся в определенном каталоге, который добавлен к include_path. Я могу делать такие вещи как
require_once "ClassName.php";
Мне не нужно беспокоиться об относительных путях или расположении файлов.
Я также написал свой собственный CustomRequire, чтобы делать такие вещи, как
function CustomRequire ($file) {
if (defined('MYINCLUDEPATH')) {
require_once MYINCLUDEPATH . "/$file";
} else {
require_once $file;
}
}
Таким образом, я могу изменить способ включения позже. Конечно, вам все еще нужно найти способ включить свой код включения :)
Мех. Это PHP для вас. Я все еще использую эту систему, и она отлично работает с производительностью APC. Если можете, используйте автозагрузчик. Проблема с автозагрузчиком заключается в том, что вам нужно изменить имена классов, если вы хотите иметь какую-либо структуру для макета вашего класса в файловой системе (например, php.net/manual/en/language.oop5.autoload.php#49496). Очень хотелось бы услышать варианты получше!
Гэри, я просто указал на то, как люди склонны отрицать материал, не комментируя его. Насколько я понимаю, ваш ответ законный.
В зависимости от того, как настроен ваш хост, вам может быть разрешено разместить файл php.ini в корне вашего домашнего каталога с дополнительными директивами конфигурации.
Эрик Ван Бракель дал, ИМХО, один из лучших ответов.
Более того, если вы используете Apache и виртуальные хосты, вы можете настроить include прямо в них. Используя этот метод, вам не придется забывать оставлять команды php_admin в вашем .htaccess.
Используйте файл php.ini на веб-сайте корень, если ваша установка использует PHP как CGI (наиболее частый случай на общих хостах) с тем же синтаксисом, что и общесерверный php.ini; поместите его в .htaccess, если у вас есть PHP в качестве модуля Apache (сделайте phpinfo(), если не уверены):
php_value include_path "wherever"
Обратите внимание, что php.ini does для каждой папки не влияет на подпапки.
php_value include_path "/var/www/somesite.com/include_path/"
В вашем приложении должен быть файл конфигурации, написанный на PHP. Затем включите это с относительной страницей на каждую страницу в программе. Этот файл конфигурации будет иметь переменную для пути к каталогу include, каталогу шаблонов, каталогу изображений и т. д.
Как вы думаете, почему добавление пути к включению - плохая практика?
Этот код в верхней части корневого скрипта не должен быть таким уж плохим ...
$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());
ИМХО главное преимущество в том, что он портативен и совместим не только с Apache
Обновлено: Я видел недостаток этого метода: небольшое влияние на производительность. см. http://www.geeksengine.com/article/php-include-path.html
Помимо упомянутого вами влияния на производительность, когда я задал этот вопрос, я работал над сайтом с множеством отдельных файлов, а не с одним корневым скриптом, на который направляются все запросы.
Почему люди презирают ответ @Gary? На мой взгляд, плохая практика здесь, в SO, - отрицать комментарии из «безграничной мудрости» без, объясняя это в разделе комментариев.