在php初始化时定义php变量

时间:2015-01-04 23:46:41

标签: php mysql initialization global-variables

我正在编写我的第一个php应用程序之一。 应用程序必须连接到LDAP服务器并更改目录中的某些用户属性。

该应用程序有一些参数可以在mySQL数据库中读取以便运行。 这些参数的一些示例可以是: -LDAP地址 -LDAP服务帐户 -LDAP密码

还有更多参数,例如,规则用户对我的应用程序进行身份验证的方式,...

目前,数据库是在每次用户会话初始化时读取的,但是,它没有任何意义,因为参数不会因会话而异。

所以,我正在寻找一种从数据库中加载这些参数的方法,只有一次(例如,在php服务初始化时),并通过变量访问“普通”php代码中的这些参数。 / p>

最好的方法是什么?

提前谢谢。

4 个答案:

答案 0 :(得分:2)

您正在寻找持久的交叉请求存储。有很多选择。

最简单的是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不要共享缓存)所以你必须每台服务器创建一次。

或者,对于多服务器设置,您可以使用memcachedredis之类的内容。这些是独立的守护进程,可以让您存储任意键/值对的字符串数据(因此您可能需要serialize() / unserialize()值。)

我个人更喜欢memcache,它有两个PHP扩展,pecl/memcachedpecl/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);
}

这两个扩展都支持存储数组和对象而无需序列化。

您当然可以使用这些解决方案存储多个密钥,只需将它们全部拉出来,而不是使用一个或一个带有数组/对象的密钥。

答案 1 :(得分:1)

您可以使用Memcache缓存数据库请求。的 See here how to use

另一种方法是使用Php Sessions。

<?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来使用cookie。的 See here.

您可以使用...

获取Cookie
echo $_COOKIE['something'];

制作模式

在生产模式下,这将作为Wordpress的set_transient。您将执行第一个db请求以获取值,并将使用cookie,sessions或memcache缓存此值。

如果要在页面内显示此值,可以使用标准缓存库。

答案 2 :(得分:0)

我对这个问题的理解是你有一些或多或少不变的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

答案 3 :(得分:0)

如果这只是在启动服务器时使用(所以一旦完成)并且你不想打扰memcached / xcache(因为它们会被杀死)你仍然可以使用环境变量。见get_env