一个自动更新google Host的bat脚本

最近不知道怎会回事,公司里的google上不了,这是何等蛋疼的事情啊. 网上搜索,有以为网友给出了一个更新host的bat,这里贴一下,留作以后备用 google_hosts.rar 双击运行,按指令即可更新,这样,google搜索再也不怕"链接被重置了"。 提醒:修改时,国内杀软可能会有警报,忽略即可,保证无毒的。亲测可用.

如何将搜索结果高亮

用sphinx做搜索,结果返回给php,碰到两个问题.一个是如何将搜索高亮.一个是如何将带有关键词的第一段内容截取. 高亮的问题,有了一个思路.首先要将搜索内容进行分词,然后通过正则匹配将分词后的关键词全部匹配,这样的话也不会影响整个关键词的高亮. 比如说,要搜索的关键词为:我爱你中国. 这里会将关键词分词为: 我 爱 你 中国. 如果在全文中有一段是: 我爱你中国,亲爱的母亲. 那么最后的结果就是: 中国,亲的母亲 其次,对于英文的高亮,需要能做到大小写不敏感,即关键词为大写时,全文内的匹配的相应小写也会高亮,而且不会被替换成关键词的大写. mmseg已经可以完美的进行分词了,那接下来的事情就比较简单了:

- 阅读剩余部分 -

sphinxapi.php 的一些注释.

sphinxapi.php 的一些注释.和sphinx的配置以及一些常规命令.做备忘.

<?php 

include_once 'sphinxapi.php';
$s = new SphinxClient();
$s->setServer("localhost", 9312);
$s->SetConnectTimeout ( 1 );//设置链接超时


/*
$s->AddQuery();//列表查询
$s->RunQueries ();//执行列表查询
$s->ResetFilters();//清除过滤条件
$s->BuildExcerpts($docs, $index, $words);//生成简要
$s->BuildKeywords($query, $index, $hits);//生成关键字
$s->GetLastError();//错误
$s->GetLastWarning();//警告
$s->FlushAttributes();//索引刷入硬盘
$s->IsConnectError();//链接错误
$s->ResetGroupBy();//重设分组
$s->SetFieldWeights(array('sub_title'=>1));//加权最小为1
$s->SetIDRange($min, $max);//ID范围
$s->SetIndexWeights(array('test1'=>1));//索引权重
$s->Status();//服务是否可用
$s->UpdateAttributes($index, $attrs, $values);//更新硬盘索引
*/
/*
参考文档:http://www.coreseek.cn/docs/coreseek_4.1-sphinx_2.0.1-beta.html#matching-modes
SPH_MATCH_ALL, matches all query words (default mode);
SPH_MATCH_ANY, matches any of the query words;
SPH_MATCH_PHRASE, matches query as a phrase, requiring perfect match;
SPH_MATCH_BOOLEAN, matches query as a boolean expression (see Section 5.2, “Boolean query syntax”);
SPH_MATCH_EXTENDED, matches query as an expression in Sphinx internal query language (see Section 5.3, “Extended query syntax”). As of 0.9.9, this has been superceded by SPH_MATCH_EXTENDED2, providing additional functionality and better performance. The ident is retained for legacy application code that will continue to be compatible once Sphinx and its components, including the API, are upgraded.
SPH_MATCH_EXTENDED2, matches query using the second version of the Extended matching mode.
SPH_MATCH_FULLSCAN, m
*/
$s->setMatchMode(SPH_MATCH_ANY);//匹配模式
$s->setMaxQueryTime(3);//查询超时
//$s->SetSelect ( $select );//设置返回的字段
/*
$cl->SetSelect ( "*, @weight+(user_karma+ln(pageviews))*0.1 AS myweight" );
$cl->SetSelect ( "exp_years, salary_gbp*{$gbp_usd_rate} AS salary_usd,
   IF(age>40,1,0) AS over40" );
$cl->SetSelect ( "*, AVG(price) AS avgprice" );
 */

/*
$cl->SetGroupBy ( "category", SPH_GROUPBY_ATTR, "@count desc" );
$cl->SetGroupDistinct ( "vendor" );
==
SELECT id, weight, all-attributes,
    COUNT(DISTINCT vendor) AS @distinct,
    COUNT(*) AS @count
FROM products
GROUP BY category
ORDER BY @count DESC
*/
//$s->SetGroupBy ( $groupby, SPH_GROUPBY_ATTR, $groupsort );//汇总
//$s->SetGroupDistinct ( $distinct );//设置不重复字段

$s->SetArrayResult ( true );//结果是否有ID

/*
    SPH_SORT_RELEVANCE mode, that sorts by relevance in descending order (best matches first);
    SPH_SORT_ATTR_DESC mode, that sorts by an attribute in descending order (bigger attribute values first);
    SPH_SORT_ATTR_ASC mode, that sorts by an attribute in ascending order (smaller attribute values first);
    SPH_SORT_TIME_SEGMENTS mode, that sorts by time segments (last hour/day/week/month) in descending order, and then by relevance in descending order;
    SPH_SORT_EXTENDED mode, that sorts by SQL-like combination of columns in ASC/DESC order;
    SPH_SORT_EXPR mode, that sorts by an arithmetic expression.
 */
//$s->SetSortMode ( SPH_SORT_EXTENDED, $sortby );//排序模式

/*
$s->SetOverride($attrname, $attrtype, $values);
$s->ResetOverrides();*/
/*
$s->SetRetries($count);//设置失败重试
$s->SetRankingMode($ranker);//设置排名模式 均适用于SPH_MATCH_EXTENDED2搜索

//第3个参数当为true时,相当于$attribute!=$value,默认值是false
$s->SetFilter ( 'target_type', $filtervals );//设置过滤,值列表
$s->SetFilterFloatRange($attribute, $min, $max);//浮动范围
$s->SetFilterRange($attribute, $min, $max);//指定范围
$s->SetGeoAnchor($attrlat, $attrlong, $lat, $long);
*/
//link
//$s->SetFilter ( 'target_type', array(1),true );


$s->SetLimits ( 0, 10 );//显示数量:开始 量 最大量 右偏移量
$result = $s->query("good","team");//查询


print_r($result);

 

- 阅读剩余部分 -

关于MYSQL触发器

- 阅读剩余部分 -

安装phpredis扩展以及phpRedisAdmin工具

看了网上一些教程,大多都有一些老旧,这里重新记录一下,其实都是大同小异. 先从phpredis的git拿到最新的源码包:

https://github.com/nicolasff/phpredis.git

然后进入目录:

cd phpredis

编译,安装扩展:

phpize
./configure --enable-redis
make && make install

然后编辑php.ini加入 extension = redis.so 重启服务器发现php提示缺少redis.so, Installing shared extensions: /usr/lib/php5/20090626/ 而我的extension目录是 : /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626 按照提示的目录把redis.so 拷贝过去就OK了.

- 阅读剩余部分 -

PHP实现进程间通信:信号量

上一篇说了一下在PHP中利用systemv的消息队列进行子进程间的数据通信,这里介绍一下另外一种进程通信的方法:利用信号量. UNIX的IPC主要分为两大块,由AT&T主张的 system V IPC 和由BSD 主张的 socket.显然这些都是很好的东西,所以Linux把他们都完美的继承了下来. 有一张图可以清晰地显示出Linux的IPC体系. 上图非原创,socket也可以进行进程通信,但是一般不这么做. 和上一篇一样,pcntl 和 sysvshm 模块是必须的.pcntl只支持Linux和Unix,所以只能在Linux下进行:

- 阅读剩余部分 -

PHP实现进程间通信:消息队列

实际上,在PHP开发过程中,对于消息队列的应用还是很广泛的。消息队列(message queue)也是Linux系统进程间通信的一种方式。 除了现有的一些消息队列解决方案以外,PHP对共享内存段的操作有两组函数:System V IPC和Shared Memory。 其中System V IPC由AT&T的贝尔实验室对早期的UNIX系统贡献而来,现在的linux系统都完美的继承了下来,该系列函数能够更方便的操作数据,无需像Shared Memory那样必须自己掌握读写时的偏移量、长度等,也不用序列化/反序列化来回转换(因为Shared Memory函数只支持字符串格式的数据参数)。但是System V IPC系列不支持Windows,所以如果要在win环境下使用,只能选Shared Memory。 PHP的System V msg模块是对Linux系统支持的System V IPC中的System V消息队列函数族的封装。我们需要利用sysvmsg模块提供的函数来进进程间通信。  

<?php 
$message_queue_key = ftok(__FILE__, 'a'); 
$message_queue = msg_get_queue($message_queue_key, 0666);
var_dump($message_queue);

$message_queue_status = msg_stat_queue($message_queue);
print_r($message_queue_status);

//向消息队列中写
msg_send($message_queue, 1, "Hello,World!");

$message_queue_status = msg_stat_queue($message_queue);
print_r($message_queue_status);

//从消息队列中读
msg_receive($message_queue, 0, $message_type, 1024, $message, true, MSG_IPC_NOWAIT);
print_r($message."\r\n");

msg_remove_queue($message_queue); 
?>

由于System V IPC只支持linux类操作系统,以上演示请在linux中进行.

- 阅读剩余部分 -

记一次JQuery的跨站操作实现

公司项目里遇到的一个需求,由于美工将一个活动页面做在了另外的一个系统里,所以就涉及到JS的跨站操作 getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然,究其本质还是通过script标签动态加载js。 需要说明的是,getJSON利用的jsonp需要客户端与服务端作出配合。 客户端传递的URL里要包含callback变量,以形如callback=?的形式结尾。(jquery会随机生成一个字符串替换?传递给服务端) 服务端获取客户端传递的callback的值callbackValue,和需要传递的json字符串构成 callbackValue.’(’.json.’)'传回给客户端(示例为php字符串连接方式,其他语言类似) 这种方式实际上的流程是下面这样的:

- 阅读剩余部分 -

一个数组变换问题

做开发的时候遇到一个问题,现在记录一下.顺便说一句,PHP内置的函数能实现的,一定要用内置函数实现,看来还是对php.net了解不够啊~ 需要将如下数组

array(4) {
  ["id"]=>  array(2) {
    [0]=>    string(1) "1"
    [1]=>    string(1) "2"
  }
  ["name"]=>  array(2) {
    [0]=>    string(7) "这是1"
    [1]=>    string(7) "这是2"
  }
  ["spec"]=>  array(2) {
    [0]=>    string(1) "x"
    [1]=>    string(1) "y"
  }
  ["quan"]=>  array(2) {
    [0]=>    string(2) "22"
    [1]=>    string(2) "23"
  }
}

转换成:

array(2) {
  [0]=>
  array(4) {
    [id]=>    string(1) "1"
    [name]=>    string(7) "这是1"
    [spec]=>    string(1) "x"
    [quan]=>    string(2) "22"
  }
  [1]=>
  array(4) {
    [id]=>    string(1) "2"    
    [name]=>    string(7) "这是2"
    [spec]=>    string(1) "y"
    [quan]=>    string(2) "23"
  }
}

这种格式.其实这个非常简单就可以实现:

function user_array_flip($arr){
    $data = array();
    foreach($arr as $k => $v){
        foreach($v as $id => $val){
            $data[$id][$k] = $val;
        }
   }
    return $data;
}
var_dump(user_array_flip($array));

简单的循环就可以搞定,这里主要是想提一下一种更简便的方式:

- 阅读剩余部分 -

总结一些常用的MYSQL查询语句,供备忘

mysql语句基础。

- 阅读剩余部分 -

处理wordpress在nginx上500错误一例

在nginx上做wordpress博客,如果你使用了wordpress自带的固定连接功能,那一定会涉及到修改rewrite的地方, 因为wordpress默认是修改仅apache支持的.htaccess的规则. 如果是nginx用户,通常会在conf/nginx.conf内添加如下:

- 阅读剩余部分 -

python学习笔记

2012-10-20 00:30 装了ubuntu12.10 AMD64,说实话Linux还是ubuntu用的顺手一些.

12.10装好以后默认就安装好了python.含有2.7.2和3.0以及3.3几个版本.

svn co http://code.djangoproject.com/svn/django/trunk djtrunk 通过SVN拿到最新的django版本

/usr/lib/python2.7/dist-packages 里加入django,pth指向djtrunk 目录

ln -s /path/to/django/bin/django-admin.py /usr/local/bin/django-admin.py 给django-admin.py做个快捷方式

随便进个目录,django-admin.py startproject 建立一个项目

值得一提的,py文件第一句加上#coding=utf8防止乱码

- 阅读剩余部分 -

写了个简单的svn在线管理工具

SVN好用,但是每次更新都要到线上环境去更新,很是麻烦.对于我这样的写到哪就提交到哪的人来说更是噩梦. 所以花了点时间写了个svn在线管理的小程序 主要功能是在线 svn up,checkout,commit,比对 等操作,这样就省去为了更新线上版本去开secureCRT的过程 给出一些截图,等稍微完善一些了后会放出  

- 阅读剩余部分 -

Linux超帅命令:xargs

介绍: 大家常用的Linux命令大概在20多个的样子,除了基本的find、grep、awk啥的,还有一些配合起来有意思的命令,结合起来使用强大,这就是Unix的设计哲学:K.I.S.S 1. 拷贝文件(除了某些文件或目录之外的文件) [heiyeluren@localhost php5]$ ls bin data etc include ini lib logs man old php.ini php.ini.20110505 phplib ral sbin var 上面文件列表里比如我们不想拷贝 data/logs 两个目录,那么就可以使用grep -v 去掉后再调用 xargs 来拷贝其他文件: [heiyeluren @localhost php5]$ ls | grep -v log | grep -v data | xargs -i cp -rf {} /home/heiyeluren /code/php5/ 说明: -i 参数是指定 {} 代表我们当前列出来的文件名字。

- 阅读剩余部分 -

OAuth 2.0规范中文翻译版,提供下载

OAuth协议致力于使网站和应用程序(统称为消费方)能够在无须用户透露其认证证书的情况下,通过API访问某个web服务(统称为服务提供方)的受保护资源。更一般地说,OAuth为API认证提供了一个可自由实现且通用的方法。这是OAUTH2.0的规范,新浪微博和人人网都在用。 点击下载 : OAuth_2.0_中文译本