Настройка пути включения PHP для каждого сайта?

StackOverflow https://stackoverflow.com/questions/24622

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

php_value include_path "wherever"

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top