程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php 讀取memcache二進制數據

php 讀取memcache二進制數據

編輯:關於PHP編程

memcache作為一個數據中間層,經常用來做數據交換。


比如在某個系統內部我們規定如下的用戶狀態的信息,每個用戶只需要存續52個字節。
Key state#ID 如”state#10888”
Value : (二進制的數據 )
 用戶 ID Uint32
Type 用戶類型 Uint8 :
State 用戶狀態 Uint8 : 
 服務器 IP Uint32
最後在線時間 Uint64
Session ID的長度  Uint16

Session ID  char[32]

總共52個字節 


那麼怎麼在php裡面得到通過memcache得到上面的這些數據呢?


存儲的數據裡面有二進制的0,字符串是否會被截斷?


其實不會的!


下面進行測試


          $mem = new Memcache();
   
          $mem->connect('192.168.0.69',11211);
        
          $memstr= $mem->get('state#105709');
        
          var_dump($memstr);
 會得到下面的輸出。可以看到 memstr 剛好是53個字節。sessionId有個結束符
  string(53) "頊括F>� R!8jWFmsIK41kBDkmlqC7m7QoWICQ8nzz7"


再進一步,我們把數據輸出到一個文件,用winhex來查看數據的狀態


          file_put_contents('./dd.txt',$memstr);


用winhex dd.txt 會看到十六進制數據。


ED9C01000001C0A800463EF60A520000000100386A57466D73494B34316B42446B6D6C7143376D37516F57494351386E7A7A3700

 


下面我就可以按字節取數據了,主要是利用ord函數獲取字節ASCII碼


          $type =  ord($memstr{4});
         
          $state = ord($memstr{5});
         
          $ip = ord($memstr{6}).'.'.ord($memstr{7}).'.'.ord($memstr{8}).'.'.ord($memstr{9});
         
          $ses_long = ord($memstr{19})*16+ord($memstr{18});

          //時間戳只需要4個字節,分配了8個字節
         $lastactive = ord($memstr{13})*16777216+ord($memstr{12})*65536+ord($memstr{11})*256+ord($memstr{10});

          $sessionid = substr($memstr,20,$ses_long);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved