魏长东

weichangdong

东邪

正在查看: 2015年03月日志归档(第 2 页 / 共 20 篇)

linux下安装redis

想安装个redis玩玩,之前在win7下也装过。

wget http://download.redis.io/releases/redis-2.8.3.tar.gz
tar xzf redis-2.8.3.tar.gz
cd redis-2.8.3
make【不是./configure,直接make】

make完了,但是src目录下面没有redis-cli,redis-server等这些文件。然后就用make test测试了下。

make test
cd src && make test
make[1]: Entering directory `/root/redis-2.8.3/src'
    LINK redis-server
zmalloc.o: In function `zmalloc_used_memory':
/root/redis-2.8.3/src/zmalloc.c:223: undefined reference to `__sync_add_and_fetch_4'

结果看到有报错,网上搜了下,说是这样执行make CFLAGS="-march=i686",然后照着执行了,果然ok了。

mkdir /usr/local/redis
cd src
cp redis-server redis-benchmark redis-cli    /usr/local/redis/
cp  /usr/redis
cp  /usr/redis
cp ../redis.conf /usr/local/redis/

然后修改了系统路径,执行redis-server redis.conf ,然后用xshell另外开启一个窗口。

redis-cli
127.0.0.1:6379> set wcd 'hello'
OK
127.0.0.1:6379> get wcd
"hello"
127.0.0.1:6379> 

大功告成!

安装php的redis扩展

在linux下安装了redis,想进一步在php中使用,那就得安装php的redis扩展了。

wget https://codeload.github.com/owlient/phpredis/zip/master

unzip phpredis-master.zip
mv  phpredis-master   /usr/local/php/include/php/ext/phpredis
cd /usr/local/php/include/php/ext/phpredis
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config

»»阅读全文

preg_replace的/e模式的替换

到了php5.5不支持preg_replace后面加/e的模式了。如这种

$str = preg_replace("/\{(\\$[a-zA-Z0-9_\[\]\'\"\$\x7f-\xff]+)\}/es", 
"\$this->addquote('<?php echo \\1;?>')",$str);

后报错的。

可以用这个preg_replace_callback函数替换。

附上preg_replace_callback函数的用法实例。

$str='HELLO';
$s=preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str);
echo $s;
$s=preg_replace_callback("/([A-Z])/",'wcd', $str);  
function wcd($match) {  
    return  '_'.strtolower($match[1]);  
}  
echo $s;
//以上程序,在php5.5以下版本输出是一样的。但是在大雨等于5.5版本就会报错。

如果是对象中使用,这么使用:

preg_replace_callback("/([A-Z])/",array($this,'wcd'), $str);

php 5.3新增的闭包语法介绍function() use()

function callback($callback) {    
    $callback();    
}        
callback(function() {    
    print "This is a anonymous function.<br />\n";    
});
//以上代码详解  
//输出: This is a anonymous function.<br />\n    
//这里是直接定义一个匿名函数进行传递, 在以往的版本中, 这是不可用的.    
//现在, 这种语法非常舒服, 和javascript语法基本一致, 之所以说基本呢, 需要继续向下看    
//结论: 一个舒服的语法必然会受欢迎的.

»»阅读全文

php 时区设置 date_default_timezone_set

Asia/Shanghai 亚洲,中国,上海 
Asia/Taipei 亚洲,中国,台北 
Asia/Chongqing 亚洲,中国,重庆 
Asia/Harbin 亚洲,中国,哈尔滨 
Asia/Urumqi 亚洲,中国,乌鲁木齐 
Asia/Hong_Kong 亚洲,中国,香港 
Asia/Macau 亚洲,中国,澳门 
Asia/Singapore 亚洲,新加坡 
Asia/Seoul 亚洲,韩国,首尔 
Asia/Tokyo 亚洲,日本,东京 
Europe/Berlin 欧洲,德国,柏林 
Europe/Dublin 欧洲,德国,都柏林 
Europe/Paris 欧洲,法国,巴黎 

preg_replace_callback替换preg_replace高级用法

装了SAE的thinkPHP的框架,有个地方报错了。

preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead ..../ThinkPHP/Lib/Core/Dispatcher.class.php 第 125 行.

看了下125行的代码是这样的:

preg_replace('@(\w+)\/([^\/]+)@e', '$var[\'\\1\']=strip_tags(\'\\2\');', implode('/',$paths));

改成这样就好了。

preg_replace_callback('@(\w+)\/([^\/]+)@',function ($matches) use ($var){
                    return $var[$matches[1]] = $matches[2];
                 },implode('/',$paths));

主要是用preg_replace_callback替换了preg_replace,还有用了php的闭包函数。通过use可以使用外面的$var变量。但是我这么写也没有问题。

preg_replace_callback('@(\w+)\/([^\/]+)@',function ($matches){
                    return $var[$matches[1]] = $matches[2];
                 },implode('/',$paths));

一个检查网络连接的bash

num=0;
wcd(){
    echo $num;
    if [ $num -gt '2' ]
    then
        echo 'num dayu 3'
        exit;
    fi
    content=`curl -I -m 10 -o /dev/null -s -w %{http_code} www.baidu.com`
    if [ $content != 2001 ]
    then
        sleep 3m;
        (( num++ ));
    else
        echo 'ok';
        exit;
    fi
}
for (( i=0;i<5;i++ ));
    do  wcd;
done;
echo $num;

实现尝试一次,要是失败,就休息3分钟,继续尝试。要是尝试次数大于3的话,就直接退出了。

shell中变量自增++

1. i=`expr $i + 1`;
2. let i+=1;
3. ((i++));
4. i=$[$i+1];
5. i=$(( $i + 1 ))

另外附上shell操作数组的简单代码。主要是“[]”和“{}”符号的使用。看来取数组里面的子数据,需要用"[]",和php一样。

WCD=(hello wcd)

for ((i=0;i<${#WCD[@]};i++));

do echo ${WCD[$i]};

done;

expect的安装

spawn命令激活一个Unix程序来进行交互式的运行。 
send命令向进程发送字符串。
expect 命令等待进程的某些字符串。 
expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作。

我接触的expect是用他做登陆。或者做ftp上传文件啥的,不用输入密码什么的。

»»阅读全文

thinkphp的ajax操作

ThinkPHP框架自带了一个易于扩展的JS类库,并且通过标签库技术和JS方法轻松导入。这个规范类似于ThinkPHP基类库的命名空间导入方式,并且该规范同样可以适用于CSS文件的导入。
基于标签库技术的JS类库引入方法
<html:import type='js' file='Js.Base' />

 <html:import file='Js.Util.Calendar' />

当然,我们还有更为简单的导入方法:

<load href=“__PUBLIC__/Js/Base.js” />
<load href=“__PUBLIC__/Js/prototype.js” />
<load href=“__PUBLIC__/Js/mootools.js” />
<load href=“__PUBLIC__/Js/Ajax/ThinkAjax.js” />

»»阅读全文