Настройка PHP Включить путь для каждого сайта? - PullRequest
18 голосов
/ 24 августа 2008

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

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

Ответы [ 7 ]

16 голосов
/ 24 августа 2008

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

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

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

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

7 голосов
/ 24 августа 2008

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

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

4 голосов
/ 16 сентября 2008

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

php_value include_path "wherever"

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

3 голосов
/ 01 сентября 2010

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

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

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

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

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

1 голос
/ 29 апреля 2009

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

1 голос
/ 24 августа 2008

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

0 голосов
/ 24 августа 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...