В настоящее время я пишу одно из моих первых php-приложений.
Приложение должно подключиться к серверу LDAP и изменить некоторые пользовательские атрибуты в каталоге.
Это приложение имеет некоторые параметры для чтения в базе данных MySQL для запуска.
Некоторые примеры этих параметров могут быть:
-LDAP адрес
Учетная запись -LDAP
Пароль
Есть намного больше параметров, которые определяют, например, способ аутентификации пользователей в моем приложении …
В настоящее время база данных читается при каждой инициализации сеанса пользователя, но это не имеет никакого смысла, поскольку параметры не меняются от сеанса к другому.
Итак, я ищу способ загрузить эти параметры из базы данных, только один раз (например, при инициализации службы php), и доступ к этим параметрам в «нормальном» коде php через переменные.
Каков был бы лучший способ сделать это?
Заранее спасибо.
Вы ищете постоянное хранилище перекрестных запросов. Есть много вариантов для этого.
Самое простое APCu (который может использоваться вместе с Zend OpCache или для PHP < 5.5, APC).
Просто:
if (apc_exists('mykey')) {
$data = apc_fetch('mykey');
} else {
// create it from scratch
apc_store('mike', $data);
}
$data
может быть любым типом PHP, массивами, объектами или скалярами.
Вы даже можете поместить этот код в auto_prepend_file
Настройка INI, поэтому он запускается автоматически при каждом запросе.
тем не мение: это на сервер (и в соответствии с SAPI, поэтому mod_php / php-fpm / cli не разделяют кеш), поэтому вам придется создавать его один раз для каждого сервера.
Кроме того, для настройки нескольких серверов вы можете использовать что-то вроде memcached
или же redis
, Это автономные демоны, которые позволят вам хранить произвольные пары ключ / значение строковых данных (поэтому вам может понадобиться serialize()
/unserialize()
на ценности).
Я лично предпочитаю memcache, который имеет два расширения для PHP, pecl/memcached
а также pecl/memcache
(Я предпочитаю pecl / memcached, у него больше возможностей).
Оба они довольно просты.
pecl/memcached
:
$memcache = new Memcached();
$memcache->addServer('localhost', '11211');
$data = $memcache->get('mykey');
if (empty($data)) {
// Create data
$memcache->set('mykey', $data);
}
pecl/memcache
:
$memcache = new Memcache();
$memcache->connect(); // uses localhost:11211, the default memcache host/port
$data = $memcache->get('mykey');
if (empty($data)) {
// Create data
$memcache->set('mykey', $data);
}
Оба расширения поддерживают хранение массивов и объектов без сериализации.
Конечно, вы можете хранить несколько ключей с любым из этих решений и просто извлекать их все вместо использования одного или одного с массивом / объектом.
Вы можете использовать Memcache для кеширования запросов к базе данных. Смотрите здесь, как использовать.
Другим способом является использование сессий Php.
<?php
session_start(); // need to be before any html code
$_SESSION['something'] = 'Something here...';
echo $_SESSION['something']; // will show "Something here..."
И вы можете удалить с помощью …
unset($_SESSION['something']);
Вы также можете использовать куки, используя функцию setcookie. Посмотреть здесь.
И вы можете получить куки, используя …
echo $_COOKIE['something'];
Режим производства
В производственном режиме это будет работать как set_transient WordPress. Вы сделаете первый запрос БД, чтобы получить значение, и кешируете это значение, используя куки, сеансы или memcache.
Если вы хотите показать эти значения внутри вашей страницы, вы можете использовать стандартную библиотеку кэширования.
Мое понимание вопроса заключается в том, что у вас есть некоторые данные SQL, которые являются более или менее постоянными, и вам не нужно считывать их из соединения SQL при каждом запросе.
Если это так, вы можете использовать memcache для хранения данных:
http://php.net/manual/en/book.memcache.php
Данные по-прежнему будут постоянными, и вам нужно будет обращаться к базе данных только в том случае, если кэшированные данные отсутствуют или требуют обновления.
Если данные относятся к конкретному пользователю, вы можете просто использовать сеанс.
http://php.net/manual/en/book.session.php
Если это нужно использовать только при запуске вашего сервера (как только это будет сделано), и вы не хотите беспокоиться об использовании memcached / xcache (как это было бы слишком), вы все равно можете использовать переменные окружения. Увидеть get_env