mysql — определяет переменную php при инициализации php

В настоящее время я пишу одно из моих первых php-приложений.
Приложение должно подключиться к серверу LDAP и изменить некоторые пользовательские атрибуты в каталоге.

Это приложение имеет некоторые параметры для чтения в базе данных MySQL для запуска.
Некоторые примеры этих параметров могут быть:
-LDAP адрес
Учетная запись -LDAP
Пароль

Есть намного больше параметров, которые определяют, например, способ аутентификации пользователей в моем приложении …

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

Итак, я ищу способ загрузить эти параметры из базы данных, только один раз (например, при инициализации службы php), и доступ к этим параметрам в «нормальном» коде php через переменные.

Каков был бы лучший способ сделать это?

Заранее спасибо.

0

Решение

Вы ищете постоянное хранилище перекрестных запросов. Есть много вариантов для этого.

Самое простое 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);
}

Оба расширения поддерживают хранение массивов и объектов без сериализации.

Конечно, вы можете хранить несколько ключей с любым из этих решений и просто извлекать их все вместо использования одного или одного с массивом / объектом.

2

Другие решения

Вы можете использовать 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.

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

1

Мое понимание вопроса заключается в том, что у вас есть некоторые данные SQL, которые являются более или менее постоянными, и вам не нужно считывать их из соединения SQL при каждом запросе.

Если это так, вы можете использовать memcache для хранения данных:
http://php.net/manual/en/book.memcache.php

Данные по-прежнему будут постоянными, и вам нужно будет обращаться к базе данных только в том случае, если кэшированные данные отсутствуют или требуют обновления.

Если данные относятся к конкретному пользователю, вы можете просто использовать сеанс.
http://php.net/manual/en/book.session.php

http://php.net/manual/en/session.examples.basic.php

0

Если это нужно использовать только при запуске вашего сервера (как только это будет сделано), и вы не хотите беспокоиться об использовании memcached / xcache (как это было бы слишком), вы все равно можете использовать переменные окружения. Увидеть get_env

0
По вопросам рекламы [email protected]