Установка пути включения 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 будет меняться в зависимости от того, что его включает.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
19
0
23 823
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

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

Can be used only with PHP_INI_ALL and PHP_INI_PERDIR type 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;
    }
}

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

Почему люди презирают ответ @Gary? На мой взгляд, плохая практика здесь, в SO, - отрицать комментарии из «безграничной мудрости» без, объясняя это в разделе комментариев.

amn 10.09.2012 18:53

Мех. Это PHP для вас. Я все еще использую эту систему, и она отлично работает с производительностью APC. Если можете, используйте автозагрузчик. Проблема с автозагрузчиком заключается в том, что вам нужно изменить имена классов, если вы хотите иметь какую-либо структуру для макета вашего класса в файловой системе (например, php.net/manual/en/language.oop5.autoload.php#49496). Очень хотелось бы услышать варианты получше!

Gary Richardson 11.09.2012 19:47

Гэри, я просто указал на то, как люди склонны отрицать материал, не комментируя его. Насколько я понимаю, ваш ответ законный.

amn 12.09.2012 16:07

В зависимости от того, как настроен ваш хост, вам может быть разрешено разместить файл 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/"

velcrow 12.12.2012 22:11

В вашем приложении должен быть файл конфигурации, написанный на 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

Помимо упомянутого вами влияния на производительность, когда я задал этот вопрос, я работал над сайтом с множеством отдельных файлов, а не с одним корневым скриптом, на который направляются все запросы.

AnnanFay 03.10.2010 17:33

Другие вопросы по теме