PhpExcel中文帮助手册PhpExcel使用方法

PhpExcel中文帮助手册PhpExcel使用方法,总结一些常用的方法,方便大家使用

PhpExcel中文帮助手册PhpExcel使用方法,总结一些常用的方法,方便大家使用

 

引入方法
下面是总结的几个使用方法
include 'PHPExcel.php';
include 'PHPExcel/Writer/Excel2007.php';
//或者include 'PHPExcel/Writer/Excel5.php'; 用于输出.xls的

创建一个excel

$objPHPExcel = new PHPExcel();

保存excel—2007格式

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
//或者$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 非2007格式
$objWriter->save("xxx.xlsx");

直接输出到浏览器

$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
header("Pragma: public");
header("Expires: 0″);
header("Cache-Control:must-revalidate, post-check=0, pre-check=0″);
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");;
header('Content-Disposition:attachment;filename="resume.xls"');
header("Content-Transfer-Encoding:binary");
$objWriter->save('php://output');

——————————————————————————————————————–
设置excel的属性:
创建人

$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");

最后修改人

$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");

标题

$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");

题目

$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");

描述

$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
关键字

$objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");

种类

$objPHPExcel->getProperties()->setCategory("Test result file");

——————————————————————————————————————–
设置当前的sheet

$objPHPExcel->setActiveSheetIndex(0);

设置sheet的name

$objPHPExcel->getActiveSheet()->setTitle('Simple');

设置单元格的值

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'String');
$objPHPExcel->getActiveSheet()->setCellValue('A2', 12);
$objPHPExcel->getActiveSheet()->setCellValue('A3', true);
$objPHPExcel->getActiveSheet()->setCellValue('C5', '=SUM(C2:C4)');
$objPHPExcel->getActiveSheet()->setCellValue('B8', '=MIN(B2:C5)');

合并单元格

$objPHPExcel->getActiveSheet()->mergeCells('A18:E22');//注意区间就行比如合并A1 B1 C1 D1写法A1:D1

分离单元格

$objPHPExcel->getActiveSheet()->unmergeCells('A28:B28');

保护cell

$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); // Needs to be set to true in order to enable any worksheet protection!
$objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel');

设置格式

// Set cell number formats
echo date('H:i:s') . " Set cell number formats\n";
$objPHPExcel->getActiveSheet()->getStyle('E4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
$objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('E4'), 'E5:E13' );

设置宽width

// Set column widths
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);

设置font

$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setName('Candara');
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(20);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
$objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
$objPHPExcel->getActiveSheet()->getStyle('D13')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('E13')->getFont()->setBold(true);

设置align

$objPHPExcel->getActiveSheet()->getStyle('D11')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('D12')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('D13')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);

垂直居中

$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

设置column的border

$objPHPExcel->getActiveSheet()->getStyle('A4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle('B4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle('C4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle('D4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle('E4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

设置border的color

$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getRight()->getColor()->setARGB('FF993300');

设置填充颜色

$objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF808080');
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFill()->getStartColor()->setARGB('FF808080');

加图片

$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('Logo');
$objDrawing->setDescription('Logo');
$objDrawing->setPath('./images/officelogo.jpg');
$objDrawing->setHeight(36);
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('Paid');
$objDrawing->setDescription('Paid');
$objDrawing->setPath('./images/paid.png');
$objDrawing->setCoordinates('B15');
$objDrawing->setOffsetX(110);
$objDrawing->setRotation(25);
$objDrawing->getShadow()->setVisible(true);
$objDrawing->getShadow()->setDirection(45);
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());

处理中文输出问题
需要将字符串转化为UTF-8编码,才能正常输出,否则中文字符将输出为空白,如下处理:

$str = iconv('gb2312', 'utf-8', $str);

或者你可以写一个函数专门处理中文字符串:

function convertUTF8($str)
{
if(empty($str)) return '';
return iconv('gb2312', 'utf-8', $str);
}

从数据库读取数据如:

$db = new Mysql($dbconfig);
$sql = "SELECT * FROM 表名";
$row = $db->GetAll($sql); // $row 为二维数组
$count = count($row);
for ($i = 2; $i <= $count+1; $i++) { $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, convertUTF8($row[$i-2][1]));
$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, convertUTF8($row[$i-2][2]));
$objPHPExcel->getActiveSheet()->setCellValue('C' . $i, convertUTF8($row[$i-2][3]));
$objPHPExcel->getActiveSheet()->setCellValue('D' . $i, convertUTF8($row[$i-2][4]));
$objPHPExcel->getActiveSheet()->setCellValue('E' . $i, convertUTF8(date("Y-m-d", $row[$i-2][5])));
$objPHPExcel->getActiveSheet()->setCellValue('F' . $i, convertUTF8($row[$i-2][6]));
$objPHPExcel->getActiveSheet()->setCellValue('G' . $i, convertUTF8($row[$i-2][7]));
$objPHPExcel->getActiveSheet()->setCellValue('H' . $i, convertUTF8($row[$i-2][8]));
}

在默认sheet后,创建一个worksheet

echo date('H:i:s') . " Create new Worksheet object\n";
$objPHPExcel->createSheet();
$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
$objWriter-save('php://output');

PHP Redis文档函数

PHP-redis文档函数
redis官方提供的命令使用技巧

PHP-redis文档函数

redis官方提供的命令使用技巧:下载地址如下:https://github.com/owlient/phpredis

 

Redis::__construct构造函数
$redis = new Redis();

connect, open 链接redis服务
参数
host: string,服务地址
port
: int,端口号
timeout
: float,链接时长 (可选, 默认为 0 ,不限链接时间)
注: 在redis.conf中也有时间,默认为300

pconnect, popen 不会主动关闭的链接
参考上面

setOption 设置redis模式

getOption 查看redis设置的模式

ping 查看连接状态

get
得到某个key的值(string值)
如果该key不存在,return false

set
写入key 和 value(string值)
如果写入成功,return ture

setex 带生存时间的写入值
$redis->setex(‘key’, 3600, ‘value’); // sets key → value, with 1h TTL.

setnx
判断是否重复的,写入值
$redis->setnx(‘key’, ‘value’);
$redis->setnx(‘key’, ‘value’);

delete  删除指定key的值
返回已经删除key的个数(长整数)
$redis->delete(‘key1’, ‘key2’);
$redis->delete(array(‘key3’, ‘key4’, ‘key5’));

ttl
得到一个key的生存时间

persist
移除生存时间到期的key
如果key到期 true 如果不到期 false

mset (redis版本1.1以上才可以用)
同时给多个key赋值
$redis->mset(array(‘key0’ => ‘value0’, ‘key1’ => ‘value1’));

multi, exec, discard
进入或者退出事务模式
参数可选Redis::MULTI或Redis::PIPELINE. 默认是 Redis::MULTI
Redis::MULTI:将多个操作当成一个事务执行
Redis::PIPELINE:让(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子性的保证
discard:删除一个事务
返回值
multi(),返回一个redis对象,并进入multi-mode模式,一旦进入multi-mode模式,以后调用的所有方法都会返回相同的对象,只到exec()方法被调用。

watch, unwatch (代码测试后,不能达到所说的效果)
监测一个key的值是否被其它的程序更改。如果这个key在watch 和 exec (方法)间被修改,这个 MULTI/EXEC 事务的执行将失败(return false)
unwatch  取消被这个程序监测的所有key
参数,一对key的列表
$redis->watch(‘x’);

$ret = $redis->multi() ->incr(‘x’) ->exec();


subscribe
*
方法回调。注意,该方法可能在未来里发生改变

publish *
发表内容到某一个通道。注意,该方法可能在未来里发生改变

exists
判断key是否存在。存在 true 不在 false

incr, incrBy
key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值
$redis->incr(‘key1’);
$redis->incrBy(‘key1’, 10);

decr, decrBy
做减法,使用方法同incr

getMultiple
传参
由key组成的数组
返回参数
如果key存在返回value,不存在返回false
$redis->set(‘key1’, ‘value1’); $redis->set(‘key2’, ‘value2’); $redis->set(‘key3’, ‘value3’); $redis->getMultiple(array(‘key1’, ‘key2’, ‘key3’));
$redis->lRem(‘key1’, ‘A’, 2);
$redis->lRange(‘key1’, 0, -1);

list
相关操作
lPush
$redis->lPush(key, value);
在名称为key的list左边(头)添加一个值为value的 元素

rPush
$redis->rPush(key, value);
在名称为key的list右边(尾)添加一个值为value的 元素

lPushx/rPushx
$redis->lPushx(key, value);
在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加

lPop/rPop
$redis->lPop(‘key’);
输出名称为key的list左(头)起/右(尾)起的第一个元素,删除该元素

blPop/brPop
$redis->blPop(‘key1’, ‘key2’, 10);
lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对keyi+1开始的list执行pop操作

lSize
$redis->lSize(‘key’);
返回名称为key的list有多少个元素

lIndex, lGet
$redis->lGet(‘key’, 0);
返回名称为key的list中index位置的元素

lSet
$redis->lSet(‘key’, 0, ‘X’);
给名称为key的list中index位置的元素赋值为value

lRange, lGetRange
$redis->lRange(‘key1’, 0, -1);
返回名称为key的list中start至end之间的元素(end为 -1 ,返回所有)

lTrim, listTrim
$redis->lTrim(‘key’, start, end);
截取名称为key的list,保留start至end之间的元素

lRem, lRemove
$redis->lRem(‘key’, ‘A’, 2);
删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素

lInsert
在名称为为key的list中,找到值为pivot 的value,并根据参数Redis::BEFORE | Redis::AFTER,来确定,newvalue 是放在 pivot 的前面,或者后面。如果key不存在,不会插入,如果 pivot不存在,return -1
$redis->delete(‘key1’); $redis->lInsert(‘key1’, Redis::AFTER, ‘A’, ‘X’); $redis->lPush(‘key1’, ‘A’); $redis->lPush(‘key1’, ‘B’); $redis->lPush(‘key1’, ‘C’); $redis->lInsert(‘key1’, Redis::BEFORE, ‘C’, ‘X’);
$redis->lRange(‘key1’, 0, -1);
$redis->lInsert(‘key1’, Redis::AFTER, ‘C’, ‘Y’);
$redis->lRange(‘key1’, 0, -1);
$redis->lInsert(‘key1’, Redis::AFTER, ‘W’, ‘value’);

rpoplpush
返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
$redis->delete(‘x’, ‘y’);
$redis->lPush(‘x’, ‘abc’); $redis->lPush(‘x’, ‘def’); $redis->lPush(‘y’, ‘123’); $redis->lPush(‘y’, ‘456’); // move the last of x to the front of y. var_dump($redis->rpoplpush(‘x’, ‘y’));
var_dump($redis->lRange(‘x’, 0, -1));
var_dump($redis->lRange(‘y’, 0, -1));

string(3) “abc”
array(1) { [0]=> string(3) “def” }
array(3) { [0]=> string(3) “abc” [1]=> string(3) “456” [2]=> string(3) “123” }

SET操作相关
sAdd
向名称为key的set中添加元素value,如果value存在,不写入,return false
$redis->sAdd(key , value);

sRem, sRemove
删除名称为key的set中的元素value
$redis->sAdd(‘key1’ , ‘set1’);
$redis->sAdd(‘key1’ , ‘set2’);
$redis->sAdd(‘key1’ , ‘set3’);
$redis->sRem(‘key1’, ‘set2’);

sMove
将value元素从名称为srckey的集合移到名称为dstkey的集合
$redis->sMove(seckey, dstkey, value);

sIsMember, sContains
名称为key的集合中查找是否有value元素,有ture 没有 false
$redis->sIsMember(key, value);

sCard, sSize
返回名称为key的set的元素个数

sPop
随机返回并删除名称为key的set中一个元素

sRandMember
随机返回名称为key的set中一个元素,不删除

sInter
求交集

sInterStore
求交集并将交集保存到output的集合
$redis->sInterStore(‘output’, ‘key1’, ‘key2’, ‘key3’)

sUnion
求并集
$redis->sUnion(‘s0’, ‘s1’, ‘s2’);
s0,s1,s2 同时求并集

sUnionStore
求并集并将并集保存到output的集合
$redis->sUnionStore(‘output’, ‘key1’, ‘key2’, ‘key3’);

sDiff
求差集

sDiffStore
求差集并将差集保存到output的集合

sMembers, sGetMembers
返回名称为key的set的所有元素

sort
排序,分页等
参数
‘by’ => ‘some_pattern_*’,
‘limit’ => array(0, 1),
‘get’ => ‘some_other_pattern_*’ or an array of patterns,
‘sort’ => ‘asc’ or ‘desc’,
‘alpha’ => TRUE,
‘store’ => ‘external-key’
例子
$redis->delete(‘s’); $redis->sadd(‘s’, 5); $redis->sadd(‘s’, 4); $redis->sadd(‘s’, 2); $redis->sadd(‘s’, 1); $redis->sadd(‘s’, 3);
var_dump($redis->sort(‘s’)); // 1,2,3,4,5
var_dump($redis->sort(‘s’, array(‘sort’ => ‘desc’))); // 5,4,3,2,1
var_dump($redis->sort(‘s’, array(‘sort’ => ‘desc’, ‘store’ => ‘out’))); // (int)5

string命令
getSet
返回原来key中的值,并将value写入key
$redis->set(‘x’, ’42’);
$exValue = $redis->getSet(‘x’, ‘lol’); // return ’42’, replaces x by ‘lol’
$newValue = $redis->get(‘x’)’ // return ‘lol’

append
string,名称为key的string的值在后面加上value
$redis->set(‘key’, ‘value1’);
$redis->append(‘key’, ‘value2’);
$redis->get(‘key’);

getRange (方法不存在)
返回名称为key的string中start至end之间的字符
$redis->set(‘key’, ‘string value’);
$redis->getRange(‘key’, 0, 5);
$redis->getRange(‘key’, -5, -1);

setRange (方法不存在)
改变key的string中start至end之间的字符为value
$redis->set(‘key’, ‘Hello world’);
$redis->setRange(‘key’, 6, “redis”);
$redis->get(‘key’);

strlen
得到key的string的长度
$redis->strlen(‘key’);

getBit/setBit
返回2进制信息

zsetsorted set)操作相关
zAdd(key, score, member)
:向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。
$redis->zAdd(‘key’, 1, ‘val1’);
$redis->zAdd(‘key’, 0, ‘val0’);
$redis->zAdd(‘key’, 5, ‘val5’);
$redis->zRange(‘key’, 0, -1); // array(val0, val1, val5)

zRange(key, start, end,
withscores):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
$redis->zAdd(‘key1’, 0, ‘val0’);
$redis->zAdd(‘key1’, 2, ‘val2’);
$redis->zAdd(‘key1’, 10, ‘val10’);
$redis->zRange(‘key1’, 0, -1); // with scores $redis->zRange(‘key1’, 0, -1, true);

zDelete, zRem

zRem(key, member) :删除名称为key的zset中的元素member
$redis->zAdd(‘key’, 0, ‘val0’);
$redis->zAdd(‘key’, 2, ‘val2’);
$redis->zAdd(‘key’, 10, ‘val10’);
$redis->zDelete(‘key’, ‘val2’);
$redis->zRange(‘key’, 0, -1);

zRevRange(key, start, end,withscores):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素.withscores: 是否输出socre的值,默认false,不输出
$redis->zAdd(‘key’, 0, ‘val0’);
$redis->zAdd(‘key’, 2, ‘val2’);
$redis->zAdd(‘key’, 10, ‘val10’);
$redis->zRevRange(‘key’, 0, -1); // with scores $redis->zRevRange(‘key’, 0, -1, true);

zRangeByScore, zRevRangeByScore
$redis->zRangeByScore(key, star, end, array(withscores, limit ));
返回名称为key的zset中score >= star且score <= end的所有元素

zCount
$redis->zCount(key, star, end);
返回名称为key的zset中score >= star且score <= end的所有元素的个数

zRemRangeByScore, zDeleteRangeByScore
$redis->zRemRangeByScore(‘key’, star, end);
删除名称为key的zset中score >= star且score <= end的所有元素,返回删除个数

zSize, zCard
返回名称为key的zset的所有元素的个数

zScore
$redis->zScore(key, val2);
返回名称为key的zset中元素val2的score

zRank, zRevRank
$redis->zRevRank(key, val);
返回名称为key的zset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“null”。zRevRank 是从大到小排序

zIncrBy
$redis->zIncrBy(‘key’, increment, ‘member’);
如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment

zUnion/zInter
参数
keyOutput
arrayZSetKeys
arrayWeights
aggregateFunction
Either “SUM”, “MIN”, or “MAX”: defines the behaviour to use on duplicate entries during the zUnion.
对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。

Hash操作
hSet

$redis->hSet(‘h’, ‘key1’, ‘hello’);
向名称为h的hash中添加元素key1—>hello

hGet
$redis->hGet(‘h’, ‘key1’);
返回名称为h的hash中key1对应的value(hello)

hLen
$redis->hLen(‘h’);
返回名称为h的hash中元素个数

hDel
$redis->hDel(‘h’, ‘key1’);
删除名称为h的hash中键为key1的域

hKeys
$redis->hKeys(‘h’);
返回名称为key的hash中所有键

hVals
$redis->hVals(‘h’)
返回名称为h的hash中所有键对应的value

hGetAll
$redis->hGetAll(‘h’);
返回名称为h的hash中所有的键(field)及其对应的value

hExists
$redis->hExists(‘h’, ‘a’);
名称为h的hash中是否存在键名字为a的域

hIncrBy
$redis->hIncrBy(‘h’, ‘x’, 2);
将名称为h的hash中x的value增加2

hMset
$redis->hMset(‘user:1’, array(‘name’ => ‘Joe’, ‘salary’ => 2000));
向名称为key的hash中批量添加元素

hMGet
$redis->hmGet(‘h’, array(‘field1’, ‘field2’));
返回名称为h的hash中field1,field2对应的value

redis 操作相关
flushDB
清空当前数据库

flushAll

清空所有数据库

randomKey
随机返回key空间的一个key
$key = $redis->randomKey();

select
选择一个数据库
move
转移一个key到另外一个数据库
$redis->select(0); // switch to DB 0
$redis->set(‘x’, ’42’); // write 42 to x
$redis->move(‘x’, 1); // move to DB 1
$redis->select(1); // switch to DB 1
$redis->get(‘x’); // will return 42

rename, renameKey
给key重命名
$redis->set(‘x’, ’42’);
$redis->rename(‘x’, ‘y’);
$redis->get(‘y’); // → 42
$redis->get(‘x’); // → `FALSE`

renameNx
与remane类似,但是,如果重新命名的名字已经存在,不会替换成功

setTimeout, expire
设定一个key的活动时间(s)
$redis->setTimeout(‘x’, 3);

expireAt
key存活到一个unix时间戳时间
$redis->expireAt(‘x’, time() + 3);

keys, getKeys
返回满足给定pattern的所有key
$keyWithUserPrefix = $redis->keys(‘user*’);

dbSize
查看现在数据库有多少key
$count = $redis->dbSize();

auth
密码认证
$redis->auth(‘foobared’);

bgrewriteaof
使用aof来进行数据库持久化
$redis->bgrewriteaof();

slaveof
选择从服务器
$redis->slaveof(‘10.0.1.7’, 6379);

save
将数据同步保存到磁盘

bgsave
将数据异步保存到磁盘

lastSave
返回上次成功将数据保存到磁盘的Unix时戳

info

返回redis的版本信息等详情

Redis在Windows下安装及redis在PHP中使用

Redis在Windows下安装调试,以及PHP使用redis连接测试分享,整个过程亲测!

Redis在Windows下安装及redis在PHP中使用

1、redis简介
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

2、Windows下安装redis
下载地址https://github.com/dmajkic/redis/downloads。

这里我下载redis-2.4.5-win32-win64.zip,解压后拷贝32bit到D:\redis\32bit

打开cmd窗口,使用cd命令切换到指定目录(D:\redis\32bit)运行

redis-server.exe redis.conf
如下图
redis-1

Redis服务端已经安装成功。

再新打开一个cmd窗口,使用cd命令切换到指定目录(D:\redis\32bit)运行

redis-cli.exe -h 127.0.0.1 -p 6379
如下图
redis-2
Redis客户端连接成功
注释:其中服务端IP 127.0.0.1 端口6379

在客户端连接的cmd中输入内容进行测试
set test ‘hello man’
get test
如下图所示
redis-3

 

3、这里讲一下PHP中使用redis(Apache环境 Php 5.4.34)

首先需要安装redis扩展,下载 dll文件,地址https://github.com/phpredis/phpredis/downloads
选择自己PHP对应的版本
比如 我是php5.4.34 ts版本(通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版。)

下载后解压php_redis.dll 和 php_igbinary.dll 放入PHP的ext文件夹,配置文件php.ini里添加如下代码:

extension=php_igbinary.dll

extension=php_redis.dll

注意:
extension=php_igbinary.dll
extension=php_redis.dll
顺序为先调用php_igbinary.dll,顺序错了调用会失败
重启服务Apache
4、PHP中使用

代码如下

<?php
$redis = new Redis();
$redis->connect(‘127.0.0.1’,6379);
$redis->set(‘test’,’hello man’);
echo $redis->get(‘test’);
?>

输出 hello man

 

5、关于PHP的redis函数可以参考PHP Redis文档函数

羊咩咩景芮喜

绝对小孩致我深爱的女儿羊咩咩景芮喜

1、小孩出生前让妈妈肚子痛,出生后让妈妈头痛……

2、小孩喜欢神话、童话、鬼话、笑话,更喜欢不听话。

3、小孩通常只做两件事,让自己发笑,以及让父母发疯……

4、父母给小孩去看马戏团的目的就是告诫孩子:连狮子老虎都这么听话,为什么你不能?

5、小孩都喜欢小丑,而大人不,因为他们觉得自己已经够像了……(貌似我也在向这个方向转换中……)

6、小孩爱听鬼故事,是因为这样才能说服自己:父母还不是最可怕的。

7、小孩脑袋里充满着“不可能”的事物,大人脑袋里充满着“不能”的规矩。

8、人生如果是一场戏剧,儿童就是恶作剧。

9、小孩说谎并不是因为有很好的记忆力,而是因为有很好的创造力。

10、小孩心中的阶级分有玩具阶级和无玩具阶级……

11、成人和儿童最大的区别在于:儿童只在乎玩具,大人只在乎玩具价钱。

12、加减乘除是儿童开始学习自私的第一步。

13、大人总告诉我们:如果考第一就奖励玩具,问题是:如果要考第一名,我们还有时间玩玩具吗?

14、所谓遗传,就是考零分时孩子和父母会同时想到的东西。

15、小孩的世界没有失败者,因为他们根本不在乎成功。

16、小孩永远不会觉得无聊,他们只会觉得父母很无聊。

17、小孩用乐观的眼光看待所有大人,大人用悲观的眼光看待所有孩子。

18、小孩都是乐天派,所以好事都会发生在他们身上。大人是悲天派,所以好事也会被他们搞成了坏事

19、大人每天多认识一些别人,小孩每天多认识一些自己。

20、所谓儿童专家,就是自以为了解孩子的世界,其实只是不够了解成人世界的那一种人。

21、小孩心中的美好世界:父母是不打骂小孩的,老师是听学生话的,周一到周六每天都是星期天……

22、如果有一天:石头变成棉花糖,雨水变成汽水,杂草变成薯条,炸弹变成炸鸡,父母变不见了。 ——这就是小孩的梦想世界。

23、如果能对神灯许愿——
  肥胖小孩说:给我糖果。
  爱玩小孩说:给我玩具。
  读书小孩说:给我第一名。
  绝对小孩说:再给我十盏神灯。
——-《绝对小孩》经典语录

MySQL中常用字符串函数

整理一些常用的Mysql sql语句字符串函数,资源来自互联网,亲测,很实用

整理一些常用的Mysql sql语句字符串函数,资源来自互联网,亲测,很实用
1.字符串长度函数CHAR_LENGTH(str),LENGTH(str)
CHAR_LENGTH()返回值为字符串str的长度,长度的单位为字符。一个多字节字符算作一个单字符。对于一个包含五个二字节字符集,LENGTH() 返回值为 10, 而 CHAR_LENGTH() 的返回值为 5
select CHAR_LENGTH(‘你是’); –2
select LENGTH(‘你是’); –6

2.拼接函数
CONCAT(str1 ,str2 ,…):
返回结果为连接参数产生的字符串。如有任何一个参数为 NULL ,则返回值为NULL。

CONCAT_WS(separator ,str1 ,str2 ,…):
CONCAT_WS() 代表 CONCAT With Separator ,是 CONCAT() 的特殊形式。 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL ,则结果为 NULL 。函数会忽略任何分隔符参数后的 NULL 值。

3.重复函数
REPEAT(str ,count):
函数使用说明:返回一个由重复的字符串str 组成的字符串,字符串str 的数目等于count 。 若 count <= 0, 则返回一个空字符串。若str 或 count 为 NULL ,则返回 NULL 。

4.查找位置函数
FIND_IN_SET(str, strlist)
假如字符串 str 在由 N 子链组成的字符串列表 strlist 中, 则返
回 值的范围在 1 到 N 之间 。一个字符串列表就是一个由一些被 ‘,’ 符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是 type SET 列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果 str 不在 strlist 或 strlist 为空字符串,则返回值为 0 。如任意一个参数为 NULL ,则返回值为 NULL。

INSTR(str,substr)
返回字符串 str 中子字符串的第一个出现位置。这和LOCATE() 的双参数形式相同,除非参数的顺序被颠倒。

LOCATE(substr ,str ) , LOCATE(substr ,str ,pos ):
第一个语法返回字符串 str 中子字符串substr 的第一个出现位置。第二个语法返回字符串 str 中子字符串substr 的第一个出现位置, 起始位置在pos 。如若substr 不在str 中,则返回值为0 。

5.截取函数
LEFT(str,len):
返回从字符串str 开始的len 最左字符

RIGHT(str ,len ):
从字符串str 开始,返回最右len 字符。

SUBSTRING(str ,pos ) , SUBSTRING(str FROM pos ) SUBSTRING(str ,pos ,len ) , SUBSTRING(str FROM pos FOR len ):
不 带有len 参数的格式从字符串str 返回一个子字符串,起始于位置 pos 。带有len 参数的格式从字符串str 返回一个长度同len 字符相同的子字符串,起始于位置 pos 。 使用 FROM 的格式为标准 SQL 语法。也可能对pos 使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。
select SUBSTRING(‘abcd’,-2); –cd
注:SUBSTRING() 等价于SUBSTR()

SUBSTRING_INDEX(str,delim,count)
在定界符 delim 以及count 出现前,从字符串str 返回自字符串。若count 为正值, 则返回最终定界符( 从左边开始) 左边的一切内容。若count 为负值,则返回定界符(从右边开始)右边的一切内容。
select SUBSTRING_INDEX(‘a,b,c’,’,’,2)     —  a,b 从开头到第2个,的串
SUBSTRING_INDEX(‘a,b,c’,’.’,-2)    —  b,c 从倒数第2个点开始的串

6.大小写转换函数
LCASE(str),LOWER(str)转化为小写
UCASE(str),UPPER(str)转化为大写

7.字符串替换函数
REPLACE(str ,from_str ,to_str)
返回字符串str 以及所有被字符串to_str 替代的字符串from_str
select REPLACE(‘abcabc’,’ab’,’e’); –ecec

8.反转函数REVERSE(str)
select REVERSE(‘abc’); –cba

9.去空格函数
select LTRIM(‘   abc’); –abc
select RTRIM(‘abc   ‘); –abc
TRIM([{BOTH | LEADING | TRAILING} [remstr ] FROM] str ):
返回字符串 str , 其中所有remstr 前缀和/ 或后缀都已被删除。若分类符BOTH 、LEADIN 或TRAILING 中没有一个是给定的, 则假设为BOTH
select TRIM(BOTH FROM’  a  b  ‘); –a  b

10.空格字符串
SPACE(N):返回一个由N个空格组成的字符串

NGINX特定文件夹限制IP访问

NGINX特定文件夹限制IP访问,站点IP限目录

NGINX特定文件夹限制IP访问,站点IP限目录:
location / {
index index.html index.htm index.php;
}

location ^~ /test/ {
allow 10.57.22.172;
deny all;

if ( $fastcgi_script_name ~ \..*\/.*php ) {return 403;}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/htdocs$fastcgi_script_name;
include fastcgi_params;
}

location ~ \.php$ {
if ( $fastcgi_script_name ~ \..*\/.*php ) {return 403;}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/htdocs$fastcgi_script_name;
include fastcgi_params;
}

注意事项:

  1. deny 一定要加一个ip,否则直接跳转到403,不往下执行了;如果403默认页是同一域名下,会造成死循环访问;

  2. allow的ip段

  从允许访问的段位从小到大排列,如127.0.0.0/24 下面才能是10.10.0.0/16

  24表示子网掩码:255.255.255.0

  16表示子网掩码:255.255.0.0

  8表示子网掩码:255.0.0.0

  3. deny all;结尾 表示除了上面allow的其他都禁止

如:
deny 192.168.1.1;
allow 127.0.0.0/24;
allow 192.168.0.0/16;
allow 10.10.0.0/16;
deny all;

IE6-IE8 media兼容问题

Respond.js让不支持css3 Media Query的浏览器包括IE6-IE8等其他浏览器支持查询

Respond.js 是一个快速、轻量的 polyfill,用于为 IE6-IE8 以及其它不支持 CSS3 Media Queries 的浏览器提供媒体查询的 min-width 和 max-width 特性,实现响应式网页设计(Responsive Web Design)。

使用场景:
Bootstrap里面就引入了这个JS文件,从名字看出来是自适应的兼容。打开IE看了一下,效果挺好的,自适应的效果挺好的。Respond.js让不支持css3 Media Query的浏览器包括IE6-IE8等其他浏览器支持查询。

使用方式
官方demo地址:http://scottjehl.github.com/Respond/test/test.html
1.在css中正常用 min/max-width media queries

@media screen and (min-width: 480px){
…styles for 480px and up go here
}

2.引入respond.min.js,但要在css的后面(越早引入越好,在ie下面看到页面闪屏的概率就越低,因为最初css会先渲染出来,如果respond.js加载得很后面,这时重新根据media query解析出来的css会再改变一次页面的布局等,所以看起来有闪屏的现象)

引入方式:

linux搭建SVN服务器

linux搭建SVN服务器,最近在VM的linux服务器搭建svn服务,整理下大致实现过程,有用的朋友拿走。

linux搭建SVN服务器,最近在VM的linux服务器搭建svn服务,整理下大致实现过程,有用的朋友拿走。

安装:

# yum install subversion
# yum install mod_dav_svn

配置:
1. 建立一个svn的根目录,

# mkdir -p /home/svn/project

2. 为project建立子目录,可以作为每个项目库

# mkdir -p /home/svn/project/pro1

3. 建立project的版本库

# svnadmin create /home/svn/project/pro1

4. 修改svnserve.conf配置文件

# vi /home/svn/project/pro1/conf/svnserve.conf

[general]
anon-access = none # 使非授权用户无法访问
auth-access = write # 使授权用户有写权限
authz-db = authz # 访问控制文件
password-db = passwd # 指明密码文件路径

5.配置authz

# vi /home/svn/project/pro1/conf/authz

[groups]
admin = root        # <用户组名> = <用户1>,<用户2>其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。
[pro1:/]              # pro1
@admin = rw            # @<用户组名> = <权限>
* = r                  # <用户名> = <权限>

注:这里[pro1:/]对应上边版本库

6. 修改用户密码文件passwd

# vi /home/svn/project/pro1/conf/passwd

[users]
root=  123 # <用户1> = <密码1>

运行

# svnserve -d -r /home/svn/project/

7. 检查端口

# netstat -ntlp|grep 3690

tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      15087/svnserve

8. 本机测试SVN:

#svn co svn://127.0.0.1/pro1

【注:svn checkout 简写:svn co 】

9. 停止SVN的方法:

PS查看:

#ps -ef| grep svn

33321?        00:00:00 svnserve

#kill 33321

10.添加防火墙:

vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 3690 -j ACCEPT

由于我是在VM中安装,自己电脑已安装windows SVN,直接右键svn checkout输入svn地址,根据要求用户名root密码123

11.linux下svn命令大全

以下是转子网络的一些关于svn在linux下的操作命令用法

1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
2、往版本库中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
svn commit -m “LogMessage“ [-N] [–no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
例如:svn commit -m “add test file for my test“ test.php
简写:svn ci
4、加锁/解锁
svn lock -m “LockMessage“ [–force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH
5、更新到某个版本
svn update -r m path
例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
7、删除文件
svn delete path -m “delete test fle“
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
简写:svn (del, remove, rm)
8、查看日志
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息
svn info path
例如:svn info test.php
10、比较差异
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
11、将两个版本之间的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、SVN 帮助
svn help
svn help ci
13、版本库下的文件和目录列表
svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
14、创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
16、代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH…]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
17、解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
18、输出指定文件或URL的内容。
svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

 

Magento普通页面获取所有评论reviews

Magento在普通页面获取所有的评论reviews并分页显示

Magento在普通页面获取所有的评论reviews

下载附件:Allreviews

在目录app\code\local\Mage\Review\Block创建Allreviews.php

然后模板app\design\frontend\default\default\template\review

创建reviewslist.phtml

后台cms page中创建review然后content中调用
{{block type=”review/allreviews” template=”review/reviewslist.phtml”}}
访问
http://域名/review

参考互联网希望对大家有用

基于jQuery的图片缩放效果插件

基于jQuery的图片缩放效果插,这里给大家推荐一些比较流行效果炫酷的图片缩放等开源代码。

基于jQuery的图片缩放效果插,这里给大家推荐一些比较流行效果炫酷的图片缩放等开源代码。

1. Zoomer Gallery

该插件可以将你的图片列表转换成漂亮的画廊,这个画廊带有像Flash一样缩放图片的效果。Zoomer Gallery 插件令你的界面看起来简单美观。它的大小为2KB,使用起来非常方便。

2. Jcrop

使用Jcrop可以轻松为Web应用程序添加截图功能,Jcrop结合了轻便的jQuery插件和强大的跨平台DHTML裁剪工具。

3. jQuery gzoom 插件

该插件是一个很好用的图像缩放插件,有很多缩放功能的实现方式:点击“+”“-”按钮、拖动滑块、滚动鼠标滚轮、鼠标悬停改变镜头、点击图片即在灯箱模式下显示,等等。

4. 悬停缩放

该插件可用于创建悬停缩放效果,将鼠标停在图片上时,图片缩放的同时会显示标签。这是一个非常时尚的效果,令缩略图更加精美。

5. 使用jQuery创建一个图像放大和裁剪效果

这个视频教程是关于怎样创建一个图片缩放效果的。在图中选择一个区域,则会自动按比例将选中部分放大显示。

6. AnythingZoomer jQuery 插件

这是一个很棒的插件,适用于小范围查看图片。当你的鼠标停在图片上方时,会弹出一个框呈现放大后的图像。

7. JQZoom

这是一个JavaScript图片放大镜,基于jQuery/JavaScript,这个简单的脚本可以让你放大任何想查看内容。

8. jQuery Cycle插件

该插件支持许多不同的切换效果,比如鼠标悬停暂停、自动停止、自动调整、开始和结束事件调用、点击触发等等,简单又神奇!

9. Crop、labelOver和pluck插件

通过Crop插件,可以让网站访问者进行自定义截图,另外两个插件labelOver和pluck也支持这项功能。

10. ImgAreaSelect

这个jQuery插件可以让你在图片上选择一个矩形区域。

11. PHP & jQuery 图像上传与裁剪插件

该插件允许用户上传和截取你网站上的图片。

12. PANVIEW

该插件能让用户查看大图的细节部分,还可用鼠标移动图片。

13. Image Zoom 2.0

该插件允许将链接指向图片,点击链接或图片时,图片会放大成为目标图片,点击该图片的任意地方或关闭按钮即可恢复图片。

14. jQuery拍照效果插件

该插件可以实现模拟拍照的效果。使用取景器选择需要拍照的图片区域并点击,即可在下方显示此“照片”。

15. jQuery iviewer

该插件可用于加载和查看容器中的图片,还可对图片进行缩放以及用鼠标拖动。

16. 平滑缩放插件

该插件创建的缩放效果就像Mac电脑中的效果一样平滑,也有些类似于Safari的网页缩放效果。

英文原文:http://smashinghub.com/16-best-image-zoom-effects-with-jquery-plugins.htm