置顶沉梦云全新生态系统诚招开发者

为了打造更全面的商城,提供更全面更优质成本更低的全新商城管理系统为大众服务,于2021年启动了全新商城开发计划,目前商城客户端程序和控制端已经完备,于2023年2月10日推出了采用thinkphp6+workerman+vue2开发的沉梦云Pro,接着在同年9月12日推出了采用thinkphp6+workerman+vue+vite开发的沉梦云SUP权益实物系统,版本和功能更完善,深度开发适配的插件系统,支持各种复杂功能实现,帮助客户有更多选择的同时,还能给各大开发者带来收益

【Session】Session缓存Mysql数据库版

通过用户反馈服务器在使用时,如果网站过多或者并发过大,php自带的session可能会失效于是就有个了这个数据库版本,模拟session功能,今天把主要逻辑代码分享出来注意:代码中的DB类如果和你的程序不兼容需要自己改一下哦// +----------------------------------------------------------------------// | Nmae:Session数据库版  根据cookie生成设备标识,可替换本地服务器session过多出错问题// +----------------------------------------------------------------------// | Author: 沉梦执于梦 857285711 <blog.chenmyun.com>// +----------------------------------------------------------------------// | Date: 2020/10/16// +----------------------------------------------------------------------class Session{    /**     * 设置Session     * @param [type] $name   [description]     * @param [type] $value  [description]     * @param [type] $expire [description]     */    public static function set($name, $value, $expire = null)    {        global $DB;        $userid = self::getUserId();        if ($expire === null || $expire < time()) {            $expire = time() + 3600;        }        try {            $row = $DB->get_row("SELECT * FROM `auth_session` WHERE u= ? and k= ? limit 1", [$userid, $name]);            if ($row != false && isset($row['id'])) {                $data = [$value, $expire, $row['id']];                return $DB->query("UPDATE `auth_session` SET  v= ?, e= ? WHERE `id`= ?", $data);            } else {                $sql  = "INSERT INTO `auth_session` (`u`,`k`,`v`,`e`) VALUES (?, ?, ?, ?)";                $data = [$userid, $name, $value, $expire];                if ($DB->query($sql, $data)) {                    return true;                }                throw new \PDOException($DB->error());            }        } catch (\PDOException $e) {            die('数据库错误:' . $e->getMessage());        } catch (\Exception $e) {            die('系统错误:' . $e->getMessage());        }    }    /**     * 获取session     * @param  string $name session名称     * @return string     */    public static function get($name = 'userid')    {        global $DB;        $userid = self::getUserId();        $data   = [$userid, $name];        $row    = $DB->get_row("SELECT * FROM `auth_session` WHERE u= ? and k= ? limit 1", $data);        if (is_array($row) && $row['e'] > time()) {            return $row['v'];        }        return '';    }    /**     * 获取设备唯一标识     * @param  boolean $update 是否刷新     */    public static function getUserId($update = false)    {        $userid = isset($_COOKIE['uid']) ? $_COOKIE['uid'] : null;        if ($update || empty($userid) || !isset($_COOKIE['uid'])) {            $userid = md5(uniqid(mt_rand(), 1) . time() . rand(1111, 9999) . x_real_ip());            setcookie('uid', $userid, time() + 86400 * 30, '/', null);        }        return $userid;    }    /**     * 生成随机MD5字符串     * @return string     */    public static function getRandString()    {        return md5(uniqid(mt_rand(), 1) . time() . rand(11111, 99999) . x_real_ip());    }    /**     * 清空当前设备cookie     * @param  [type] $name [description]     * @return [type]       [description]     */    public static function checkDel($name)    {        $num = 0;        if (is_array($_COOKIE)) {            foreach ($_COOKIE as $key => $value) {                if ($key == $name) {                    $num++;                }            }            if ($num >= 2) {                unset($_COOKIE[$name]);            }        }    }}

【数组篇】数组指定下标内容获取和数组指定下标检测是否存在 快捷函数 可用于thinkphp框架严格模式

php现在比较成熟的框架有好几个,但是都是用的严格模式,这会导致在获取不存在的数组成员时就会报错!!诸如现在thinkphp的就会,为了解决这个问题,封装了几个函数if (!function_exists('array_get')) {    /**     * 快捷获取数组指定键的成员 可避免php框架的严格模式下报错     * 如 $arr = ['name'=>'测试','data'=> ['a'=>'555','b'=>'6565']]; 可以 array_get('data.b', $arr);     * @param  string|number $key     key 支持无限级获取     * @param  array         $array   数组     * @param  string        $default 默认值     */    function array_get($key = null, $array = [], $default = null)    {        if (is_array($array)) {            if (is_null($key)) {                $key = 0;            }            if ($pos = strpos($key, '.')) {                $key2   = mb_substr($key, 0, $pos);                $array2 = array_has($key2, $array) ? $array[$key2] : $default;                if (is_array($array2)) {                    return array_get(mb_substr($key, $pos + 1), $array2);                }                return $default;            }            return array_has($key, $array) ? $array[$key] : $default;        }        return $default;    }}if (!function_exists('array_has')) {    /**     * 快捷检测数组指定键是否存在     * @param  string $key   key     * @return [type]        数组     */    function array_has($key = null, $array = [])    {        if (is_array($array) && !is_null($key)) {            return array_key_exists($key, $array);        }        return fasle;    }}

sublime text 3如何设置始终自动换行

sublimetext3是一款很多人都在使用的常用前后端编程语言编辑器它很多特性都很不错,扩展插件丰富,同时性能也很棒,不容易出现卡顿现象,这也是很多开发者喜欢它的原因但是新安装的sublimetext3有一个无语的问题,就是新打开的文件或项目不会自动换行,这会影响到开发效率今天沉梦给大家带来如何始终自动换行!!1、打开sublimetext3,点击顶部菜单的【preferences】2、点击第二个选项,中文版是【设置】

mysql中text类型能不能有default默认值

很多刚接触mysql的朋友在用mysql创建字段类型时都会用到给字段设置一个default默认值!但是这其中有一个特殊的数据类型是不能有默认值的,它会引起mysql错误导致你预期的sql语句不会被成功执行!它就是text类型下面这句创建字段语句是错误的×ALTER TABLE `tablename` ADD `tips` text NULL DEFAULT '默认提示';而下面这句才是正确的√AL

php批量复制或删除文件自定义函数-php笔记

以下是平时经常会用到的处理文件需求,记录下来方便查阅,长期更新中==    // 定义目录分隔符    !defined('DS') && define('DS', DIRECTORY_SEPARATOR);        /**&nb

宝塔SESSION更新不及时(宝塔bug记录1)

今天使用遇到一个问题:在首页MD5了一串字符,赋值给SESSION,并且作为POST参数提交,再验证提交的SESSION跟服务器的SESSION是否相同,后来发现是以前安装过SESSION缓存插件,然后不知道是卸载残留还是其他,导致SESSION没有及时更新,身份验证一直不通过,期间切用过了切换php版本,切了SESSION存储方式并且开启了SESSION隔离都没用,最后尝试了新建一个站点,结果就可以了.这应该也算是宝塔的一个bug吧

如何使用php快速制作文字生成图片

制作文字转图片其实还是很简单的不过由于平时用的比较少,就容易忘为了方便以后使用,这里就留着以后查看吧(不就是复制粘贴嘛==)define('ROOT', dirname(dirname(__FILE__)) . '/');$conf['key'] = ''; //认证密钥,防止被滥用@header('Content-Type: applicatio

目录[+]