Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中缓存或预加载一些变量_Php_Mysql - Fatal编程技术网

在php中缓存或预加载一些变量

在php中缓存或预加载一些变量,php,mysql,Php,Mysql,我正在开发一个基于PHP/MySQL的产品搜索应用程序。在该应用程序中,我们有一些全局变量,这些变量是从数据库填充的。由于这些变量对于所有搜索请求都是通用的,因此无需在每次搜索请求到达服务器时进行填充 我看到了一些使用memcache和APC的建议,但问题是我们没有在服务器上安装这些的权限。是否有任何方便的方法使这些变量只初始化一次并用于所有服务器请求 一些变量的示例: $result = $this->db->query("SELECT brand_name FROM brands

我正在开发一个基于PHP/MySQL的产品搜索应用程序。在该应用程序中,我们有一些全局变量,这些变量是从数据库填充的。由于这些变量对于所有搜索请求都是通用的,因此无需在每次搜索请求到达服务器时进行填充

我看到了一些使用memcache和APC的建议,但问题是我们没有在服务器上安装这些的权限。是否有任何方便的方法使这些变量只初始化一次并用于所有服务器请求

一些变量的示例:

$result = $this->db->query("SELECT brand_name FROM brands");
    if ($result->num_rows > 0) {
        foreach ($result->rows as $row) {
            if ($row['brand_name'] != '') {
                $GLOBALS["filter"]['brand_name'][] = $row['brand_name'];
            }
        }
    }
它包含搜索查询中用于比较的品牌名称。类似地,我们还有许多其他预定义的全局变量。

如果您有可用的全局变量,那么您可能可以执行以下操作:

免责声明:我没有测试过,也没有opcache功能或行为方面的经验


计划任务(每月?手动?自动?idk,你自己解决)


这有用吗?一般来说,全局变量可能很麻烦,但如果这有助于解决您的问题,这可能不是一个糟糕的想法。记录操纵全局变量的函数总是一个好主意,这样它们的影响就众所周知了。没有什么比其他一些代码更糟糕的了,它们需要控制
$GLOBALS['filter']
,而这两个代码又发生了冲突。@tadman我的全局变量格式为$GLOBALS[“filter”]['brand_name'],$GLOBALS[“filter”]['categories'],等等。我可以将变量从全局变量更改为任何其他变量,但我需要一个解决方案,使其不会针对每个服务器请求进行初始化。
brands
表中的数据多久更改一次?@MonkeyZeus很少,每两个月更改一次。我们可以认为这些值是静态的。网站运行在哪个PHP版本上?
$result = $this->db->query("SELECT brand_name FROM brands");

if ($result->num_rows > 0) {

    $temp_file = '/path/to/cached/file/brands_cache.'.microtime(true).'.php';

    $final_file = '/path/to/cached/file/brands_cache.php';

    file_put_contents($temp_file, '<?php $GLOBALS["filter"]["brand_name"] = [];');

    foreach ($result->rows as $row) {
        if ($row['brand_name'] != '') {
            file_put_contents($temp_file, '$GLOBALS["filter"]["brand_name"][] = \''.str_replace("'", "\\'", $row['brand_name']).'\';', FILE_APPEND);
        }
    }

    rename($temp_file, $final_file);

    if(opcache_compile_file($final_file))
    {
        echo $final_file.' has been cached';
    }
    else
    {
        echo $final_file.' could not be cached';
    }
}
require_once('/path/to/cached/file/brands_cache.php');

// Feel free to use $GLOBALS["filter"]['brand_name']