1.批量替换文件中的内容:
sed -in-place -e 's/原内容/新内容/g' *
(from http://www.chedong.com/blog/archives/001201.html)
2. 正则匹配'(',')'要转义
sed -e 's/\([0-9]\)/\1/' *
sed -e 's#\([0-9]\)#\1#' *
3. tail -f -n 5 youfile.txt|grep '.'
youfile.txt
1
2
3
4
5
输出:
1
2
3
4
最后的5要等到youfile.txt变为:
1
2
3
4
5
6
时才会输出。(??)
4.pear和pecl区别:
Pear:是PHP的扩展代码包,所有的扩展均以PHP代码的形式出现,功能强大,安装简单,甚至可以改改就用。使用的时候,要在代码中进行Include才能够使用。
Pecl:是PHP的标准扩展,可以补充实际开发中所需的功能,所有的扩展都需要安装,在Windows下面以Dll的形式出现,在linux下面,需要单独进行编译,它的表现形式为根据PHP官方的标准用C语言写成,尽管源码开放但是一般人无法随意更改源码。
最直接的表述:Pear是PHP的上层扩展,Pecl是PHP的底层扩展。
(
http://www.phpx.com/happy/viewthread.php?tid=121022)
5.用php组装日期range
我们知道
range(0,9) => 0,1,2,3,4,5,6,7,8,9
但是如何组装日期的range呢?
来自
http://www.phpx.com/happy/viewthread.php?tid=119629的方法
<?php
$d0 = '2005-02-27';
$d1 = '2006-04-12';
$ar = range(strtotime($d0), strtotime($d1), 24*60*60);
$ar = array_map(create_function('$v', 'return date("Y-m-d", $v);'), $ar);
print_r($ar);
?>
6.Base64 编码
Base64 base64 = new Base64();
byte[] result2 = base64.encode(text.getBytes("utf-8"));
7.php fopen get 远程二进制文件
$file_name = "http://user:[email protected]/path/img.jpg";
//user:password要加上 否则会被拒绝。
$fp = fopen($file_name, "rb");
$file_content = stream_get_contents($fp);
fclose($fp);
8.JAVA交集
List list = new ArrayList();
List list2 = new ArrayList();
list.retainAll(list2);//list中的就是交集了.
9.php中的日期处理
如何通过得到2009-01-01的下一天:
$date = "2009-01-01";
$date_info = date_parse($date);
$time = mktime(0,0,0,$date_info["month"],$date_info["day"],$date_info["year"]);
$day_end = date('Y-m-d',strtotime('1 day',$time));
10.url encode
用urlencode 处理一些gbk编码的生僻汉字遇到一些问题,如下
$a = urlencode("奧運健兒諗灄")."\n";
输出%8AW%DF%5C%BD%A1%83%BA%D5%94%9E%97
依据手册说明"返回的字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数"
但是输出的串中出现了这样的东西%8AW,百分号后除了两位十六进制的数字外还有一个W。
这样的话在使用于url中时如果使用同样的汉字处理方式在参数处理页面接受后中文是乱码
先调用html_entity_decode格式化,再来ulendcode
11.计算数组所占字节数
<?
function arrayByteSize($array)
{
$re=0;
if(is_Array($array))
{
foreach($array as $v)
{
$re+=arrayByteSize($v);
}
}
else{
$re+=strlen($array);
}
return $re;
}
$arr = array("chmod777");
echo arrayByteSize($arr);
12.让php显示错误信息
在php.ini中把display_errors设置为On,
重启apache.
13.mysql 执行insert后没有报错,但是记录却没有插入进去,原因:
字段的命名和mysql内部变量可能有冲突,重命名下字段名,最好不要
太常见。
14.硬连接和软连接的比较及优势:
硬连接因为记录的是 inode,所以不怕改名,比如
ln /tmp/a /tmp/b
mv /tmp/a /tmp/othername
这时 /tmp/b 仍然可以访问,soft-link 就不行:sourc 的名字改变后,所有链接到这里的 soft-link 全部变为 broken。事实上,即使所有指向该 inode 的 hard-link 的文件名都变了,每一个仍然都可以访问。
15.查看硬连接的inode编号:
ls -il
3522689 -rw-r--r-- 2 root root 20 Feb 11 17:23 segments.gen
3522690 -rw-r--r-- 2 root root 208 Feb 11 17:23 segments_i
3522690为inode编号
16.bash 条件测试:
1)文件测试操作
-e 文件存在
-a 文件存在
这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用
-f file 是一个regular 文件(不是目录或者设备文件)
-s 文件长度不为0
-d 文件是个目录
-b 文件是个块设备(软盘,cdrom 等等)
-c 文件是个字符设备(键盘,modem,声卡等等)
-p 文件是个管道
-h 文件是个符号链接
-L 文件是个符号链接
-S 文件是个socket
-t 关联到一个终端设备的文件描述符
这个选项一般都用来检测是否在一个给定脚本中的stdin[-t0]或[-t1]是一个终端
-r 文件具有读权限(对于用户运行这个test)
-w 文件具有写权限(对于用户运行这个test)
-x 文件具有执行权限(对于用户运行这个test)
-g set-group-id(sgid)标志到文件或目录上
如果一个目录具有sgid 标志,那么一个被创建在这个目录里的文件,这个目录属于创建
这个目录的用户组,并不一定与创建这个文件的用户的组相同.对于workgroup 的目录
共享来说,这非常有用.见<<UNIX 环境高级编程中文版>>第58 页.
-u set-user-id(suid)标志到文件上
如果运行一个具有root 权限的文件,那么运行进程将取得root 权限,即使你是一个普通
用户.[1]这对于需要存取系统硬件的执行操作(比如pppd 和cdrecord)非常有用.如果
没有suid 标志的话,那么普通用户(没有root 权限)将无法运行这种程序.
见<<UNIX 环境高级编程中文版>>第58 页.
-rwsr-xr-t 1 root 178236 Oct 2 2000 /usr/sbin/pppd
对于设置了suid 的文件,在它的权限标志中有"s".
-k 设置粘贴位,见<<UNIX 环境高级编程中文版>>第65 页.
对于"sticky bit",save-text-mode 标志是一个文件权限的特殊类型.如果设置了这
个标志,那么这个文件将被保存在交换区,为了达到快速存取的目的.如果设置在目录
中,它将限制写权限.对于设置了sticky bit 位的文件或目录,权限标志中有"t".
drwxrwxrwt 7 root 1024 May 19 21:26 tmp/
如果一个用户并不时具有stick bit 位的目录的拥有者,但是具有写权限,那么用户只
能在这个目录下删除自己所拥有的文件.这将防止用户在一个公开的目录中不慎覆盖
或者删除别人的文件,比如/tmp(当然root 或者是目录的所有者可以随便删除或重命名
其中的文件).
-O 你是文件的所有者.
-G 文件的group-id 和你的相同.
-N 从文件最后被阅读到现在,是否被修改.
2)二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.
整数比较
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ],与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ $a == z* ]] # 如果$a 以"z"开头(模式匹配)那么将为true
2 [[ $a == "z*" ]] # 如果$a 等于z*(字符匹配),那么结果为true
3
4 [ $a == z* ] # File globbing 和word splitting 将会发生
5 [ "$a" == "z*" ] # 如果$a 等于z*(字符匹配),那么结果为true
一点解释,关于File globbing 是一种关于文件的速记法,比如"*.c"就是,再如~也是.
但是file globbing 并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
!= 不等于,如:if [ "$a" != "$b" ]
这个操作符将在[[]]结构中使用模式匹配.
< 小于,在ASCII 字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
注意:在[]结构中"<"需要被转义.
> 大于,在ASCII 字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
注意:在[]结构中">"需要被转义.
具体参考Example 26-11 来查看这个操作符应用的例子.
-z 字符串为"null".就是长度为0.
-n 字符串不为"null"
17.js 得到select控件的text
var index = document.getElementById("demo").selectedIndex;
var text = document.getElementById("demo").options[index].text;
18.组装JSON
<script type="text/javascript">
var a=50,b="xxx";
var arr="{id:"+a+",name:'"+b+"'}";
arr=eval('('+arr+')');//括号是重点
alert(arr.name);
</script>
19.匹配URL的正则
$pattern = "/http:\/\/[\w-]*(\.)?[\w-]+\.[\w\/?%&=]+/";
20.input 被disabled后无法发送数据
http://www.phpweblog.net/fuyongjie/archive/2008/09/08/5733.html