在 php 初始化时定义 php 变量
Define php variable at php initialization
我目前正在编写我的第一个 php 应用程序。
应用程序必须连接到 LDAP 服务器并更改目录中的某些用户属性。
该应用程序有一些参数需要在 mySQL 数据库中读取才能运行。
这些参数的一些示例可能是:
-LDAP 地址
-LDAP 服务帐户
-LDAP 密码
还有更多参数,例如,用户对我的应用程序进行身份验证的方式,...
目前,每个用户会话初始化时都会读取数据库,但是,它没有任何意义,因为参数不会因会话而异。
所以,我正在寻找一种从数据库加载这些参数的方法,仅一次(例如,在 php 服务初始化时),并在 [=26] 中访问这些参数=] php 通过变量编码。
最好的方法是什么?
提前谢谢你。
我对这个问题的理解是,您有一些 SQL 数据或多或少是恒定的,您不想在每次请求时都从 SQL 连接中读取这些数据.
如果是这种情况,您可以使用内存缓存来存储数据:
http://php.net/manual/en/book.memcache.php
数据仍然会持久化,只有当缓存数据不存在或需要刷新时,您才需要访问数据库。
如果数据特定于特定用户,您可以只使用会话。
http://php.net/manual/en/book.session.php
如果这只是在启动你的服务器时使用(所以一次完成)并且你不想打扰 memcached/xcache (因为它们会被杀死)你仍然可以使用环境变量。参见 get_env
您可以使用内存缓存来缓存数据库请求。 See here how to use.
另一种方法是使用 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']);
您也可以使用 cookie,使用函数 setcookie。 See here.
并且您可以使用...
获取 cookie
echo $_COOKIE['something'];
生产模式
在生产模式下,这将作为 Wordpress 的 set_transient。您将执行第一个数据库请求以获取该值,并将使用 cookie、会话或内存缓存缓存该值。
如果您想在页面内部显示这些值,您可以使用标准缓存库。
您正在寻找一个持久的跨请求存储。有很多选择。
最简单的是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
之类的东西。这些是独立的守护进程,可以让您存储任意 key/value 对字符串数据(因此您可能需要对值进行 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);
}
这两个扩展都支持存储数组和对象而不进行序列化。
您当然可以使用这些解决方案中的任何一个存储多个密钥,然后将它们全部拉出,而不是使用一个或一个带有 array/object。
我目前正在编写我的第一个 php 应用程序。 应用程序必须连接到 LDAP 服务器并更改目录中的某些用户属性。
该应用程序有一些参数需要在 mySQL 数据库中读取才能运行。 这些参数的一些示例可能是: -LDAP 地址 -LDAP 服务帐户 -LDAP 密码
还有更多参数,例如,用户对我的应用程序进行身份验证的方式,...
目前,每个用户会话初始化时都会读取数据库,但是,它没有任何意义,因为参数不会因会话而异。
所以,我正在寻找一种从数据库加载这些参数的方法,仅一次(例如,在 php 服务初始化时),并在 [=26] 中访问这些参数=] php 通过变量编码。
最好的方法是什么?
提前谢谢你。
我对这个问题的理解是,您有一些 SQL 数据或多或少是恒定的,您不想在每次请求时都从 SQL 连接中读取这些数据.
如果是这种情况,您可以使用内存缓存来存储数据: http://php.net/manual/en/book.memcache.php
数据仍然会持久化,只有当缓存数据不存在或需要刷新时,您才需要访问数据库。
如果数据特定于特定用户,您可以只使用会话。 http://php.net/manual/en/book.session.php
如果这只是在启动你的服务器时使用(所以一次完成)并且你不想打扰 memcached/xcache (因为它们会被杀死)你仍然可以使用环境变量。参见 get_env
您可以使用内存缓存来缓存数据库请求。 See here how to use.
另一种方法是使用 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']);
您也可以使用 cookie,使用函数 setcookie。 See here.
并且您可以使用...
获取 cookieecho $_COOKIE['something'];
生产模式
在生产模式下,这将作为 Wordpress 的 set_transient。您将执行第一个数据库请求以获取该值,并将使用 cookie、会话或内存缓存缓存该值。
如果您想在页面内部显示这些值,您可以使用标准缓存库。
您正在寻找一个持久的跨请求存储。有很多选择。
最简单的是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
之类的东西。这些是独立的守护进程,可以让您存储任意 key/value 对字符串数据(因此您可能需要对值进行 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);
}
这两个扩展都支持存储数组和对象而不进行序列化。
您当然可以使用这些解决方案中的任何一个存储多个密钥,然后将它们全部拉出,而不是使用一个或一个带有 array/object。