vm.overcommit_memory = 1

新装了redis,启动的时候有个警告,说参数vm.overcommit_memory当前设置为0,建议改成1,查了一下,这个参数和分配内存有关,如果改成1的话,不管内存是否够,都会返回分配成功,如果是0的话,会计算剩余空间,不够分配的时候,会返回失败。

权衡了一下,觉得还是不要改比较好,也许改了也没什么大的影响,术业不专攻,不了解。

新装nginx启动报 libpcre.so.1找不到

error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

64位centos,查看一下nginx依赖包

ldd $(which /usr/local/webserver/nginx/sbin/nginx)

发现 libpcre.so.1 not fund,还好就这一个找不到,因为是64位系统,

cd /lib64

#如果是32位,应该在lib目录

ln -s libpcre.so.0.0.1 libpcre.so.1

解决问题

Spreadsheet Excel Reader小应用

Spreadsheet Excel Reader,php版的读excel文件类,很不错的东西,导入excel数据需要用到。

稍微讲一下用法。

先实例化

$data = new Spreadsheet_Excel_Reader();

载入excel文件,注意文件名,保证php读的时候关闭此excel

$data->read(‘dict.xls’);

读取详细信息:

echo ‘总页数=’.count($data->sheets);
echo ‘总行数=’.$data->sheets[0][‘numRows’];// 第一页总行数
echo ‘列数=’.count($data->sheets[0][‘cells’][1]);// 第一页第一行列数。注:表格里的行列都是从1开始计数
echo ‘第一个单元格内容=’.$data->sheets[0][‘cells’][1][1];// 左上角第一个单元格内容

类和test详见附件:

reader

strlen mb_strlen iconv_strlen区别

strlen应该不用多讲了,返回字符串长度,多字节字符在不同编码下会有不同的结果,比如中文在utf8编码下可能返回3,而在ascII编码下可能返回2。

mb_strlen和iconv_strlen看起来好像没什么区别,都是返回对应编码字符的长度,都有第二个默认参数charset,实际还是有区别的。

首先,mb_strlen需要mbstring支持,没开启这个扩展肯定是不能用的。而iconv_strlen不依赖mbstring。

其次,iconv_strlen在指定第二个参数charset的情况下,要求被计算的字符串也必须是相同的编码,否则返回false,在不指定charset情况下,使用默认字符集,其计算结果依赖于当前字符集,比如ascII编码下,返回值和strlen同。

结论是,在开启mbstring扩展的前提下,计算多字节字符串长度,优先使用mb_strlen,并指定第二个参数charset。

非要使用iconv_strlen,要确保第一个参数字符集和第二个参数保持一致。

top命令之详解

top命令用来查看系统负载和进程运行情况。有一些很不错的参数和快捷键。

比如快捷键,之前我只知道c和1,c用来使command列出详细命令路径,1可以看到多核cpu的负载情况,其实还有更多。

先从参数开始。

top -b,这种模式,会不断的刷屏,方便查看历史负载情况。还可以加个次数的参数

top -b -n 1,只运行一次

top -b -n 1 > top.log,将top输出到日志文件,配合crontab就可以记录负载日志了

-p参数,只列指定的pid,如top -p xxx,多个pid用逗号分隔。

当然pid重启后会变,也可以指定user,-u,top -u www 继续阅读“top命令之详解”

二次加密,数据校验PHP

用于二次加密,数据校验,也许md5已经足够了,不过在用户密码字段里,还是会经常看到这样的md5串: e10adc3949ba59abbe56e057f20f883e,经常开测试账号的人你懂的。

<?php
$txt = “123456”;// 原文
echo “txt={$txt}\r\n”;
$key = “keyword”;// 密钥,最好用ord后127以内的字符,且不要有字符重复
$encrpt = md5($txt);// md5后的密文
echo “md5={$encrpt}\r\n”;

$j = 0;
$lk = strlen($key);
$lt = strlen($encrpt);

for($i = 0;$i < $lt;$i++){
$j %= $lk;
$sum = ord($encrpt[$i]) + ord($key[$j]);// 逐位拼接密钥
$encrpt[$i] = dechex($sum % 16);// 对16求余后生成新的16进制数,并替换对应位置字符
$j++;
}
echo “encrpt={$encrpt}”;
?>