原创 mysql的索引結構分析

最近重新看了下mysql索引的相關知識,總結一下,下邊以mysql的innodb存儲引擎爲例,其他的存儲引擎會有差別,先簡單說一下b+樹,因爲mysql的索引是以b+樹的結構存儲的,下邊先上張b+樹的結構圖 這張圖是我自己生成的,之前找

原创 yii接入apple第三方登錄

app中要接入apple賬號的第三方登錄,這裏只記錄後端的東西,app中獲取數據的過程是由前端小哥搞定的,後端的驗證步驟一共三步 檢查appleId是否在本地註冊了,已經註冊過就自動登錄,否則通過apple提供的接口進行簽名的校驗並在本地

原创 array_reduce 的理解

看 laravel 時遇到一個函數,琢磨了半天也沒有理解,最後還是查了下資料才完全理解。 這裏還是再做下筆記加深下印象。 php官方是這麼寫的: array_reduce(array $array, callable $callbac

原创 產品防護:5種常見的短信驗證碼防刷策略

短信驗證碼作爲重要的身份驗證工具,因其操作簡便、安全性高、時效性強等優點已被開發人員廣泛使用。但因其獲取便利、限制較少容易被不法分子利用進行短信轟炸,惡意刷掉大量短信費用,給公司或個人造成大量的金錢損失,造成這種情況原因主要是在產品實際設

原创 PHP實現API接口簽名驗證

項目需要向外部提供接口,供第三方網站調用,爲了保證傳輸數據的安全性,給項目添加了簽名認證的機制,過程大致如下: 一、由我們平臺給第三方頒發一個appId和一個appSecret,appId用來傳輸,appSecret用來生成簽名 二、第三

原创 laravel 任務調度的使用

過去,你可能需要在服務器上爲每一個調度任務去創建 Cron 入口。但是這種方式很快就會變得不友好,因爲這些任務調度不在源代碼中,並且你每次都需要通過 SSH 鏈接登錄到服務器中才能增加 Cron 入口。 Laravel 命令行調度器允許

原创 記一次安裝vargant運行環境時遇到的小問題

公司的項目是基於yaf框架開發,需要安裝vargant和virtualbox環境才能運行程序,我的電腦系統是windows10,我是照着https://www.jianshu.com/p/db5b40b71d05這篇文章進行安裝的 1、安

原创 laravel模型關聯(多對多)

多對多 例如一個學生需要報多個興趣班,同時每個興趣班也會有多個學生,學生和興趣班之間就是多對多的關係,要定義這種關聯,需要三個數據庫表: student,classes和 classes_student。classes_student表存

原创 laravel模型關聯(一對多)

一對多 例如一個用戶會有多條留言,有member會員表和message留言表,一對多關聯的定義也是在 Eloquent 模型中寫一個方法: <?php namespace App\Http\Models; use Illuminat

原创 PHP實現Redis分佈式鎖

鎖在我們的日常開發可謂用得比較多。通常用來解決資源併發的問題。特別是多機集羣情況下,資源爭搶的問題。但是,很多新手在鎖的處理上常常會犯一些問題。今天我們來深入理解鎖。 一、Redis 鎖錯誤使用之一 我曾經見過有的項目把查詢結果存儲到 R

原创 yii事件用法

事件可以將自定義代碼“注入”到現有代碼中的特定執行點。 附加自定義代碼到某個事件,當這個事件被觸發時,這些代碼就會自動執行。 例如,郵件程序對象成功發出消息時可觸發 messageSent 事件。 如想追蹤成功發送的消息,可以附加相應追

原创 yii添加水印擴展及生成微信小程序碼

項目中需要添加生成海報的功能,需要根據不同的新聞,商品信息生成不同的海報,所以我採用了在背景圖上依次打圖片水印和文字水印的方式來生成海報,我先上傳一張生成的海報,可以看一下是不是你想要的結果 yii添加水印功能 一、給yii框架引入圖片

原创 LNMP一鍵安裝包安裝的mysql遠程連接不上的問題

正常的做法:    以root用戶登錄mysql:     grant all privileges on *.* to 創建的用戶名@"%" identified by "密碼";     flush privileges;   例如:

原创 Mysql併發時經典常見的死鎖原因及解決方法

 1.    mysql都有什麼鎖   MySQL有三種鎖的級別:頁級、表級、行級。 表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。 行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率

原创 觀察者模式(php實現)

觀察者模式(Observer),當一個對象的狀態發生改變時,依賴他的對象會全部收到通知,並自動更新。 場景: 一個事件發生後,要執行一連串更新操作.傳統的編程方式,就是在事件的代碼之後直接加入處理邏輯,當更新得邏輯增多之後,代碼會變得難以