July 16, 2008

cURL 并发访问 12:10 pm

通常情况下 PHP 中的 cURL 是阻塞运行的,就是说创建一个 cURL 请求以后必须等它执行成功或者超时才会执行下一个请求,curl_multi_* 系列函数使并发访问成功可能,PHP 文档对这个函数的介绍不太详细,用法如下:

$requests = array('http://zz.dongsheng.org', 'http://www.google.com');
$main    = curl_multi_init();
$results = array();
$errors  = array();
$info    = array();
$count   = count($requests);
for($i = 0; $i < $count; $i++) {
  $handles[$i] = curl_init($requests[$i]);
  var_dump($requests[$i]);
  curl_setopt($handles[$i], CURLOPT_URL, $requests[$i]);
  curl_setopt($handles[$i], CURLOPT_RETURNTRANSFER, 1);
  curl_multi_add_handle($main, $handles[$i]);
}
$running = 0;

do {
  curl_multi_exec($main, $running);
} while($running > 0);

for($i = 0; $i < $count; $i++)
{
  $results[] = curl_multi_getcontent($handles[$i]);
  $errors[]  = curl_error($handles[$i]);
  $info[]    = curl_getinfo($handles[$i]);
  curl_multi_remove_handle($main, $handles[$i]);
}
curl_multi_close($main);
var_dump($results);
var_dump($errors);
var_dump($info);

通过这种方式就可以实现多任务并发执行,更详细的用法看我写的这个类:curl class

Filed under: Programming — Tags: , Comments (7)

July 15, 2008

CVS Cheat Sheet 8:07 pm

记住:cvs 的操作可以通过 cvs -H 来查看,比如:
cvs -H diff
CVS CHECKOUT
d 输出目录
A 重设所有 sticky tags
r 指定一个 tag
CVS UPDATE
d 参数

CVS DIFF
b 忽略行尾空格
c 输出上下文
p 显示所改变的函数名(或类名)
u 使用 unified 输出格式
r 标识 tag

CVS UPDATE
p 重定向到标准输出
r 标识tag

CVS 操作的默认参数可以写在 ~/.cvsrc 里,如
diff -bc
update -dP

USE CASE:
1. 查看历史
cvs log xx.php
cvs log -r1.5 xx.php

2. 添加文件
cvs add xx.php
cvs ci xx.php
# 添加图片
cvs add -kb xx.jpg
cvs ci xx.jpg
# 添加目录
cvs add folder1
# 不需要提交

3. 删除
rm xx.php
cvs remove xx.php
cvs commit xx.php
# cvs 无法彻底删除空目录,只能到服务端彻底删除

4. 版本恢复
cvs update -p -r 1.6 xx.php > xx.php
5. 代码更新
cvs update
cvs update -dPA
# 创建新目录(如果必要),清理空目录,重置锁定点

6. diff
cvs diff -upc xx.php
# 生成 patch
cvs diff -up xx.php > xx.patch
# 应用 patch
patch -p0 < xx.patch
# 测试 patch
patch --dry-run -p0 < xx.path

更多 CVS 操作:.bashrc

Filed under: Programming,System — Tags: Comments (0)

bitlbee + irssi 7:15 pm

bitlbee 实质上是一个 irc 服务器,但它的主要功能是做一个转发消息的网关,通过它,普通的 irc 客户段就可以和其他 IM 网络(比如 ICQ,MSN 和 jabber)通信了。
irssi 是个基于终端的 irc 客户端。

使用步骤:
1. 用 apt-get 安装上 irssi 和 bitlbee
2. 修改 bitlbee 的配置文件:
RunMode = Daemon
DaemonInterface = 127.0.0.1
DaemonPort = 6667
AuthMode = Open
改完以后用 /etc/init.d/bitlbee restart 重新启动
2. 启动 irssi
输入
/network add bitlbee
# 这个相当于在配置文件中加入 bitlbee = { type = “IRC”; };
/server add -network bitlbee 127.0.0.1 6667
# 相当于在 server 段加入
# {
# address = “127.0.0.1″;
# chatnet = “bitlbee”;
# port = “6667″;
# use_ssl = “no”;
# ssl_verify = “no”;
# autoconnect = “yes”;
# }
3. 开始聊天了!
/connect bitlbee
# 连接到 bitlbee 服务器
按 alt+右箭头进入自动创建的名为 bitlbee 的聊天室
account add jabber xxx@gmail.com password
# 创建一个 jabber 帐号
set charset UTF-8
account on 0
# 登陆,0 是创建的帐号的顺序号
join_chat 0 conference@jabber.server.org &local_chatroom_name username
# 进入 jabber 聊天室
4. 保存 bitlbee 账号信息
首先创建一个bitlbee账号
register yourpassword
# irssi nickname will be your default username
# account information can be located at /var/lib/bitlbee
set auto_connect true
然后输入 save 即可保存所创建的账号

Filed under: System — Tags: , , Comments (0)