文档章节

Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)

 蜗牛奔跑
发布于 2016/05/10 16:59
字数 1965
阅读 86
收藏 3
点赞 2
评论 0

 

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');
}

复制代码

 

本文转载自:

共有 人打赏支持
粉丝 34
博文 596
码字总数 114025
作品 0
海淀
小蚂蚁学习Redis笔记(14)——Redis之最后的demo

记录一下几段比较关键的代码:stuckouttongueclosedeyes: 1. 实例化对象。 昨天已经将phpredis扩展安装好,今天就可以使用php操作redis了。 先写一个init.php 2. 用户注册 3. 用户列表 在用户...

嗜学如命的小蚂蚁 ⋅ 2015/11/22 ⋅ 0

Redis 笔记与总结8 PHP + Redis 信息管理系统(分页+好友关注)

Redis 笔记与总结8 PHP + Redis 信息管理系统(分页+好友关注) 分页 要对列表页进行分页,需要知道: ①用户总数 $count ② 页大小 $pageSize:用户自定义 ③ 当前页:$page:GET 方式获取 ...

蜗牛奔跑 ⋅ 2016/03/10 ⋅ 0

论初级PHPer如何点亮技能树

论初级PHPer如何点亮技能树 PHP点点通2016-09-2650 阅读 前言 对于很多刚毕业或者大四的同学,都会有个困惑,我如何学PHP,为什么知识会那么杂,然后实习中公司大概需要哪些要求。此篇文章并未...

PHP点点通 ⋅ 2016/09/26 ⋅ 0

Anynote使用介绍

[20151026更新]:项目地址以移动到一下地址 http://www.daxiblog.com/anynote/ Anynote是一个基于extjs3.3、struts1.3.10、spring2.5、ibatis-2.3.4构建的个人信息管理系统(支持多用户)。主要...

yaotingxi ⋅ 2011/03/12 ⋅ 15

2016给自己一个目标

2016给自己一个目标 1.做一个互联网平台系统+ios app+后台运营系统 2.技术选型 2.1:类静态缓存数据,redis,事务处理,先update缓存,再异步修改mysql。 2.2:mongodb存储业务日志,操作日志...

指尖Coding ⋅ 2016/01/29 ⋅ 0

PHP秒杀系统 高并发高性能的极致挑战

先说一下体会,这个老师讲的算是比较慢的了,而且语义化的地方很多,我推荐大家睡觉的时候听,老师主要时讲解代码,大家可以看一遍代码,然后就听就行了,我这样学习就是享受啊,因为我眼睛一...

含笑666 ⋅ 06/06 ⋅ 0

2018-06-22_编程项目阶段小总结

个人理解的项目重点: 主要是处理答题竞赛活动的房间状态,用户身份,以及前端的请求。 5个主要过程,等待,开始答题发布题目和确认答案,请求复活,中途退出,以及最后显示奖励; 结合redis的队列,...

洛根森 ⋅ 前天 ⋅ 0

Meloy 1.0.3 发布 - ES、Redis 等数据管理工具

Meloy [ˈmelə] 是基于PHP7的提供 ES(Elastic Search)、Redis 等数据管理工具框架,可以方便地植入数据相关管理工具。 v1.0.3主要更新: * [ElasticSearch]支持2.x版本的ES * [ElasticSear...

刘祥超 ⋅ 2017/05/22 ⋅ 8

ZHENFENGSHISAN/perfect-ssm

Quick Start 项目简介 ssm系列 ssm-demo:Spring+SpringMVC+Mybatis+easyUI整合 perfect-ssm:RESTful API+redis缓存 ssm-cluster:前后端分离+集群部署 ssm-dubbo:dubbo服务化 ssm-micro-se......

ZHENFENGSHISAN ⋅ 2017/09/18 ⋅ 0

结合SSM框架讲解Shiro案例--Shiro Demo

本教程结合SSM(SpringMVC + Mybatis)框架讲解Shiro(Shiro是 Java 的一个安全框架。我们经常看到它被拿来和 Spring 的 Security 来对比。),讲解的内容有自定义Shiro拦截器,Shiro Freem...

8446666 ⋅ 2016/06/29 ⋅ 8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

容器之重命名镜像

使用docker tag命令来重命名镜像名称,先执行help,查看如何使用如下 mjduan@mjduandeMacBook-Pro:~/Docker % docker tag --helpUsage:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TA...

汉斯-冯-拉特 ⋅ 16分钟前 ⋅ 0

with 的高级用法

那么 上下文管理器 又是什么呢? 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法。with 语句开始运行时,会在上下文管理器对象上调用 __enter__ 方法。with 语句运行结束后,会在上下...

阿豪boy ⋅ 36分钟前 ⋅ 0

使用 jsoup 模拟登录 urp 教务系统

需要的 jsoup 相关 jar包:https://www.lanzous.com/i1abckj 1、首先打开教务系统的登录页面,F12 开启浏览器调试,注意一下 Request Headers 一栏的 Cookie 选项,我们一会需要拿这个 Cook...

大灰狼时间 ⋅ 36分钟前 ⋅ 0

关于线程的创建

转自自己的笔记: http://note.youdao.com/noteshare?id=87584d4874acdeaf4aa027bdc9cb7324&sub=B49E8956E145476191C3FD1E4AB40DFA 1.创建线程的方法 Java使用Thread类代表线程,所有的线程对......

MarinJ_Shao ⋅ 47分钟前 ⋅ 0

工厂模式学习

1. 参考资料 工厂模式-伯乐在线 三种工厂-思否 深入理解工厂模式 2. 知识点理解 2.1 java三种工厂 简单工厂 工厂模式 抽象工厂 2.2 异同点 逐级复杂 简单工厂通过构造时传入的标识来生产产品...

liuyan_lc ⋅ 59分钟前 ⋅ 0

Java NIO

1.目录 Java IO的历史 Java NIO之Channel Java NIO之Buffer Java NIO之Selector Java NIO之文件处理 Java NIO之Charset Java 可扩展IO 2.简介 “IO的历史”讲述了Java IO API从开始到现在的发...

士别三日 ⋅ 今天 ⋅ 0

[Err] ORA-24344: success with compilation error

从txt文本复制出创建function的脚本,直接执行,然后报错:[Err] ORA-24344: success with compilation error。 突然发现脚本的关键字,居然不是高亮显示。 然后我把脚本前面的空格去掉,执行...

wenzhizhon ⋅ 今天 ⋅ 0

Spring Security授权过程

前言 本文是接上一章Spring Security认证过程进一步分析Spring Security用户名密码登录授权是如何实现得; 类图 调试过程 使用debug方式启动https://github.com/longfeizheng/logback该项目,...

hutaishi ⋅ 今天 ⋅ 0

HAProxy基于KeepAlived实现Web高可用及动静分离

前言 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现 基于第三方应用的软负载实现 LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。 ...

寰宇01 ⋅ 今天 ⋅ 0

微软自研处理器的小动作:已经开始移植其他平台的工具链

微软将 Windows 10 、Linux 以及工具链如 C/C++ 和 .NET Core 运行时库、Visual C++ 2017 命令行工具、RyuJIT 编辑器等移植到其自主研发的处理器架构 E2。微软还移植了广泛使用的 LLVM C/C++...

linux-tao ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部