Урок84 настройки Друпала, о которых вы могли не знать

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

Я потратил немалое количество времени и нашёл все переменные, которые невозможно задать с помощью UI. В этот список вошли как некоторые настройки из settings.php, так и абсолютно недокументированные. Некоторые переменные я сам узнал впервые, и был приятно удивлён этим открытием. Переменные, которые я счёл полезным к изучению, я выделил зелёным цветом. Переменные, которые я считаю, что знать обязательно - красным. Остальные просто для ознакомления, чтобы просто держать в голове уровень возможностей Drupal 7.

Название переменной Значение по умолчанию Описание
404_fast_paths_exclude /\/(?:styles)\// Регулярное выражение для путей, которые не должны сразу отдавать 404 ошибку, если файл не был найден по этому пути.
404_fast_paths /\.(?:txt|png|gif|jpe?g |css|js|ico|swf|flv|cgi| bat|pl|dll|exe|asp)$/i Регулярное выражение для расширений файлов, для которых можно сразу отдавать 404 ошибку (без дополнительных проверок), если такой файл не был найден на сервере.
404_fast_html Слишком большое, поэтому ссылка. HTML, который будет подставлен для отображение 404 страницы при использовании drupal_fast_404().
actions_max_stack 35 Максимальное количество действий (модуль Actions, hook_action_info()), которое может выполняться за один раз после выполнения определённых событий.
admin_compact_mode FALSE Включение компактного режима для админки. В этом режиме обычно скрываются лишний текст (описания) и прочие мелочи.
allow_authorize_operations TRUE Разрешение на выполнение различных авторизационных операций, не требующих загрузки Друпала. Например, деплой или обновление модулей. Не путать с авторизацией пользователей на сайте. Рекомендую отключать эту переменную на рабочем сайте, для повышение безопасности.
allow_insecure_uploads 0 Контроль за загрузкой потенциально проблемных файлов. К ним относятся файлы с nullbytes, исполняемые файлы и тд.
blocked_ips NULL Массив с ip адресами, для которых не должен загружаться сайт. Значение этой переменной нельзя задать через UI. Однако через UI можно закинуть список блокированных адресов в таблицу {blocked_ips}, откуда будут браться данные, если не задана переменная.
cache_backends array() Массив с путями к файлам с классами, в которых реализованы системы хранения кэшей, альтернативные базе данных (DrupalDatabaseCache).
cache_class_[CACHE-BIN] NULL Название класса, который реализует хранение кэша для указанного сегмента кэша [CACHE-BIN].
cache_default_class DrupalDatabaseCache Название класса, который реализует хранение кэша для сегментов, у которых не указан явно другой класс для тех же целей.
comment_maintain_node_statistics TRUE При отключении данной настройки, Друпал перестаёт записывать статистику по использованию и количеству комментариев для материалов в таблицу {node_comment_statistics}.
contact_threshold_limit 5 Максимальное количество писем, которое можно отправить с одного ip адреса через модуль Contact за определённый период времени (contact_threshold_window).
contact_threshold_window 3600 Период времени (в секундах), за который можно отправить определённое количество писем (contact_threshold_limit) через модуль Contact.
cron_key drupal Специальный ключ, с которым запускается крон в Друпале, чтобы избежать DDOS уязвимости. По умолчанию он задаётся вместе с установкой Друпала, однако при необходимости можно выставить вручную и менять его хоть каждый день.
css_gzip_compression TRUE Переменная включает автоматическое создание и использование архивированных css файлов. Это улучшает скорость загрузки страницы за счёт уменьшения загружаемого клиентом трафика.
drupal_http_request_function FALSE Возможность изменить функцию, которая будет вызываться для обработки HTTP запросов, вместо функции ядра drupal_http_request().
drupal_js_version_query_string v= Строка, которая добавляется к загружаемому js файлу для указания версии. Можно изменять для динамической передачи каких-либо аргументов в подгружаемые js файлы.
drupal_private_key 0 Используется для генерации уникальных значений (хэшей). Если переменная не указана - задаётся из случайных значений.
drupal_stale_file_threshold 2592000 Количество времени (в секундах), через которое некоторые файлы считаются устаревшими. В ядре используется для удаления старых кэшированных css и js файлов.
drupal_weight_select_max DRUPAL_WEIGHT_SELECT_MAX Максимальное количество элементов #weight в форме. Если количество этих элементов превышает указанное значение, то для задания веса используется textfield.
field_purge_batch_size 10 Количество значений полей, которые удаляются по крону за один раз, если удаление этих значений было отложено (т.е. в таблице с полем в колонке deleted стоит 1).
field_storage_default field_sql_storage Название начала наименований функций бэкенда, которые используются для хранения данных полей.
file_chmod_directory 0775 Права доступа по умолчанию на создаваемые Друпалом директории.
file_chmod_file 0644 Права доступа по умолчанию на создаваемые Друпалом файлы.
file_description_length 128 Длина описания у всех файловых полей, созданных с помощью Field API.
file_description_type textfield Виджет описания поля у всех файловых полей, созданных с помощью Field API.
file_icon_directory drupal_get_path('module', 'file') . '/icons' Путь к директории, где хранятся иконки для файлов с различными mime-type'ами.
filter_allowed_protocols array('ftp', 'http', 'https', 'irc', 'mailto', 'news', 'nntp', 'rtsp', 'sftp', 'ssh', 'tel', 'telnet', 'webcal') Список протоколов, которые не считаются потенциально опасными. Используются в drupal_strip_dangerous_protocols() и _filter_url().
https FALSE Включение шифрованного соединения.
image_allow_insecure_derivatives FALSE Эта переменная введена для безопасности в Drupal 7.20 (заметки релиза). Её включение убирает добавление токена к урлам изображений.
image_style_preview_image drupal_get_path('module', 'image') . '/sample.png' Путь к изображению, которое является тестовым при создании различных стилей изображений (пресетов).
install_profile standard Название установочного профиля, с которым инсталируется Друпал.
js_gzip_compression TRUE Переменная включает автоматическое создание и использование архивированных javascript файлов. Это улучшает скорость загрузки страницы за счёт уменьшения загружаемого клиентом трафика.
language_native_enabled TRUE Отключение переменной убирает английский язык из списка доступных языков.
locale_cache_length 75 Длина источника перевода строки. Используется при выгрузке переводов из базы данных. Используется для ограничения мощности используемых серверных ресурсов.
locale_cache_strings 1 Переменная показывает, включено ли кэширование переводимых строк. Отключение этой переменной может привести к серьёзным потерям производительности.
locale_custom_strings_[LANG] array() Массив с переводами для языка [LANG]. Может использоваться для неординарной интеграции с системой переводов Друпала.
locale_field_language_fallback TRUE Поддержка обработки ситуации, когда сущность не имеет полей с переводом для текущего языка.
locale_js_directory languages Директория, в которой хранятся переводы для js.
lock_inc includes/lock.inc Путь к файлу, в котором хранятся функции для обработки системы блокировок Друпала. Пример можно посмотреть в моём модуле Memcache Storage.
mail_line_endings MAIL_LINE_ENDINGS Символ окончания строк в емейлах.
mail_system array('default-system' => 'DefaultMailSystem') Поддерживаемые классы, которые реализуют системы отправки писем.
maintenance_theme NULL Название темы, которая будет включаться в режиме обслуживания и прочих технических работах (обновление сайта, и тд).
maximum_replication_lag 300 Время в секундах, на протяжении которого для определённого пользователя не будут использоваться slave базы данных, давая тем самым время на проведение репликации между используемыми БД. Пользователю эта переменная добавляется в сессию после создания материала или комментария. Таким образом убирается вероятность, что пользователь не увидет свой контент, если реприкация ещё не была произведена, а содержимое ему отдаётся со slave базы данных.
menu_inc includes/menu.inc Путь к файлу, в котором содержатся функции, которые отвечают за обработку и отображение всей системы меню (включая пути) Друпала.
omit_vary_cookie NULL Отключение добавления заголовка Vary: Cookie для анонимов. Это позволяет прокси серверу отдать страницу из локального кэша, минуя обращение к веб серверу. Однако если включить эту переменную, то авторизованные пользователи тоже будут получать страницы из кэша. Поэтому механизм отличия анонимов от авторизованных придётся писать в конфигах прокси сервера.
page_cache_invoke_hooks TRUE Переменная указывает, надо ли вызывать hook_boot() и hook_exit() для анонимов, если страница отдаётся из кэша.
page_cache_without_database NULL Переменная отвечает за отдачу анонимам страницы из кэша без соединения к базе данных. Подробнее можно прочитать в моей статье про кэш страниц.
password_count_log2 DRUPAL_HASH_COUNT Длина хэша при генерации паролей. При массовой генерации паролей уменьшение этого числа может сократить время выполнения этой операции.
password_inc includes/password.inc Путь к файлу, который содержит функции для генерации, хэширования и контроля паролей.
path_inc includes/path.inc Путь к файлу, который содержит функции для работы с путями и алиасами в системе.
proxy_server '' Имя используемого прокси сервера.
proxy_port 8080 Номер порта, по которому можно подключиться к прокси серверу.
proxy_username '' Имя пользователя, с которым можно подключиться к прокси серверу.
proxy_password '' Пароль, с которым можно подключиться к прокси серверу.
proxy_user_agent '' Название браузера, с которым Друпал будет подключаться к прокси серверу. Если прокси сервер не делает различий по количеству подключений для определённого браузера, то переменную можно не задавать.
proxy_exceptions array('127.0.0.1', 'localhost') Массив адресов, для которых не нужно подключение к прокси серверу.
reverse_proxy 0 Переменная указывает, что пользователи приходят на сайт через реверсивный прокси.
reverse_proxy_header HTTP_X_FORWARDED_FOR Заголовок, по которому будет определяться IP адрес пользователя, идущего через реверсивный прокси сервер.
reverse_proxy_addresses array() Массив IP адресов всех реверсивных прокси, через которые пользователи попадают на сайт. Необходим для корректного распознавания пользовательских IP адресов.
queue_class_[QUEUE-NAME] NULL Название класса, который производит обработку очереди с машинным именем [QUEUE-NAME].
queue_default_class SystemQueue Название класса, который отвечает за обработку всех очередей, для которых не указан другой обработчик.
queue_default_reliable_class SystemQueue Название класса, который будет обрабатывать очереди, если класс, указанный в queue_default_class по каким-либо причинам не подходит для обработок очередей. Советую не менять это значение.
search_and_or_limit 7 Количество подряд ищущих слов, разделяемые операндами И и ИЛИ, после которых последующие слова уже не будут засчитываться.
search_tag_weights array('h1' => 25, 'h2' => 18, 'h3' => 15, 'h4' => 12, 'h5' => 9, 'h6' => 6, 'u' => 3, 'b' => 3, 'i' => 3, 'strong' => 3, 'em' => 3, 'a' =>10) Поиск Друпала определяет вес фраз в зависимости от тэгов, в которые эти фразы обёрнуты. Вес влияет на ранжирование материала (чем больше вес - тем выше материал в выдаче). Эта переменная позволяет менять вес тэгов.
session_inc includes/session.inc Путь к файлу, в котором содержатся функции, управляющие пользовательскими сессиями. Пример такого файла можно найти в Memcache Storage.
session_write_interval 180 Частота (в секундах), с которой пользовательская сессия обновляется в БД (или другом хранилище). Обратите внимание, что если писать в переменную $_SESSIONS значения явно, то запись будет производиться немедленно. Это значение влияет лишь на автоматическую запись времени последнего посещения сайта пользователем.
shortcut_max_slots 7 Максимальное количество слотов, предоставляемое модулем Shortcut для размещение на панели быстрого доступа.
taxonomy_maintain_index_table TRUE Переменная отвечает за поддержку дополнительной связи между материалами и таксономии в таблице {taxonomy_index}. Отключать эту переменную советую только разработчикам, которые знают, к чему это может привести.
taxonomy_override_selector FALSE Включение этой переменной позволяет отключить в ядре кусок формы, отвечающий за вывод родительского элемента формы в при редактировании термина. Эта переменная может использоваться контриб модулями для имплементации в этом месте кастомной логики отображение иерархического списка терминов, которые можно выбрать в качестве родительского термина.
taxonomy_terms_per_page_admin 100 Количество терминов, которое отображается на странице просмотра терминов словаря.
theme_link TRUE Отключение этой переменной убирает возможность темизации ссылок. За счёт того, что на странице ссылок достаточно много, отключение этой переменной может несколько повысить производительность. Однако ссылки становятся нетемизируемыми (большинству сайтов оно и не надо).
tracker_batch_size 1000 Количество единиц контента, которые индексирует модуль Tracker за один запуск крона.
translation_language_type LANGUAGE_TYPE_INTERFACE Возможность для контриб модулей изменить ссылки на перевод содержимого.
update_fetch_url UPDATE_DEFAULT_URL Урл, по которому модуль Update проверяет наличие обновлений для контриб модулей и ядра Друпала.
update_max_fetch_attempts UPDATE_MAX_FETCH_ATTEMPTS Максимальное количество попыток получить обновление для модуля.
update_max_fetch_time UPDATE_MAX_FETCH_TIME Время, в течение которого будет выполняться очередь на получение обновлений для модулей при запуске крона.
user_failed_login_identifier_uid_only FALSE Переменная определяет, для какого идентификатора будут считаться количество попыток авторизоваться. По умолчанию количество попыток авторизации определённого пользователя считается только с одного ip адреса, а попытки авторизации с других адресов начинают свой счёт с нуля. Включение этой переменной приведёт к тому, что у пользователя будет только определённое количество попыток авторазации, и неважно, с каких ip адресов он пытается авторизоваться.
user_failed_login_ip_limit 50 Суммарное количество допустимых попыток авторизации с одного ip адреса за определённый период (user_failed_login_ip_window).
user_failed_login_ip_window 3600 Период (в секундах), в течение которого можно провести не больше определённого количества попыток авторизации (user_failed_login_ip_limit). Если пользователь попытается превысить это количество - ему будет показана соответствующее сообщение с предложением попробовать позже.
user_failed_login_user_limit 5 Максимальное количество попыток авторизации определённого пользователя с одного ip адреса (или определённого пользователя вообще, зависит от переменной, описанной выше) за период времени, определённый в user_failed_login_user_window.
user_failed_login_user_window 21600 Период времени (в секундах), в течение которого пользователь может совершить не больше определённого количества попыток авторизации (user_failed_login_user_limit).
user_password_reset_timeout 86400 Период времени (в секундах), в течение которого действительна ссылка на восстановление пароля.

Как задать эти переменные?

В файле settings.php достаточно указать так:

$conf['ИМЯ_ПЕРЕМЕННОЙ'] = ЗНАЧЕНИЕ_ПЕРЕМЕННОЙ;

Пример:

$conf['admin_compact_mode'] = TRUE;

Официальная документация не UI переменных

Инициатива по документированию таких настроек поднималась достаточно давно, но не увенчалась успехом. Если хотите довести до всего сообщества о существовании этих переменных - добро пожаловать в соответствующее issue.

Комментарии

Аватар пользователя kalabro
kalabro написала:

Невероятной крутости материал!

Спасибо!

25.06.2013 17:11
Аватар пользователя andron13
andron13 написал:

Я не понял, где картинки?

25.06.2013 22:03
Аватар пользователя Bender
Bender написал:

Спасибо!

26.06.2013 10:14
Аватар пользователя Ch
Ch написал:

Хорошая шпаргалка. К ней бы ещё пример settings.php с оптимальными настройками для production сайтов.

26.06.2013 13:47
Аватар пользователя Spleshka
Spleshka написал:

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

26.06.2013 23:58
Аватар пользователя seaji
seaji написал:

Хорошо бы указать для какой версии Drupal актуальны эти настройки

30.06.2013 13:01
Аватар пользователя Spleshka
Spleshka написал:

Спасибо, подправил статью.

30.06.2013 22:19
Аватар пользователя benya
benya написал:

drupal_http_request_fails забыл или по каким то причинам не добавлена?

08.07.2013 16:37
Аватар пользователя Spleshka
Spleshka написал:

Это внутренняя переменная, она не должна задаваться ни через UI, ни в settings.php. Друпал сам задаёт её значение, когда это необходимо.

10.07.2013 15:28
Аватар пользователя Benya
Benya написал:

Странно, ты говоришь, что она не задается в settings.php, хотя само ядро пишет обратное:

Из-за настроек системы сервера или конфигурации сети Drupal не имеет доступа к веб-страницам, что снижает его функциональность. Это может быть связано с настройками веб-сервера или PHP, и должно быть исправлено для того, чтобы загружать информацию о доступных обновлениях, входить в систему с помощью OpenID, или использовать другие зависимые от сети сервисы. Если вы уверены, что у Drupal есть доступ к веб-страницам, но вы по-прежнему видите это сообщение, добавьте $conf['drupal_http_request_fails'] = FALSE; в конец файла settings.php.

11.07.2013 12:50
Аватар пользователя Сергей
Сергей написал:

Меня вот это сообщение тоже волнует - можете разъяснить причины его появления и как это решать, добавление FALSE мне кажется это не лучший выход из ситуации.

14.08.2013 19:33
Аватар пользователя Benya
Benya написал:

На d.org есть несколько тем по этому поводу и причин появления этого сообщения несколько. Если интересно, то погуглите на эту тему

18.08.2013 19:13
Аватар пользователя Ch
Ch написал:

Еще одна переменная без UI: filter_fallback_format

18.08.2013 08:47
Аватар пользователя Никола
Никола написал:

Добрый день! В Drupal можно получить логин пользователя и зайти на сайт хоть сто раз одновременно. То есть под одним логином может войти несколько разных человек. А как можно сделать так что бы если лог залогинился, второй человек уже бы не смог? Как это можно сделать для Drupal7? (Для Drupal6 решение есть - модуль http://drupal.org/project/single_login).

05.10.2013 18:39
Аватар пользователя Spleshka
Spleshka написал:

Добрый день. Держите ссылки на альтернативы:

  • https://drupal.org/project/autologout
  • https://drupal.org/project/session_limit
06.10.2013 11:24
Аватар пользователя Никола
Никола написал:

Благодарю Вас за помощь!!!
Все оказалось кстати. Прежде всего, session_limit - как раз в точку.
С уважением к Вам, Никола.

15.10.2013 17:14
Аватар пользователя йцу
йцу написал:

admin_compact_mode - в разделе конфигурация есть ссылка скрыть описание это не оно?

22.02.2014 14:12
Аватар пользователя nitskel
nitskel написал:

Хочу изменить вот эту константу DRUPAL_MAXIMUM_TEMP_FILE_AGE
Так можно?
$conf['DRUPAL_MAXIMUM_TEMP_FILE_AGE '] = 60*60*24*2;

09.09.2014 00:27
Аватар пользователя Дмитрий
Дмитрий написал:

спасибо!

02.03.2015 17:06
Аватар пользователя sdelay.tv
sdelay.tv написал:

Спасибо автору! Про некоторые я и не знал

21.09.2015 19:33
Аватар пользователя <a href="http://www.vipigry.ru/">Аанг</a>
<a href="http:/... написал:

Очень полезная информация, особенно taxonomy_override_selector.

14.11.2015 22:34

Комментировать