webman中如何让php文件加载一次后就常驻内存了?

故人重来

问题描述

我这边有一个多语言数组php文件,这边就是写在function这个里面;我每次调用多语言内容方法我都会去 include_once 下这个文件。我想问下这个会不会只是加载一次;后续就不会继续加载了吧?

代码示例

代码写在了 function.php这个文件下

function getLangArray(): array
{
    $lang = request()->header('lang');
    $path = base_path() . "/support/lang/$lang.php";
    // 判断文件是否存在
    if (!file_exists($path)) {
        return include_once base_path() . "/support/lang/" . config('constants.lang') . ".php";
    }
    return include_once $path;
}

会不会每次请求进来如果调用这个方法都是重新加载一次啊??

1008 4 2
4个回答

xiaoming

static 就是得自己注意内存

  • 故人重来 2024-05-29

    如果我想把文件里面数组常驻呢

  • rbb 2024-05-29

    那数组定义成static呀

  • 故人重来 2024-05-29

    定义成全局数组???不用每次都是要去加载多语言文件吧

缝合

一个可爱的问题。

<?php

for(;;){
    sleep(1);
    echo 1;
}

不知道你认不认为这是一个常驻的程序 😊

  • 暂无评论
软饭工程师

参考代码:https://www.workerman.net/q/11036#answer_19537

<?php
namespace app\controller;

use support\Db;
use support\Request;

class IndexController
{
    // 缓存的数据
    protected static $data = [];

    public function index(Request $request)
    {
        $id = $request->get('id');
        return json(['result' => static::get($id)]);
    }

    protected static function get($id)
    {
        // 初始化缓存
        if (!static::$data) {
            ini_set('memory_limit', '512M');
            static::$data = array_flip(Db::table('orders')->pluck('id')->toArray());
        }
        // 缓存不存在则查数据库
        if (!isset(static::$data[$id])) {
            if (Db::table('orders')->find($id)) {
                // 订单存在继续缓存
                static::$data[$id] = 1;
                return true;
            }
            return false;
        }
        return true;
    }
}

业务初始化写入数据:https://www.workerman.net/doc/webman/others/bootstrap.html

  • 故人重来 2024-06-05

    哥哥,我目前这边是要加载一个语言数组文件在内存中,我就是在 server-user/config/bootstrap.php 这个文件里,直接挂载全局数组中。
    $zh_CN = require 'support/lang/zh-CN.php';
    $GLOBALS['zh-CN'] = $zh_CN;

  • 软饭工程师 2024-06-06

    放配置文件里面,会在启动的时候加载到内存里面

  • 缝合 2024-06-06

    你直接在composer 的 require 改就行,不用这么搞。

  • 故人重来 2024-06-06

    哥哥这个怎么搞啊;你直接在composer 的 require 改就行,不用这么搞。没用这个这样加载php文件。

缝合

截图截图截图

  • 故人重来 2024-06-07

    多谢哥哥。我知道了。还是webman社区强大啊。

×
🔝