搜索
首页php教程php手册保存SESSION到SQLITE,

保存SESSION到SQLITE Save Session ThinkPHP ?php/** * Sqlite保存SESSION * @author WeakSun 52132522@qq.com */namespace Think\Session\Driver;use SessionHandlerInterface;use PDO;class Sqlite implements SessionHandlerInterface {static protected $

保存SESSION到SQLITE Save Session ThinkPHP
<?php
/**
 * Sqlite保存SESSION
 * @author WeakSun <52132522@qq.com>
 */
namespace Think\Session\Driver;

use SessionHandlerInterface;
use PDO;

class Sqlite implements SessionHandlerInterface {

	static protected $tableNameName, $expire, $handler, $nowTime;

	public function __construct() {
		empty(static::$expire) && static::$expire = C('SESSION_EXPIRE', null, false) ? C('SESSION_EXPIRE') : ini_get('session.gc_maxlifetime');
		empty(static::$nowTime) && static::$nowTime = isset($GLOBALS['_beginTime']) ? $GLOBALS['_beginTime'] : microtime(true);
		empty(static::$tableNameName) && static::$tableNameName = C('SESSION_TABLE') ? C('SESSION_TABLE') : 'iSession';
		$dbFile = TEMP_PATH . 'Caches.tmp';
		$isCreate = is_file($dbFile);
		if (empty(static::$handler)) {
			static::$handler = new PDO("sqlite:{$dbFile}", null, null, array(PDO::ATTR_PERSISTENT => true));
			empty($isCreate) && $this->exec("PRAGMA encoding = 'UTF8';PRAGMA temp_store = 2;PRAGMA auto_vacuum = 0;PRAGMA count_changes = 1;PRAGMA cache_size = 9000;");
			$this->chkTable() || $this->createTable();
		}
	}

	/**
	 * 创建SessionID
	 * @return string
	 */
	public function create_sid() {
		return uniqid(sprintf('%08x', mt_rand(0, 2147483647)));
	}

	/**
	 * 打开session
	 * @param string $path
	 * @param string $name
	 * @return boolean
	 */
	public function open($path, $name) {
		return is_object(static::$handler);
	}

	/**
	 * 关闭Session
	 * @return boolean
	 */
	public function close() {
		return true;
	}

	/**
	 * 读取Session
	 * @param string $id
	 * @return string
	 */
	public function read($id = null) {
		$table = static::$tableNameName;
		$sth = static::$handler->query("SELECT `value` FROM `{$table}` WHERE `id`='{$id}' AND `expire` > strftime('%s','now') LIMIT 1", PDO::FETCH_NUM);
		if (!empty($sth)) {
			list($data) = $sth->fetch();
			unset($sth);
		} else {
			$data = '';
		}
		return $data;
	}

	/**
	 * 写入Session
	 * @param string $id
	 * @param string $data
	 * @return integer
	 */
	public function write($id = null, $data = null) {
		$table = static::$tableNameName;
		$expire = ceil(static::$expire + static::$nowTime);
		return $this->exec("REPLACE INTO `{$table}` VALUES('{$id}','{$data}',{$expire})");
	}

	/**
	 * 销毁Session
	 * @param string $id
	 * @return integer
	 */
	public function destroy($id = 0) {
		$table = static::$tableNameName;
		return $this->exec("DELETE FROM `{$table}` WHERE `id` = '{$id}'");
	}

	/**
	 * 垃圾回收
	 * @param string $expire
	 * @return integer
	 */
	public function gc($expire = 0) {
		$table = static::$tableNameName;
		return $this->exec("DELETE FROM `{$table}` WHERE `expire` < strftime('%s','now');VACUUM;");
	}

	/**
	 * 检查当前表是否存在
	 * @return bool 返回检查结果,存在返回True,失败返回False
	 */
	protected function chkTable() {
		return in_array(static::$tableNameName, $this->getTables());
	}

	/**
	 * 获取当前数据库的数据表列表
	 * @return array 返回获取到的数据表列表数组
	 */
	protected function getTables() {
		$tables = $data = array();
		$sth = $this->query("SELECT `name` FROM `sqlite_master` WHERE `type` = 'table' UNION ALL SELECT `name` FROM `sqlite_temp_master`");
		if (!empty($sth)) {
			while ($row = $sth->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
				$tables[] = $row[0];
			}
			unset($sth, $row);
		}
		return $tables;
	}

	/**
	 * 创建当前数据表
	 * @return integer 成功返回1,失败返回0
	 */
	protected function createTable() {
		$tableName = static::$tableNameName;
		return $this->exec("CREATE TABLE IF NOT EXISTS `{$tableName}` (`id` VARCHAR PRIMARY KEY ON CONFLICT FAIL NOT NULL COLLATE 'NOCASE',`value` TEXT NOT NULL,`expire` INTEGER NOT NULL);");
	}

	public function __call($method, $arguments) {
		if (method_exists(self::$handler, $method)) {
			return call_user_func_array(array(self::$handler, $method), $arguments);
		} else {
			E(__CLASS__ . ':' . $method . L('_METHOD_NOT_EXIST_'));
			return;
		}
	}

}
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用PHP保存远程图片时如何处理图片压缩?使用PHP保存远程图片时如何处理图片压缩?Jul 15, 2023 pm 03:57 PM

使用PHP保存远程图片时如何处理图片压缩?在实际开发中,我们经常需要从网络上获取图片并保存到本地服务器。然而,有些远程图片可能太大,这就需要我们对它们进行压缩以减少存储空间和提高加载速度。PHP提供了一些功能强大的扩展来处理图片压缩,其中最常用的是GD库和Imagick库。GD库是一个流行的图像处理库,它提供了许多功能用于创建、编辑和保存图像。下面是一个使用

惠普打印机扫描的文件保存在哪儿惠普打印机扫描的文件保存在哪儿Feb 19, 2024 am 09:18 AM

很多用户使用惠普打印机扫描文件过后,不知道扫描的文件保存到哪里去了,想要找一下在哪里,只要在我的电脑中搜索如期就可以进行搜索了。惠普打印机扫描的文件保存在哪儿:1、首先打开我的电脑。2、然后输入日期进行搜索。3、接着就可以找到扫描的文件了。4、打印机驱动安装之后会有一个打印机多功能机辅助软件,把它打开。5、最后点击扫描文件夹图标中就可以找到文件了。

Win+Shift+S截图在哪里保存?Win+Shift+S截图在哪里保存?Jan 03, 2024 pm 01:12 PM

许多用户都不怎么使用win10自带的一个快捷截图,这个截图之后就有用户找不到对应的截图内容保存在哪里,其实这个截图以后不会保存的,是在你的剪切板里面,也就是复制里面,你可以自由地把截图放在任何文件夹。win10截图Win+Shift+S保存在哪答:在你的剪贴板里面。你可以把你的截图文件放到任何的文件夹里面。当你截图之后,你可以把你的文件粘贴到文件夹里面或者是直接点击保存为图片,那样就可以把截图的内容给保存下来了。win10电脑截图快捷键1、“PrtScrSysRq”或者“PrtSc”2、“Win

win11excel怎么保存到桌面win11excel怎么保存到桌面Jan 08, 2024 am 08:33 AM

如果我们想要将制作好的Excel表格快速保存到桌面上,但是不知道win11excel怎么保存到桌面,其实使用另存为功能就可以了,还可以直接发送快捷方式。win11excel怎么保存到桌面:一、Excel文件1、首先点开左上角“文件”并选择“另存为”2、接着选择左边的“桌面”3、然后点击右下角“保存”就可以保存Excel到桌面了。二、Excel软件1、如果是想要将Excel软件放到桌面。2、可以在文件夹里找到Excel,右键点击并选择“显示更多选项”3、然后选择“发送到桌面快捷方式”就可以了。

PHP保存远程图片到本地后如何添加水印并保存?PHP保存远程图片到本地后如何添加水印并保存?Jul 11, 2023 pm 11:48 PM

PHP保存远程图片到本地后如何添加水印并保存?在PHP开发中,经常会遇到需要将远程图片保存到本地的需求。而有时候,我们可能还需要在保存后的图片上添加水印以保护版权或增加额外信息。本文将介绍如何使用PHP保存远程图片到本地,并在保存后的图片上添加水印。一、保存远程图片到本地首先,我们需要使用PHP的文件操作函数将远程图片保存到本地。下面是一个简单的示例代码:&

在iPhone和iPad上下载文件的方法在iPhone和iPad上下载文件的方法Aug 18, 2023 pm 04:21 PM

如何将文件从网站下载到我的设备?您可以轻松地将文件从网站直接下载到您的iPhone或iPad。这可以通过转到文件所在的网站,然后单击该文件并选择下载来完成。其中一些文件可能直接在您的Web浏览器中打开,这完全取决于文件类型。当您单击该文件时,您将获得查看或下载文件的选项。从菜单中选择下载,然后文件将下载到您的设备。然后,您可以使用设备上的“文件”应用程序在iPhone或iPad上轻松找到该文件。要查找文件,请选择并打开“文件”应用程序,然后将显示存储在iPhone或iPad上的所有文件。当您在i

保存图像的Matplotlib用法保存图像的Matplotlib用法Jan 13, 2024 pm 12:49 PM

如何使用Matplotlib保存图像Matplotlib是一个Python的绘图库,它提供了丰富的绘图功能。保存绘制的图像是使用Matplotlib的一个常见需求,下面将介绍如何使用Matplotlib保存图像,并提供具体的代码示例。Matplotlib提供了多种保存图像的格式,常见的有png、jpg、pdf等。下面将以png格式保存图像为例进行说明。首先

元气桌面壁纸怎么保存到本地元气桌面壁纸怎么保存到本地Feb 23, 2024 pm 01:37 PM

元气桌面中能够让用户们保存喜欢的壁纸,那么具体怎么保存到本地呢?需要点击我的,找到我们下载使用的壁纸,点击壁纸的三个点,点击另存为,然后选择保存地址就行。这篇壁纸保存到本地方法介绍就能够告诉大家具体怎么操作,大家赶紧来看看吧。元气桌面壁纸怎么保存到本地答:进入我的,找到使用的壁纸,点击壁纸下面三个点,点击另存为。具体方法:1、首先进入软件,将需要的壁纸右击设为壁纸。2、之后点击上面的我的功能。3、在里面找到使用的壁纸。4、点击壁纸下面的三个点。5、点击另存为,就能够保存到本地了。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境