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

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

23.08.2008 21:39:54
7 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

16
14.01.2016 06:50:51

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

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

0
9.01.2017 12:47:21
Почему люди игнорируют ответ @ Гэри? На мой взгляд, плохая практика в SO - опровергать комментарии из «безграничной мудрости», не объясняя это в разделе комментариев.
amn 10.09.2012 14:53:01
Мех. Это PHP для вас. Я все еще использую эту систему, и она отлично работает с APC. Если можете, используйте автозагрузчик. Проблема с автоматическим загрузчиком заключается в том, что вам нужно убить имена ваших классов, если вы хотите иметь какую-либо структуру для вашего класса в файловой системе (например, php.net/manual/en/language.oop5.autoload.php# 49496 ). Я хотел бы услышать лучшие варианты!
Gary Richardson 11.09.2012 15:47:32
Гэри, я просто указал, как люди склонны понижать голос, не комментируя это. Насколько я понимаю, ваш ответ является законным.
amn 12.09.2012 12:07:37

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

1
24.08.2008 14:57:55

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

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

7
24.08.2008 15:16:42

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

php_value include_path "wherever"

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

4
3.04.2018 15:46:56
php_value include_path "/var/www/somesite.com/include_path/"
velcrow 12.12.2012 18:11:10

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

1
29.04.2009 17:06:28

Как вы думаете, почему добавление пути является плохой практикой?

Этот код в верхней части корневого скрипта не должен быть таким плохим ...

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

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

РЕДАКТИРОВАТЬ: я увидел недостаток этого метода: небольшое влияние на производительность. см. http://www.geeksengine.com/article/php-include-path.html

3
1.09.2010 14:22:14
Помимо влияния на производительность, о котором вы упомянули, когда я задал этот вопрос, я работал над сайтом с множеством отдельных файлов и без единого корневого скрипта, на который направлены все запросы.
AnnanFay 3.10.2010 13:33:27