一个比较蛋疼的php缓存类
php缓存类
$oFC = new FileCache();
$sKey = 'ab_123';
$data = $oFC -> get($sKey);
if (is_null($data))
$oFC -> set($sKey, array('name' => 'ttt', 'datetime' => date('Y-m-d H:i:s')), 100000);
print_r($data);
<?php final class FileCache { /** * * * 缓存目录 * * * @var string */ private static $msCachePath = null; /** * * * 默认缓存失效时间(1小时) * * * @var int */ const miEXPIRE = 3600; /** * * * 构造<br /> * self::$msCachePath 缓存目录为共享目录 * * * @param string $sCachePath */ function __construct($sCachePath = './tmp/') { if (is_null(self :: $msCachePath)) self :: $msCachePath = $sCachePath; } /** * * * 读取缓存<br> * 返回: 缓存内容,字符串或数组;缓存为空或过期返回null * * * @param string $sKey 缓存键值(无需做md5()) * * @return string null * * @access public */ public function get($sKey) { if (empty($sKey)) return false; $sFile = self :: getFileName($sKey); if (!file_exists($sFile)) return null; else { $handle = fopen($sFile, 'rb'); if (intval(fgets($handle)) > time()) { // 检查时间戳 { //未失效期,取出数据 $sData = fread($handle, filesize($sFile)); fclose($handle); return unserialize($sData); } else { // 已经失效期 fclose($handle); return null; } } } /** * 写入缓存 * * * * @param string $sKey 缓存键值 * * @param mixed $mVal 需要保存的对象 * * @param int $iExpire 失效时间 * * @return bool * @access public */ public function set($sKey, $mVal, $iExpire = null) { if (empty($sKey)) return false; $sFile = self :: getFileName($sKey); if (!file_exists(dirname($sFile))) if (!self :: is_mkdir(dirname($sFile))) return false; $aBuf = array(); $aBuf[] = time() + ((empty($iExpire)) ? self :: miEXPIRE : intval($iExpire)); $aBuf[] = serialize($mVal); /** * 写入文件操作 */ $handle = fopen($sFile, 'wb'); fwrite($handle, implode("\n", $aBuf)); fclose($handle); return true; } /** * * * 删除指定的缓存键值 * * * @param string $sKey 缓存键值 * @return bool */ public function del($sKey) { if (empty($sKey)) return false; else { @unlink (self :: getFileName($sKey)); return true; } } /** * * * 获取缓存文件全路径<br> * 返回: 缓存文件全路径<br> * $sKey的值会被转换成md5(),并分解为3级目录进行访问 * * * @param string $sKey 缓存键 * * @return string * @access protected */ private static function getFileName($sKey) { if (empty($sKey)) return false; $key_md5 = md5($sKey); /** * $aFileName = array(); * $aFileName[] = rtrim(self :: $msCachePath, '/'); * $aFileName[] = $key_md5{0} . $key_md5{1}; * $aFileName[] = $key_md5{2} . $key_md5{3}; * $aFileName[] = $key_md5{4} . $key_md5{5}; * $aFileName[] = $key_md5; */ return self :: $msCachePath . '/' . $key_md5; // return implode('/', $aFileName); } /** * * * 创建目录<br> * * * * @param string $sDir * @return bool */ private static function is_mkdir($sDir = '') { if (empty($sDir)) return false; /** * 如果无法创建缓存目录,让系统直接抛出错误提示 */ echo $sDir; if (!mkdir($sDir, 0666)) return false; else return true; } }

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

使用Java的String.valueOf()函數將基本資料型別轉換為字串在Java開發中,當我們需要將基本資料型別轉換為字串時,常見的方法是使用String類別的valueOf()函數。這個函數可以接受基本資料類型的參數,並傳回對應的字串表示。在本文中,我們將探討如何使用String.valueOf()函數進行基本資料型別轉換,並提供一些程式碼範例來

C語言return的用法有:1、對於傳回值類型為void的函數,可以使用return語句來提前結束函數的執行;2、對於傳回值型別不為void的函數,return語句的作用是將函數的執行結果傳回給呼叫者;3、提前結束函數的執行,在函數內部,我們可以使用return語句來提前結束函數的執行,即使函數並沒有回傳值。

char陣列轉string的方法:可以透過賦值來實現,使用{char a[]=" abc d\0efg ";string s=a;}語法,讓char陣列對string直接賦值,執行程式碼即可完成轉換。

使用Java的String.replace()函數替換字串中的字元(字串)在Java中,字串是不可變的對象,這意味著一旦創建了一個字串對象,就無法修改它的值。但是,你可能會遇到需要替換字串中的某些字元或字串的情況。這時候,我們可以使用Java的String類別中的replace()方法來實作字串的替換。 String類別的replace()方法有兩種重

原始碼:publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}#輸出上述程式碼的輸出可以簡單地得出結論:return在finally之前執行,我們來看下字節碼層面上發生了什麼事情。下面截取case1方法的部分字節碼,並且對照源碼,將每個指令的含義註釋在

使用Java的String.length()函數取得字串的長度在Java程式設計中,字串是一種非常常見的資料類型,我們經常需要取得字串的長度,即字串中字元的個數。在Java中,我們可以使用String類別的length()函數來取得字串的長度。下面是一個簡單的範例程式碼:publicclassStringLengthExample{publ

大家好,今天跟大家分享java基礎之String。 String類別的重要性就不必說了,可以說是我們後端開發用的最多的類,所以,很有必要好好聊聊它。

一、認識String1.JDK中的String首先我們看看JDK中的String類別源碼,它實作了很多接口,可以看到String類別被final修飾了,這就說明String類別不可以被繼承,String不存在子類,這樣所有使用JDK的人,用到的String類別都是同一個,如果String允許被繼承,每個人都可以對String進行擴展,每個人使用的String不是同一個版本,兩個不同的人使用相同的方法,表現出不同的結果,這就導致程式碼沒辦法進行開發了繼承和方法覆寫在帶來彈性的同時,也會帶來很多子類別行為不
