zoukankan      html  css  js  c++  java
  • Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)

    1. PHP 连接 Redis

    访问 redis 官方网站的 client 栏目:http://www.redis.io/clients#php,可以获取 redis 的 php 扩展。

    其中 phpredis 扩展比较稳定,功能也比较全,属于一个第三方扩展,但是已经被 PHP 官方授权,它的方法名和客户端下的方法名基本一致。github 地址:https://github.com/phpredis/phpredis,方法在这里也能查得到。

    ① 下载 phpredis 的源代码包,解压、配置、编译、安装;

    ② 编辑 php.ini,给 PHP 打上 redis 模块(extension=redis.so);

    ③ 写一个 phpinfo 的页面,访问,找到 redis 扩展:

    (这三步之前已经做过,参见:http://www.cnblogs.com/dee0912/p/4343032.html

    ④ 配置 Samba 服务器

    (在一些中小型网络,或者企业的内部网中,利用Linux建立文件服务器是一个很好的解决方案。针对企业内部网中的绝大部分客户机采用Windows的情况,我们可以通过使用 Samba 来实现文件服务器功能。 )

    打开光盘源:

    勾选“已连接”,选择 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');
    }

    【附】查看 redis 服务是否启动:

    [root@localhost ~]# netstat -tunpl | grep 6379
    tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      2061/redis-server * 
    tcp        0      0 :::6379                     :::*                        LISTEN      2061/redis-server * 
  • 相关阅读:
    旁注攻击介
    简单讲解什么是黑帽SEO
    ADO.NET基础必背知识
    Burp Suite Pro1.7.36破解版
    Screen命令让Linux shell在后台运行
    网站seo优化教你如何引蜘蛛爬行网站
    hibernate导入大量数据时,为了避免内存中产生大量对象,在编码时注意什么,如何去除?
    递归返回值
    利用cglib生成动态java bean
    java线程安全和线程同步
  • 原文地址:https://www.cnblogs.com/dee0912/p/4605750.html
Copyright © 2011-2022 走看看