PHP 版的ab

为了测试apache的特性,我只允许apache启动两个进程,但是我却已并发1000来访问,因为我想知道超过并发的访问是被如何处理的,我看了apache的源码,apache的listen调用设置的backlog是511,这么说的话,如果至少可以建立511个连接了,但是我用ab测试却发现设置并发1000,也只有100多个连接,怀疑是ab的问题,就自己用php写了个ab,效果还不如人家的ab,同时也就只能建立几十个连接,然后就慢下来了,下面是我的ab.php不知道是谁限制了连接数

<?php
$url 
$argv[$argc – 1
];
$arrURL parse_url($url
);
$host $arrURL[‘host’
];
$port = isset($arrURL[‘port’])?$arrURL[‘port’]:80
;

$arropt getopt(‘n:c:’);
$num $arropt[‘n’
];
$curr $arropt[‘c’
];

$i 0;
$j 0
;
while(
$i <= $num
) {
        while(++
$j <= $curr
) {
                echo 
"i:$i,j:$j\n"
;
                
$i
++;
                
$sock[$i] = fsockopen($host$port$errno$errstr10
);
                if(     
$sock[$i] === false
) {
                        echo 
"$errstr [ $errno ]\n"
;
                        continue;
                }
                
socket_set_blocking($sock[$i],false
);
        
$query = ($arrURL[‘query’]) ? "?" $arrURL[‘query’] : ""
;
        
fputs($sock[$i],"GET " $arrURL[‘path’] . "$query HTTP/1.0\r\nHost: " $arrURL[‘host’] . "\r\n\r\n"
);

        }
        while(($i >= $num && $j 0) || ($j >= $curr
)) {
                
$k 0
;
                for(
$k 0;$k <= $i;$k
++) {
                        if(!
$sock[$k
]) continue;
                        if(!
feof($sock[$k
])) {
                                
fgets($sock[$k],1024
);
                                echo 
"read data from $k\n"
;
                        } else {
                                
fclose($sock[$k
]);
                                
$sock[$k] = false
;
                                
$j
–;
                                echo 
"done $k\n"
;
                        }
                }
        }
}
?>

用法:php ab.php -n 1000 -c 1000 http://baidu.com

Linux 的文件属性的数字表示

Linux 文件或目录的属性的二进制表示:

<?php
$f
= $argv[1
];
echo
sprintf(‘%016s’,decbin(fileperms($f))) ."\n"
;
?>

每个二进制位代表特殊的含义:

从高到低:

1 说明是文件, 否则是目录

1 如果是文件,说明是sock文件

1 不知道

1 如果是文件,说明是pipe文件

1 属主的s位

1 属组的s位

1 粘着位t

1 属主可读

1 属主可写

1 属主可执行

1 属组可读

1 属组可写

1 属组可执行

1 其他用户可读

1 其他用户可写

1 其他用户可执行

将数字转换成字母的形式,php

 

<?php
define
("S_ISUID",04000
);
define("S_ISGID",02000
);
define("S_ISVTX",01000
);

define("S_IRUSR",0400);
define("S_IWUSR",S_IRUSR >> 1
);
define("S_IXUSR",S_IRUSR >> 2
);
define("S_IRGRP",S_IRUSR >> 3
);
define("S_IWGRP",S_IRUSR >> 4
);
define("S_IXGRP",S_IRUSR >> 5
);
define("S_IROTH",S_IRUSR >> 6
);
define("S_IWOTH",S_IRUSR >> 7
);
define("S_IXOTH",S_IRUSR >> 8
);

$mode fileperms($argv[1]);
echo 
strmode($mode) ."\n"
;
function 
strmode($mode
) {
        
$str 
;
        
$str .= $mode S_IRUSR ‘r’ ‘-‘
;
        
$str .= $mode S_IWUSR ‘w’ ‘-‘
;
        
$str .= ($mode 
S_ISUID
                        
? ($mode S_IXUSR ‘s’ ‘S’
)
                        : (
$mode S_IXUSR ‘x’ ‘-‘
));
        
$str .= $mode S_IRGRP ‘r’ ‘-‘
;
        
$str .= $mode S_IWGRP ‘w’ ‘-‘
;
        
$str .= ($mode 
S_ISGID
                        
? ($mode S_IXGRP ‘s’ ‘S’
)
                        : (
$mode S_IXGRP ‘x’ ‘-‘
));
        
$str .= $mode S_IROTH ‘r’ ‘-‘
;
        
$str .= $mode S_IWOTH ‘w’ ‘-‘
;
        
$str .= ($mode 
S_ISVTX
                        
? ($mode S_IXOTH ‘t’ ‘T’
)
                        : (
$mode S_IXOTH ‘x’ ‘-‘
));
        return 
$str
;
}
?>

还没写完呢,还会更新呢

具体代码参考coreutils-6.10\lib 下面的如下文件:filemode.h  filemode.c sys_stat.h  ,具体写起来也很复杂的,主要是不同的系统就不一样

关于粘着位

在Linux下,/tmp是一个存放临时文件的目录,要求是对所有用户可写。但每个用户都只能删除自己拥有的文件。这种情况下,就可以把目录加一个粘着位。

  [root@yaoyao /]# ls -l |grep tmp
  drwsrwsrwt 9 root root 4096  8月7 10:50 tmp

  注意第是个字符“t“,它代表了这个目录被设置了粘着位。

  我们自行建立一个abc的目录,使之具有和/tmp相同的特点

  chmod 777 abc
  chmod +t abc

  上述的个两个命令组合等同于下边的一个命令:

  chmod 1777 abc

  用ls –l 看abc 目录的属性如下:

  [root@yaoyao test]# ls -l

  总用量 4

  drwsrwsrwt 2 root root 4096  8月 7 11:32 abc

  和/tmp目录相同的需求往往在ftp服务器的upload 目录中也存在。可以用相同的方式处理。
此信息出自广州北大青鸟:<a href=’http://www.gz-benet.com.cn’>http://www.gz-benet.com.cn</a>

 

你需要知道的

   1,事业永远第一
  虽然金钱不是万能的,但没有钱是万万不能的,虽然这句话很俗,但绝对有道理,所以30岁之前,请把你大部分精力放在你的事业上.
  2,别把钱看得太重
  不要抱怨自己现在工资低,银行存款4位数以下,看不到前途,现在要做的就是努力学习,即使你文凭再高,怎么把理论运用到实践还是需要一个很长的锻炼过程,社会永远是一所最博大的大学,它让你学到的知识远比你在学校学到的重要得多,所以同样,你也别太介意学历低.30岁之前靠自己能力买车买房的人还是极少.
  3,学会体谅父母
  别嫌他们唠叨,等你为人父了你就知道可怜天下父母心,在他们眼里你还是个孩子,但他们真的老了,现在得你哄他们开心了,也许只要你的一个电话,一点小礼物,就可以让他们安心,很容易做到.
  4,交上好朋友
  朋友对你一生都影响重大,不要去结识太多酒肉朋友,至少得有一个能在关键时刻帮助你的朋友,如果遇到这么一个人,就好好把握,日后必定有用,不管他现在是富还是穷.
  5,别太相信爱情
  心中要有爱,但请别说也别相信那些琼瑶阿姨小说里面的山盟海誓,世上本无永恒,重要的是责任,但女人心海底针,心变了,一切都成枉然,你要做的就是该出手时就出手,该放手时别犹豫.30岁之前的爱情不是假的,但只是大多数人都没有能真正把握好的能力,所以学会量力而行.
  6,别担心至今还保留初吻
  爱情不在多而在精,别以为自己20多岁还没碰过女孩子就害怕自己永远找不到老婆.以后你会有很多机会认识女孩子,要知道这个社会虽然男人多于女人,但现实是女人其实比男人更担心这个问题.男人30一枝花,你在升值而不是贬值,成熟的爱情往往更美丽更长久,所以不要像疯狗一样看到女孩就想追,学会品味寂寞.
  7,不要沉迷于任何东西
  所谓玩物而丧志,网络游戏是你在出校门之前玩的,你现在没有多余的时间和精力花费到这上面,否则你透支的东西以后都得偿还.一个人要有兴趣,爱好,但请分清楚轻重.
  8,年轻没有失败
  不要遇到挫折就灰心,年轻人要时刻保持积极向上的态度.失败了,重来过;失去了,再争取别的。错过了,要分析,下次来,要把握;幼稚了,下次,成熟点。不要紧,会好的,哪怕到了极点,也不要放弃,相信一定可以挺过去。不要消极,会好的。曾经的错,过去了,总不能回味在过去。现在的,很好,累完了,很舒服。不要伤,总会有人在支撑你。
  9,不要轻易崇拜或者鄙视一个人
  人都有偶像,但请拥有你自己的个性.不要刻意去模仿一个人,因为你就是你,是唯一的,独一无二的,要有自信.也不要全盘否定一个人,每个人是有价值的,如果你不能理解他,也请学会接受.
  10,要有责任心.
  不管你曾经怎样,但请从现在开始做一个正直的人.男人要有责任心,无论是工作还是生活上,一个有责任心的人才能让别人有安全感,才能让别人觉得你是一个值得信赖的人.我们不要懦弱,但请不要伤害爱你的人和你爱的人,尤其是善良的女孩,因为这个世界善良的女孩不多了,即使不想拥有,但也请让她保持她美丽的心.
  11,男人的外貌并不重要.
  不要为自己的长相身高而过分担心,一个心地善良,为人正直的男人远比那些空有英俊相貌,挺拔身材但内心龌龊的男人要帅得多.如果有人以貌取人,请不要太在意,因为你不用去为一个低级趣味的人而难过.
  12,学会保护身体
  不要以为现在抽烟喝酒,熬夜通宵也没什么事.那是因为你的身体正处于你一生的黄金时段.30岁以后你就能明白力不从心这个词的意义了,身体是革命的本钱,没有好的身体什么也做不了,所以要尽量让自己过有规律的健康生活.
  13,别觉得一事无成.
  你现在还没有资格谈成功,当然如果你有千万资产的除外.一开始太固定的职业并不一定是好事,或许在不断的改行当中,你会学到更丰富的知识,而且可以挖掘出自己的潜能,找到最适合你的工作.
  14,请认真工作
  即使你现在的工作再怎么无聊再怎么低级,也请你认真去对待,要知道任何成功人士都是从最小的事做起,或许你现在学不到多么了不起的知识,但起码你要学会良好的工作态度和工作方法,这对以后很重要.
  15,请认真对待感情.
  不要羡慕那些换女人像换鞋一样的花花公子,逢场作戏的爱情只是让你浪费时间浪费精力,一个人最痛苦的不是找不到爱人,而是心中没有了爱,当你把我爱你3个字变成你最容易说的一句话时,那么你在爱情的世界里已经很难找到真正的幸福了.爱情没有公平,总有一个人比对方付出得多,即使没有结果,也别觉得不值,因为你的付出不光是为了她,也是为了你自己的爱,为爱付出是很可贵的,赞自己一下.
  16.请留一点童心
  在内心深处,哪怕只是一个很小的角落里,请保持一份童心,不是幼稚,但有的时候单纯一点会让你很快乐.所以不要太计较得失,生活本无完美.
  源于网络

让file_get_contents() 函数也做post

原来一直以为file_get_contents() 函数大概只能在请求一个url时做get操作,其实还有下面用法,可以让file_get_contents() 函数也做post:

 

 

注意:这里设置了使用post方法,却没有设置Content-Type: application/x-www-form-urlencoded ;因为PHP给自动添加了该http头,如果没有该http头,则server端的PHP不会将post数据解析到$_POST数组中。

 

arptable and routetable

arptable和routetable比较类似的是都是存在内存中的一个表格
arptable:  /proc/net/arp
routetable: /proc/net/route

下面对两个文件做简单的介绍:

[junjie2@ljj ~]$ cat /proc/net/arp
IP address       HW type     Flags       HW address            Mask     Device
10.218.19.91     0x1         0x0         00:00:00:00:00:00     *        eth0
10.218.19.1      0x1         0x2         00:1D:A1:A7:13:CC     *        eth0
10.218.19.23     0x1         0x0         00:00:00:00:00:00     *        eth0
10.218.19.172    0x1         0x2         00:11:43:47:25:FE     *        eth0
10.218.19.81     0x1         0x0         00:00:00:00:00:00     *        eth0
10.218.19.71     0x1         0x0         00:00:00:00:00:00     *        eth0

IP address : 这个就不说了
HW type : 硬件类型 ,0x1 代表以太网卡
Flags   : 0x0 表示未完成(imcomplete),看紧挨着的HW address发现硬件地址都是0,那是因为想找这台机器没有找到,所以Flags为0x0
HW address: 硬件地址了
Mask : IP地址的掩码
Device: 路由中对应的网卡

 

[junjie2@ljj ~]$ cat /proc/net/route
Iface   Destination     Gateway         Flags   RefCnt  Use     Metric  Mask            MTU     Window  IRTT                                                      
eth0    0013DA0A        00000000        0001    0       0       0       00FFFFFF        0       0       0                                                                              
eth0    0000FEA9        00000000        0001    0       0       0       0000FFFF        0       0       0                                                                              
eth0    00000000        0113DA0A        0003    0       0       0       00000000        0       0       0                                                                              
[junjie2@ljj ~]$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.218.19.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0
0.0.0.0         10.218.19.1     0.0.0.0         UG    0      0        0 eth0
[junjie2@ljj ~]$

       Ref    Number of references to this route. (Not used in the Linux kernel.)

       Use    Count  of  lookups  for the route.  Depending on the use of -F and -C this will be either route cache misses
              (-F) or hits (-C).

       Iface  Interface to which packets for this route will be sent.

风中的承诺

音频:http://www.whx.gov.cn/ForumImages/20071212134157540.mp3

视频:http://union.bokecc.com/flash/pocle/player.swf?siteid=BAE881EF590B10D9&vid=A5CCA179D6941DB8&autoStart=false

 

歌词:

昨夜的雨
惊醒我沉睡中的梦
迷惑的心
沾满着昨日的伤痛
冷冷的风
不再有往日的温柔
失去的爱
是否还能够再拥有
漫漫长路
谁能告诉我
究竟会有多少错
何处是我最终的居留
曾经在雨中对我说
今生今世相守
曾经在风中对我说
永远不离开我
多少缠绵编织成的梦
多少爱恨刻划的镜头
为何一切到了终究还是空

跟美女上床和次贷危机

有一天,一位其貌不扬的男士,带着一位十分艳丽的OL,来到Causeway Bay一家LV店。他为OL选了一价值6万5元的LV handbag。
  付款时,男士掏出支票本,十分潇洒地签了一张支票。店员有些为难,因为这对夫妇是第一次来店购物。
  男士看穿了店员的心思,十分冷静地对店员说: "我感觉到,您担心这是一张是空头支票,对吗?今天是周六,银行关门。我建议您把支票和handbag都留下。等到星期一支票兑现之后,再请你们把 handbag 送到这位小姐的府上。您看这样行不行?"
  店员放了下心来,欣然地接受了这个建议,并且大方的承诺,递送handbag的费用由该店承担,他本人将会亲自把这件事情给办妥。
  星期一,店员拿着支票去银行入账,支票果真是张空头支票!愤怒的店员打电话给那位顾客,客户对他说: "这没有什么要紧啊!你和我都没有损失。上星期六的晚上我已经同那个女孩上床了!哦,多谢您的合作。"
 
这个故事揭示了次贷危机的本质。人们在对未来收益充满良好预期的时候,对于可能加大风险缺乏防范意识。美女认为周一六万多LV就到家了,自然也就放松了警惕,认为ONS的投资是值得的,对于投入产出的预期是建立在一个具有巨大不确定风险的情况下的。而对未来收益预期的包装则是这些投资机构最擅长的事情。中国的股民大多跟这个美女一样,所以亏钱基本上是活该,没有这些人,股市赚谁的钱呢。而媒体和分析家们,往往在其中扮演了LV店员的配合角色。

密码复杂度检查代码

function CharMode(iN){
  if (
iN>=65 && iN <=90
//大写字母
  
return 2
;
  if (
iN>=97 && iN <=122
//小写
  
return 4
;
  else
  return 
1
//数字
}
//计算出当前密码当中一共有多少种模式
function bitTotal(num
){
  
modes=0
;
  for (
i=0;i<3;i
++){
    if (
num 1modes
++;
    
num>>>=1
;
  }
  return 
modes
;
 }
//checkStrong函数 返回密码的强度级别
function checkStrong(sPW
){
  
Modes=0
;
  for (
i=0;i<sPW.length;i
++){
    
//测试每一个字符的类别并统计一共有多少种模式.
    
Modes|=CharMode(sPW.charCodeAt(i
));
  }
  var 
btotal bitTotal(Modes
);
  if (
sPW.length >= 10btotal
++;
  switch(
btotal
) {
    case 
1
:
      return 
"<table width=’130′ class=’pswstrong’><tr><td bgcolor=’#FE707E’><strong>弱</strong></td><td><span style=’color:#666;’>中</span></td><td><span style=’color:#666;’>强</span></td></tr></table>"
;
      break;
    case 
2
:
      return 
"<table width=’130′ class=’pswstrong’><tr><td bgcolor=’#FCFA93′><span style=’color:#666;’>弱</span></td><td bgcolor=’#FCFA93′><strong>中</strong></td><td><span style=’color:#666;’>强</span></td></tr></table>"
;
      break;
    case 
3
:
      return 
"<table width=’130′ class=’pswstrong’><tr><td bgcolor=’#BDFEA6′><span style=’color:#666;’>弱</span></td><td bgcolor=’#BDFEA6′><span style=’color:#666;’>中</span></td><td bgcolor=’#BDFEA6′><strong>强</strong></td></tr></table>"
;
      break;
    default:
      return 
"<font color=’#33CC00′>强</font>"
;
  }
}
function 
ShowStrong(obj,oMsg,status
){
  var 
obj oo(obj
);
    if(
status==1
){
    
obj.innerHTML 
oMsg
  
}else{
    
obj.innerHTML 
""
  
}
}