Я могу установить путь включения PHP в php.ini
:
include_path = /path/to/site/includes/
Но тогда другие сайты затронуты, так что это не хорошо.
Я могу установить PHP include в начале каждого файла:
$path = '/path/to/site/includes/'; set_include_path(get_include_path() . PATH_SEPARATOR . $path);
Но это похоже на плохую практику и затрудняет ситуацию.
Поэтому я могу включить в него и включить его в каждый файл:
include 'includes/config.php';
или
include '../includes/config.php';
Это то, что я делаю прямо сейчас, но путь include config.php
будет меняться в зависимости от того, что его включает.
Есть ли способ лучше? Это имеет значение?
Если вы используете apache в качестве веб-сервера, вы можете переопределить (если разрешите) параметры, используя файлы .htaccess . Подробнее см. В руководстве по PHP .
В основном вы помещаете файл с именем .htaccess в свой корень сайта, который содержит некоторые значения PHP ini
. Если вы настроили Apache для переопределения, этот сайт будет использовать все значения в вашей конфигурации PHP + значения, указанные вами в файле .htaccess .
Может использоваться только с директивами типа
PHP_INI_ALL
иPHP_INI_PERDIR
как указано на странице, которую я связал. Если вы перейдете к полному списку, вы увидите, что путь include является директивой PHP_INI_ALL
.
Эрик Ван Бракель дал, ИМХО, один из лучших ответов.
Более того, если вы используете Apache и виртуальные хосты, вы можете настроить прямо в них. Используя этот метод, вам не придется забывать оставлять команды php_admin в вашем .htaccess.
Используйте файл php.ini в корне сайта, если ваша установка использует PHP как CGI (наиболее частый случай на общих хостах) с тем же синтаксисом, что и серверный php.ini; поместите его в .htaccess, если у вас есть PHP как модуль Apache (если вы не уверены в phpinfo ()):
php_value include_path "где угодно"
Обратите внимание, что php.ini для каждой папки не влияет на подпапки.
Почему, по вашему мнению, добавить путь включения – это плохая практика?
Этот код рядом с корневым скриптом не должен быть таким уж плохим …
$path = '/path/to/site/includes/'; set_include_path($path . PATH_SEPARATOR . get_include_path());
ИМХО главное преимущество заключается в том, что он переносимый и совместимый не только с Apache
EDIT: Я видел недостаток этого метода: небольшое влияние на производительность. см. http://www.geeksengine.com/article/php-include-path.html
В зависимости от того, как настроен ваш хост, вам может быть разрешено поместить файл php.ini
в корень вашего домашнего каталога с дополнительными конфигурационными директивами.
Ваше приложение должно иметь конфигурационный файл, написанный на PHP. Затем включите это с относительной страницей на каждую страницу в программе. В этом конфигурационном файле будет указана переменная для пути к директории include, dir, dir и т. Д.
Вы также можете указать 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; } }
Таким образом, я могу изменить то, как я это делаю позже. Конечно, вам все равно нужно найти способ включить свой код include 🙂