php - 在 php 初始化时定义 php 变量

标签 php mysql initialization global-variables

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

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

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

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

所以,我正在寻找一种从数据库加载这些参数的方法,仅一次(例如,在 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 不共享缓存)所以你必须创建它每个服务器一次。

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

我个人更喜欢内存缓存,它有两个 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);
}

这两个扩展都支持不序列化的数组和对象存储。

当然,您可以使用这些解决方案中的任何一个存储多个键,然后将它们全部拉出,而不是使用一个或一个与数组/对象一起使用。

关于php - 在 php 初始化时定义 php 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27771635/

相关文章:

php - 调用 PHP 对象文件导致页面不再加载

php - 删除字符串,除非有空格

mysql - 将数据从文本文件加载到数据库

java - subClass sc = new subClass() 和 superClass sc = new subClass 有什么区别?

mysql - g++/mysql/redhat 中的 int 问题

ios - 变量闭包初始化问题

php - MySQL - 按 2 个条件进行分组

当为 $bgd_color 传递 -1 时,php gd imagerotate 失败

php - 尝试使用 Php-MySQL 从数据库检索视频 URL 并将其显示在浏览器上

php - 如何修复 localhost 拒绝在 Windows 10 Wamp 服务器和 Xampp 上连接?