摘要:加密解密類由于開(kāi)始廢棄傳統(tǒng)的加密函數(shù)而改用,因此該類支持的版本為簡(jiǎn)易加解密類通用秘鑰所有可用的加密類型可參考構(gòu)造函數(shù)加密類型。
加密解密類
由于 PHP7.1 開(kāi)始廢棄傳統(tǒng)的加密函數(shù) mcrypt_encrypt 而改用 openssl_encrypt,因此該類支持的 PHP 版本為: (PHP 5 >= 5.3.0, PHP 7)
METHOD = $method; } } /** * 加密字符串 * * @param String 待加密數(shù)據(jù) * @param string 加密秘鑰,若為空,則使用通用秘鑰 * @return void */ public function encrypt($input, $key = "") { if (empty($key)) $key = $this->KEY; $data = openssl_encrypt($input, $this->METHOD, $key, OPENSSL_RAW_DATA); $data = base64_encode($data); return $data; } /** * 解密字符串 * * @param String 待解密字符串 * @param string 解密秘鑰,若為空,則使用通用秘鑰 * @return void */ public function decrypt($input, $key = "") { if (empty($key)) $key = $this->KEY; $data = openssl_decrypt(base64_decode($input), $this->METHOD, $key, OPENSSL_RAW_DATA); return $data; } }發(fā)送郵件類
先下載 PHPMailer,解壓后,將其放置你的項(xiàng)目中,并修改類中的引入路徑。
_init(); $this->_baseURL = $_SERVER["REQUEST_SCHEME"] . "://" . $_SERVER["HTTP_HOST"]; } private function _init() { if ($this->_email == null) { $mail = new PHPMailer(true); try { $mail->SMTPDebug = 0; $mail->isSMTP(); $mail->Host = get_global_config("mail.Host"); $mail->SMTPAuth = true; $mail->Username = get_global_config("mail.Username"); $mail->Password = get_global_config("mail.Password"); $mail->SMTPSecure = get_global_config("mail.SMTPSecure"); $mail->Port = get_global_config("mail.Port"); $mail->setFrom(get_global_config("mail.Username"), get_global_config("mail.Fromname")); $this->_email = $mail; return true; } catch (Exception $e) { // return null; return false; } } return true; } public function sendEmail($toEmail, $toUsername, $subject, $body) { if (!$this->_email) return false; try { $this->_email->addAddress($toEmail, $toUsername); $this->_email->isHTML(true); $this->_email->Subject = $subject; $this->_email->Body = $body; // 當(dāng)郵件不支持 HTML 時(shí)顯示的郵件內(nèi)容 $this->_email->AltBody = $body; $this->_email->send(); // echo "Message has been sent"; return true; } catch (Exception $e) { return false; // echo "Message could not be sent."; // echo "Mailer Error: " . $this->_email->ErrorInfo; } } }模擬鎖
使用 Redis 模擬進(jìn)程鎖,參考至 discuz 的進(jìn)程鎖源碼。
cache = Roc::redis(); $this->cache->select(Roc::get("redis.db")); } /** * 是否被鎖 * * @param string 鎖名 * @param integer 上鎖時(shí)間 * @return boolean */ public function islocked($process, $ttl = 0) { $ttl = $ttl < 1 ? 600 : intval($ttl); return $this->_status("get", $process) || $this->_find($process, $ttl); } /** * 解鎖 * * @param string 鎖名 * @return void */ public function unlock($process) { $this->_status("rm", $process); $this->_cmd("rm", $process); } private function _status($action, $process) { static $plist = array(); switch ($action) { case "set" : $plist[$process] = true; break; case "get" : return !empty($plist[$process]); break; case "rm" : $plist[$process] = null; break; case "clear" : $plist = array(); break; } return true; } private function _find($name, $ttl) { if(!$this->_cmd("get", $name)) { $this->_cmd("set", $name, $ttl); $ret = false; } else { $ret = true; } // $this->_status("set", $name); return $ret; } private function _cmd($cmd, $name, $ttl = 0) { return $this->_process_cmd_memory($cmd, $name, $ttl); // static $allowmem; // if($allowmem === null) { // $allowmem = Roc::get("redis.db"); // } // if($allowmem) { // return self::_process_cmd_memory($cmd, $name, $ttl); // } else { // return false; // // return self::_process_cmd_db($cmd, $name, $ttl); // } } private function _process_cmd_memory($cmd, $name, $ttl = 0) { $ret = ""; $name = "process_lock_".$name; switch ($cmd) { case "set" : $ret = $this->cache->setex($name, time(), $ttl); // $ret = memory("set", "process_lock_".$name, time(), $ttl); break; case "get" : $ret = $this->cache->get($name); // $ret = memory("get", "process_lock_".$name); break; case "rm" : $ret = $this->cache->delete($name); // $ret = memory("rm", "process_lock_".$name); } echo $cmd . ":"; var_dump($ret); return $ret; } private function _process_cmd_db($cmd, $name, $ttl = 0) { $ret = ""; switch ($cmd) { case "set": $ret = C::t("common_process")->insert(array("processid" => $name, "expiry" => time() + $ttl), FALSE, true); break; case "get": $ret = C::t("common_process")->fetch($name); if(empty($ret) || $ret["expiry"] < time()) { $ret = false; } else { $ret = true; } break; case "rm": $ret = C::t("common_process")->delete_process($name, time()); break; } return $ret; } }Redis
一個(gè)簡(jiǎn)易的 Redis 操作類,支持在查找不到緩存時(shí),進(jìn)行相對(duì)應(yīng)的回調(diào)操作。
cache = new Redis(); } // ============= String 操作 /** * 設(shè)置緩存 * * @param String 緩存key值 * @param String/Object 緩存數(shù)據(jù),可為字符串可為數(shù)組。 * @param Int 過(guò)期時(shí)間 * @return Boolean */ public function set($key, $value, $ttl = null) { if (is_array($value)) $value = serialize($value); if ($ttl !== null && $ttl > 0) return $this->cache->setex($this->_key($key), $ttl, $value); else return $this->cache->set($this->_key($key), $value); } /** * 獲取緩存數(shù)據(jù) * * @param String 值 * @param Data 默認(rèn)值,設(shè)置后,如果緩存沒(méi)有數(shù)據(jù)則返回默認(rèn)值 * @return Data */ public function get($key, $callback = false) { $res = $this->cache->get($this->_key($key)); if ($res === false && $callback === true) { $method_name = "_$key"; if (method_exists($this, $method_name)) { return $this->$method_name(); } else { return false; } } // 如果反序列化成功,則返回反序列化的數(shù)據(jù)。 // @防止報(bào) warning。 if (@unserialize($res) !== false) return unserialize($res); return $res; } /** * 刪除緩存 * * @param String 需要?jiǎng)h除的鍵名 * @return true or false */ public function rm($key) { return $this->cache->delete($this->_key($key)); } public function inc($key, $step = 1) { return $this->cache->incr($this->_key($key), $step); } public function dec($key, $step = 1) { return $this->cache->decr($this->_key($key), $step); } private function _key($key) { return $this->prefix . $key; } public function getMultiple($keys) { $_keys = []; foreach ($keys as $key) $_keys[] = $this->_key($key); return $this->cache->getMultiple($_keys); } // ============== Hash 操作 public function hset($hash, $key, $value) { return $this->cache->hSet($hash, $key, $value); } public function hget($hash, $key) { return $this->cache->hGet($hash, $key); } public function hgetall($hash) { return $this->cache->hGetAll($hash); } public function hvals($hash) { return $this->cache->hVals($hash); } public function hkeys($hash) { return $this->cache->hKeys($hash); } // ================ 通用回調(diào) // Your callback code here. }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26208.html
摘要:請(qǐng)求未通過(guò)的驗(yàn)證時(shí)會(huì)拋出此異常。異常處理是非常重要但又容易讓開(kāi)發(fā)者忽略的功能,這篇文章簡(jiǎn)單解釋了內(nèi)部異常處理的機(jī)制以及擴(kuò)展異常處理的方式方法。 異常處理是編程中十分重要但也最容易被人忽視的語(yǔ)言特性,它為開(kāi)發(fā)者提供了處理程序運(yùn)行時(shí)錯(cuò)誤的機(jī)制,對(duì)于程序設(shè)計(jì)來(lái)說(shuō)正確的異常處理能夠防止泄露程序自身細(xì)節(jié)給用戶,給開(kāi)發(fā)者提供完整的錯(cuò)誤回溯堆棧,同時(shí)也能提高程序的健壯性。 這篇文章我們來(lái)簡(jiǎn)單梳理一下...
摘要:那些瑣碎的知識(shí)點(diǎn)作者記錄的的很奇特很難記的知識(shí)點(diǎn)。易錯(cuò)知識(shí)點(diǎn)整理注意和的區(qū)別中和都是輸出的作用,但是兩者之間還是有細(xì)微的差別。今天手頭不忙,總結(jié)一下,分享過(guò)程中掌握的知識(shí)點(diǎn)。 深入理解 PHP 之:Nginx 與 FPM 的工作機(jī)制 這篇文章從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx 與 PHP 是如何協(xié)同工作的。 PHP 那些瑣碎的知識(shí)...
摘要:介紹下一個(gè)新項(xiàng)目,后端該如何從零去搭建。我們先假設(shè)這個(gè)項(xiàng)目由兩部組成提供給站點(diǎn)使用的提供給運(yùn)營(yíng)人員使用的管理后臺(tái)。因此通過(guò)回顧,我們得出我們的后端項(xiàng)目需要一個(gè)的層次,來(lái)存放業(yè)務(wù)邏輯。 這是 后端開(kāi)發(fā)者從零做一個(gè)移動(dòng)應(yīng)用 的后端部分第二篇。介紹下一個(gè)新項(xiàng)目,后端該如何從零去搭建。我們先假設(shè)這個(gè)項(xiàng)目由兩部組成 提供給wap站點(diǎn)、app使用的api; 提供給運(yùn)營(yíng)人員使用的管理后臺(tái)。 整個(gè)...
摘要:,跨站腳本攻擊。實(shí)際發(fā)的請(qǐng)求就是,用于表示這是一個(gè)請(qǐng)求。,用于告知服務(wù)器根據(jù)這個(gè)參數(shù)獲取回調(diào)函數(shù)的名稱,通常約定就叫。,回調(diào)函數(shù)的名稱,也是前面參數(shù)的值,可省略,會(huì)自動(dòng)生成。 本次課程主要圍繞 PHP 面試和筆試中經(jīng)常會(huì)出現(xiàn)的一些知識(shí)點(diǎn),但是面試官會(huì)在筆試題基礎(chǔ)上深入擴(kuò)展,那么你知道如何更好的回答讓面試官滿意嗎?題目收集自騰訊,迅雷,美圖等公司的筆試面試題,以及本人面試經(jīng)歷中印象中的知...
摘要:入門(mén),第一個(gè)這是一門(mén)很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...
閱讀 2964·2021-11-23 09:51
閱讀 3790·2021-11-22 15:29
閱讀 3247·2021-10-08 10:05
閱讀 1573·2021-09-22 15:20
閱讀 986·2019-08-30 15:56
閱讀 1083·2019-08-30 15:54
閱讀 745·2019-08-26 11:54
閱讀 2645·2019-08-26 11:32