Redis 筆記與總結7 PHP + Redis 信息管理系統(用戶信息的增刪改查)

 

Redis 筆記與總結7 PHP + Redis 信息管理系統(用戶信息的增刪改查)

1. PHP 鏈接 Redisphp

 

訪問 redis 官方網站的 client 欄目:http://www.redis.io/clients#php,能夠獲取 redis 的 php 擴展。html

其中 phpredis 擴展比較穩定,功能也比較全,屬於一個第三方擴展,可是已經被 PHP 官方受權,它的方法名和客戶端下的方法名基本一致。github 地址:https://github.com/phpredis/phpredis,方法在這裏也能查獲得。linux

 

① 下載 phpredis 的源代碼包,解壓、配置、編譯、安裝;git

② 編輯 php.ini,給 PHP 打上 redis 模塊(extension=redis.so);github

③ 寫一個 phpinfo 的頁面,訪問,找到 redis 擴展:web

(這三步以前已經作過,參見:http://www.cnblogs.com/dee0912/p/4343032.htmlredis

 

④ 配置 Samba 服務器apache

(在一些中小型網絡,或者企業的內部網中,利用Linux創建文件服務器是一個很好的解決方案。針對企業內部網中的絕大部分客戶機採用Windows的狀況,咱們能夠經過使用 Samba 來實現文件服務器功能。 )windows

打開光盤源:數組

 

 

勾選「已鏈接」,選擇 ISO 鏡像文件,肯定:

 

掛載光盤鏡像:

[root@localhost ~]# mount /dev/cdrom  /mnt/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only

 

yum 安裝 samba(跳過有損的依賴包):

[root@localhost ~]# yum -y install samba* --skip-broken

 

安裝完以後配置 samba 文件:

 

[root@localhost ~]# vi /etc/samba/smb.conf

 

加幾個虛擬目錄:

[web]
        path = /usr/local/apache2/htdocs
        browseable = yes
        writable = yes

browseable:可預覽

 

保存退出。

 

重啓 smb 服務:

[root@localhost ~]# service smb restart

若是提示:smb: 未被識別的服務,則說明沒有安裝徹底,從新:

[root@localhost ~]# yum install samba

從新執行重啓 smb 服務:

 

給 samba 服務其添加用戶(apache):

[root@localhost ~]# smbpasswd -a apache
New SMB password:
Retype new SMB password:
Failed to add entry for user apache.
[root@localhost ~]#

若是報錯:Failed to add entry for user apache.

說明這是由於沒有加相應的系統帳號,因此會提示Failed to add entry for user的錯誤,只需增長相應的系統帳號test就能夠了(參見《增長samba用戶提示Failed to add entry for user》):

複製代碼

[root@localhost ~]# groupadd apache -g 6000    
You have new mail in /var/spool/mail/root
[root@localhost ~]# useradd apache -u 6000 -g 6000 -s /sbin/nologin -d /dev/null     
useradd:警告:此主目錄已經存在。
不從 skel 目錄裏向其中複製任何文件。
[root@localhost ~]# mkdir /home/apache
[root@localhost ~]# chown 777 /home/apache
You have new mail in /var/spool/mail/root
[root@localhost ~]# smbpasswd -a apache                                         
New SMB password:
Retype new SMB password:
Mismatch - password unchanged.
Unable to get new password.

 [root@localhost ~]# smbpasswd -a apache
  New SMB password:
  Retype new SMB password:
  Added user apache.
  You have new mail in /var/spool/mail/root

複製代碼

用戶名:apache,密碼:123

 

⑤ 在 windows 下對 linux 進行映射:

 

 

輸入映射文件夾:

 

輸入用戶名:apache,密碼:123,肯定:

登錄以後:

 

在目錄中創建一個 redis 目錄,提示沒有權限:

緣由:apache 用戶對本目錄沒有操做權限

解決方案:

[root@localhost ~]# setfacl -m d:u:apache:rwx -R /usr/local/apache2/htdocs

查看 facl 權限:

複製代碼

[root@localhost ~]# getfacl /usr/local/apache2/htdocs/
getfacl: Removing leading '/' from absolute path names
# file: usr/local/apache2/htdocs/
# owner: apache
# group: apache
user::rwx
user:apache:rwx
group::r-x
mask::rwx
other::rwx
default:user::rwx
default:user:apache:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

複製代碼

 若是還不行,則參照:《Samba服務中,不能建立文件夾和文本文件_解決辦法》:

[root@localhost ~]# vi /etc/selinux/config

重啓 Linux 服務器:

reboot

 

⑥ (在 test 目錄下)從新建立 redis 目錄,在 redis 目錄中建立文件 redis.php,打開該文件,編輯:

複製代碼

<?php
//實例化 Redis 對象
$redis = new Redis();
//鏈接到 Redis 服務器
$a = $redis->connect('localhost', 6379); //鏈接地址; 端口號; 鏈接時長,默認爲0,不受限制
var_dump($a);

複製代碼

 

啓動 apache:

/usr/local/apache2/bin/apachectl start

 

訪問:192.168.254.100/redis/redis.php,輸出:

bool(true)

表示鏈接 redis 服務已經成功。

 

此時登陸客戶端,輸入 keys *:

[root@localhost ~]# redis-cli -a phpdee
127.0.0.1:6379> keys *
(empty list or set)

當前庫中沒有鍵;

 

同時能夠在 redis.php 中使用 keys() 方法(要先受權,不然返回 bool(false) ):

複製代碼

<?php
//實例化 Redis 對象
$redis = new Redis();
//鏈接到 Redis 服務器
$a = $redis->connect('localhost', 6379); //鏈接地址; 端口號; 鏈接時長,默認爲0,不受限制
//var_dump($a);
$data = $redis->keys('*');
var_dump($data);

複製代碼

訪問:192.168.254.100/redis/redis.php,輸出:

array(0) { }

當前庫中沒有鍵。

 

此時在 redis.php 中使用 set() 方法建立一個鍵值對:

複製代碼

<?php
//實例化 Redis 對象
$redis = new Redis();
//鏈接到 Redis 服務器
$a = $redis->connect('localhost', 6379); //鏈接地址; 端口號; 鏈接時長,默認爲0,不受限制
//var_dump($a);
//受權
$redis->auth('phpdee');
//設置一個鍵值對
$redis->set('name', 'dee');
//獲取 name 的值
$name = $redis->get('name');
var_dump($name);
//獲取庫中全部的鍵
$data = $redis->keys('*');
var_dump($data);

複製代碼

訪問:192.168.254.100/redis/redis.php,輸出:

string(3) "dee" array(1) { [0]=> string(4) "name" }

說明 set() 方法成功。

 

在 linux redis 客戶端中再次查詢庫中的鍵:

127.0.0.1:6379> keys *
1) "name"

127.0.0.1:6379> get name
"dee"

一樣獲取到了 key 爲 name 的值。

 

【總結】操做步驟:實例化 redis 對象→鏈接 redis 服務器→受權→相關操做

 

相關操做:

使用 hash 類型存儲用戶信息

在 test 目錄下新建 add.php(添加用戶的界面,提交到 reg.php):

複製代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP+Redis信息管理系統</title>
</head>
<body>
    <form action="reg.php" method="post">
        <table align="left">
            <tr><td>用戶名:</td><td><input type="text" name="username"></td></tr>
            <tr><td>密碼:</td><td><input type="password" name="password" id=""></td></tr>
            <tr><td>年齡:</td><td><input type="text" name="age" id=""></td></tr>
            <tr><td><input type="submit" value="註冊"></td><td><input type="reset" value="重填"></td></tr>
        </table>
    </form>
</body>
</html>

複製代碼

界面:

 

reg.php(添加用戶的操做):

複製代碼

<?php
require 'redis.php';

$username = $_POST['username']; 
$password = md5($_POST['password']); 
$age =$_POST['age']; 
//uid 自加 
//當有 userid 這個鍵時,執行 incr時該鍵的值加1;不存在該鍵時,建立一個 userid,值爲0,執行incr,值爲1
$uid = $redis->incr('userid');

//向 hash 表中批量添加數據:hMset 
$redis->hMset('user:'.$uid, array('uid'=>$uid, 'name'=>$username, 'password'=>$password, 'age'=>$age));

//跳轉
header('location:list.php');

複製代碼

 

 redis.php(實例化 redis 對象並鏈接 redis 服務器,同時受權):

複製代碼

<?php
//實例化 Redis 對象
$redis = new Redis();
//鏈接到 Redis 服務器
$redis->connect('localhost', 6379); //鏈接地址; 端口號; 鏈接時長,默認爲0,不受限制
//受權
$redis->auth('phpdee');

複製代碼

 

list.php(顯示全部用戶列表的界面,提供刪除、編輯操做):

複製代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用戶信息列表</title>
</head>
<body>
    <a href="add.php">返回註冊頁面</a>

<?php
require 'redis.php';
for( $i = 1; $i <= $redis->get('userid'); $i++ ){
    $data[] = $redis->hgetall('user:'.$i);
    //過濾數組中的空元素
    $data = array_filter($data);
}
?>
<table border="1" cellspacing="0" cellpadding="5">
    <tr>
        <th>uid</th>
        <th>name</th>
        <th>age</th>
        <th>操做</th>
    </tr>
    <?php foreach($data as $v){ ?>
    <tr>
        <td><?php echo $v['uid']?></td>
        <td><?php echo $v['name']?></td>
        <td><?php echo $v['age']?></td>
        <td><a href="del.php?uid=<?php echo $v['uid'];?>">刪除</a> | <a href="mod.php?uid=<?php echo $v['uid'];?>">編輯</a></td>
    </tr>
    <?php } ?>
</table>
</body>
</html>

複製代碼

 

在 http://192.168.254.100/redis/add.php 中輸入信息,註冊(例如姓名:dee,密碼:123,年齡:25);

註冊完以後進入 redis 客戶端:

複製代碼

127.0.0.1:6379> keys *
1) "userid"
2) "user:1"

127.0.0.1:6379> get userid
"1"

127.0.0.1:6379> hgetall user:1
1) "uid"
2) "1"
3) "name"
4) "dee"
5) "password"
6) "202cb962ac59075b964b07152d234b70"
7) "age"
8) "25"

複製代碼

 

屢次測試以後訪問 http://192.168.254.100/redis/list.php:

 

del.php(刪除用戶信息的操做):

複製代碼

<?php
require 'redis.php';

$uid = $_GET['uid'];
$redis->del('user:'.$uid);
header('location:list.php');

複製代碼

 

mod.php(編輯用戶信息的界面,和 add.php 類似):

複製代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>編輯用戶</title>
</head>
<body>
    <?php 
        require 'redis.php';

        $uid = $_GET['uid'];
        $data = $redis->hgetall('user:'.$uid);
    ?>
    <form action="doEdit.php" method="post">
        <table align="left">
            <tr><td>用戶名:</td><td><input type="text" name="username" value="<?php echo $data['name'];?>"></td></tr>
            <tr><td>年齡:</td><td><input type="text" name="age" value="<?php echo $data['age'];?>"></td></tr>
            <tr><td><input type="submit" value="修改"></td><td><input type="hidden" name="uid" value="<?php echo $data['uid'];?>"></td></tr>
        </table>
    </form>
</body>
</html>

複製代碼

 

 

doEdit.php(編輯用戶的操做):

複製代碼

<?php
require 'redis.php';

$uid = $_POST['uid'];
$name = $_POST['username'];
$age = $_POST['age'];

//執行批量更改
$res = $redis->hmset('user:'.$uid, array('name'=>$name, 'age'=>$age));
//跳轉
if($res){
    header('location:list.php');
}

複製代碼

相關文章
相關標籤/搜索