分页: 2/105 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]
Defraggler可能不熟悉,但对于电脑磁盘的碎片整理,Windows自带的磁盘整理程序一直都不是很完美。现在你也不用选择那些庞大又昂贵的专业磁盘整理程序,Defraggler 就是一款轻量级的磁盘碎片整理软件,由开发了著名的CCleaner 与 Recuva 的 Piriform 公司制作。它支持NTFS和FAT32文件系统,也可以运行在 Windows Vista 操作系统上。虽然容量不到 1MB,但是功能和效率却一点不差。它可以快速高效的整理某个磁盘、文件夹甚至一个文件。而且,这款精巧的软件是免费的!
Defraggler特点:
一、整理速度快;
二、整理效果佳;
三、支持目录和文件整理;(与 Wincontig 有异曲同工之妙)
四、体积小巧,资源占用少;(可以运行在最小配置的 PE 环境下)

Defraggler设置中文的方法
点击菜单Help-->About-->General-->在language处选择Chinese(simplified),还可整理完后自动关机。

Defraggler|Defraggler 2.09 官方版下载_ DownLoad Url:http://dl.pconline.com.cn/html_2/1/67/id=50103&pn=0.html
启动级别:init 0,1,2,3,4,5,6
这是个很久的知识点了,只是自己一直都迷迷糊糊的,今天在翻出来好好理解下。。
0:停机
1:单用户形式,只root进行维护
2:多用户,不能使用net file system
3:完全多用户
5:图形化
4:安全模式
6:重启

其实,可以通过查看/etc/rc.d/中的rc*.d的文件来对比理解。。阅读全文
本文出自 “静静的” 博客,谢绝转载!      写得好,当然得转。
先贴来源:http://lhf0616.blog.51cto.com/2920914/538453

(1)这一条登录多少次后就提示并自动结束会话:非常重要,在CentOS6.2中实践Ok,如下:
[root@station90 ssh]# cat /etc/ssh/sshd_config  | grep MaxAuth
MaxAuthTries 1 //远程用户通过ssh连接登录2次失败后自动结束会话
The server has disconnected with an error.  Server message reads:
A protocol error occurred. Too many authentication failures for root

(2)root只能从tty1和vc登陆。建议仅允许root从一个tty或vc登陆,如果需要更多设备登陆,使用su命令转换为root。
openssh应该禁止使用协议1,禁止root直接登录
/etc/ssh/sshd_config
Protocol 2
MaxAuthTries 1
PermitRootLogin no  //不允许root用户使用ssh登录
StrictModes yes
PermitEmptyPasswords no //不允许使用空密码登录
PrintLastLog yes

root不登录,其他用户登录时,添加密码,和用户时的具体操作方法:
useradd jackxiang
忘记了密码,得有root去修改它即可:
jackxiang@192.168.225.128:/root# su root
密码:
root@192.168.225.128:~# passwd jackxiang
更改用户 jackxiang 的密码 。
新的 密码:
service sshd restart

禁止某些用户使用ssh远程登录:
http://www.myhack58.com/Article/48/66/2011/30887.htm
vim /etc/pam.d/sshd

        在第一行加入 auth       required     pam_listfile.so item=user sense=deny file=/etc/sshdusers onerr=succeed,注意一定要在第一行,因为pam中执行顺序是上面优先

vim /etc/sshdusers

                    在文件中加入root    wp ,root 和wp是两个本地用户

service sshd restart

在另一个终端测试

[root@clone2 ~]# ssh clone1.rhel.com
root@clone1.rhel.com's password:
Permission denied, please try again.
root@clone1.rhel.com's password:
Permission denied, please try again.
root@clone1.rhel.com's password:
Permission denied (publickey,gssapi-with-mic,password).

[wp@clone2 ~]$ ssh clone1.rhel.com
wp@clone1.rhel.com's password:
Permission denied, please try again.
wp@clone1.rhel.com's password:
Permission denied, please try again.
wp@clone1.rhel.com's password:
Permission denied (publickey,gssapi-with-mic,password).
两个用户都无法使用ssh了。呵呵,目的达到了




(3)root@192.168.225.128:~#  cat /etc/login.defs | grep PASS | grep -v ^#
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7

PASS_MAX_DAYS   90 //口令最大使用日期90天
PASS_MIN_DAYS   0 //若设置为2,则设置密码2天后才可以再次更改密码,即密码至少要保留的天数
PASS_MIN_LEN    8 //口令最小长度8位
PASS_WARN_AGE   7 //口令过期前7天警告

(4)
umask至少为027,最好是077
[root@station60 ~]# grep umask /etc/bashrc
        umask 077
        umask 077
[root@station60 ~]# . /etc/bashrc
[root@station60 ~]# umask
0077
[root@station60 ~]# touch 3.txt
[root@station60 ~]# ll 3.txt
-rw------- 1 root root 0 Apr  8 00:11 3.txt

(5)
检查系统是否最小化安装,启动的运行级别为3

查看/etc/pam.d/su是否包含以下两行
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth            required        pam_wheel.so use_uid //上面的注释已经说的很清楚了,没有注释下面这一行,那么要su到别的用户就必须在wheel组中


(6)关闭telnet服务,redhat默认是关闭telnet服务的
[root@station90 ssh]# netstat -tnlp | grep :23
[root@station90 ssh]# cd /etc/xinetd.d/
[root@station90 xinetd.d]# ls telnet*
ls: telnet*: 没有那个文件或目录
如果有telnet服务,则把该目录下的telnet文件改为disable=yes
[root@station90 xinetd.d]# tail -n 2 /etc/xinetd.d/krb5-telnet | head -n 1
        disable         = yes
[root@station90 xinetd.d]# service xinetd restart
停止 xinetd:                                              [确定]
启动 xinetd:                                              [确定]

===================================================================================
上面是我从Url:http://lhf0616.blog.51cto.com/2920914/538453 总结的,我贴上原文:
[root@station90 桌面]# awk  -F : '($2=="") {print $1}' /etc/shadow //检查空口令帐号
zhang3
[root@station90 桌面]# tail -n 1 /etc/shadow | head -n 1  //-F :是以冒号作为分隔符,($2==""表示第1个和第2个冒号之间是空的,即空口令帐号,{print $1}打印出用户名
zhang3::15071:0:99999:7:::
检查帐号
[root@station90 桌面]# pwck
用户 adm:目录 /var/adm 不存在
用户 news:目录 /etc/news 不存在
用户 uucp:目录 /var/spool/uucp 不存在
用户 gopher:目录 /var/gopher 不存在
用户 pcap:目录 /var/arpwatch 不存在
用户 avahi-autoipd:目录 /var/lib/avahi-autoipd 不存在
用户 oprofile:目录 /home/oprofile 不存在
pwck:无改变


口令复杂度及登录失败策略
应启用登录失败处理功能,可采取结束会话,限制非法登录次数和自动退出措施,口令应有复杂度要求并定期更换
要求强制记住3个密码历史
口令至少包含1个数字,字母和其他特殊字符(如:#,@,!,$等);
5次远程登录失败自动结束会话
[root@station90 桌面]# cat /etc/login.defs | grep PASS | grep -v ^#
PASS_MAX_DAYS   90 //口令最大使用日期90天
PASS_MIN_DAYS   0 //若设置为2,则设置密码2天后才可以再次更改密码,即密码至少要保留的天数
PASS_MIN_LEN    8 //口令最小长度8位
PASS_WARN_AGE   7 //口令过期前7天警告

[root@station90 pam.d]# cat /etc/pam.d/system-auth | tail -n 2 && grep ^#password /etc/pam.d/system-auth
password    required      pam_cracklib.so difok=3 minlen=8 dcredit=-1,lcredit=-1 ocredit=-1 maxrepeat=3
password    required      pam_unix.so use_authtok nullok md5
#password    requisite     pam_cracklib.so try_first_pass retry=3 //注释这一行后,无法修改密码
[root@station90 pam.d]# passwd
Changing password for user root.
passwd: Authentication information cannot be recovered

修改登录失败策略
[root@station90 ssh]# cat /etc/ssh/sshd_config  | grep MaxAuth
MaxAuthTries 1 //远程用户通过ssh连接登录2次失败后自动结束会话
[root@station90 ssh]# ssh 192.168.0.90
root@192.168.0.90's password:
Permission denied, please try again.
root@192.168.0.90's password:
Received disconnect from 192.168.0.90: 2: Too many authentication failures for root

关闭telnet服务,redhat默认是关闭telnet服务的
[root@station90 ssh]# netstat -tnlp | grep :23
[root@station90 ssh]# cd /etc/xinetd.d/
[root@station90 xinetd.d]# ls telnet*
ls: telnet*: 没有那个文件或目录
如果有telnet服务,则把该目录下的telnet文件改为disable=yes

[root@station90 xinetd.d]# tail -n 2 /etc/xinetd.d/krb5-telnet | head -n 1
        disable         = yes
[root@station90 xinetd.d]# service xinetd restart
停止 xinetd:                                              [确定]
启动 xinetd:                                              [确定]
[root@station90 xinetd.d]# chkconfig xinetd on

openssh应该禁止使用协议1,禁止root直接登录
/etc/ssh/sshd_config
Protocol 2
MaxAuthTries 1
PermitRootLogin no  //不允许root用户使用ssh登录
StrictModes yes
PermitEmptyPasswords no //不允许使用空密码登录
PrintLastLog yes

[root@station60 init.d]# pwd
/etc/rc.d/init.d
[root@station60 init.d]# chmod -R 750 ./ 也可以直接chmod -R /etc/init.d/*
[root@station60 init.d]# ll | head -n 2
total 644
-rwxr-x--- 1 root root  1566 Jun  8  2009 acpid

umask至少为027,最好是077
[root@station60 ~]# grep umask /etc/bashrc
        umask 077
        umask 077
[root@station60 ~]# . /etc/bashrc
[root@station60 ~]# umask
0077
[root@station60 ~]# touch 3.txt
[root@station60 ~]# ll 3.txt
-rw------- 1 root root 0 Apr  8 00:11 3.txt

检查系统是否最小化安装,启动的运行级别为3

查看/etc/pam.d/su是否包含以下两行
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth            required        pam_wheel.so use_uid //上面的注释已经说的很清楚了,没有注释下面这一行,那么要su到别的用户就必须在wheel组中
[root@station60 pam.d]# gpasswd  -a oracle wheel
Adding user oracle to group wheel
[root@station60 pam.d]# id oracle
uid=500(oracle) gid=500(oracle) groups=500(oracle),0(root),10(wheel) context=system_u:system_r:unconfined_t
[root@station60 pam.d]# id zhang3
uid=501(zhang3) gid=501(zhang3) groups=501(zhang3) context=system_u:system_r:unconfined_t
[root@station60 pam.d]# su - zhang3
[zhang3@station60 ~]$ su - root //以下密码输入都是正确的
Password:
su: incorrect password
[zhang3@station60 ~]$ su - oracle
Password:
su: incorrect password
[zhang3@station60 ~]$ su - oracle
Password:
su: incorrect password
[zhang3@station60 ~]$ su - oracle
Password:
su: incorrect password
[zhang3@station60 ~]$
[oracle@station60 ~]$  su - oracle
Password:
[oracle@station60 ~]$ su - root
Password:
[root@station60 ~]#

操作指南    1.本地登录用户参考配置操作
#cd /etc/profile.d
执行
#vi autologout.sh
加入如下内容:
TMOUT=600
readonly TMOUT
export TMOUT
保存退出,系统将在用户闲置10分钟后自动注销。

2.远程登录用户参考配置操作
#vi /etc/ssh/sshd_config
将以下内容设置为:
ClientAliveInterval 600
ClientAliveCountMax 0
以上表示10分钟闲置后,自动注销并结束会话。
检测方法    1、判定条件
查看帐号超时是否自动注销;
2、检测操作
cat  /etc/ssh/sshd_config
检查其中两个参数设置:
ClientAliveInterval 600
ClientAliveCountMax 0

(2)执行:awk -F: '($3 == 0) { print $1 }' /etc/passwd
返回值包括“root”以外的条目,说明有其他超级用户,低于安全要求。
2、检测操作
执行:awk -F: '($3 == 0) { print $1 }' /etc/passwd
返回值包括“root”以外的条目,说明有其他超级用户;

/etc/securetty 文件设置root登陆的tty和vc(虚拟控制台)设备。/etc/securetty 文件被login程序读 (通常 /bin/login)。它的格式是允许的tty和vc列表,注释掉或不出现的设备,不允许root登陆。
vc/1
#vc/2
#vc/3
#vc/4
#vc/5
#vc/6
#vc/7
#vc/8
#vc/9
#vc/10
#vc/11
tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8
#tty9
#tty10
#tty11
root只能从tty1和vc登陆。建议仅允许root从一个tty或vc登陆,如果需要更多设备登陆,使用su命令转换为root。

#!/bin/sh
#
export file=/root/Desktop/
我家笔记本  打开无线网络显示windows无法配置此无线连接 但是网是连接着的(因为之前有设定) 不知道什么时候开无线网络就显示了windows无法配置此无线连接:
1.查看无线网卡的驱动是否安装正确,查看方法:右键“我的电脑” 单击 “属性” -> 硬件 -> 设备管理器 -> 网络适配器 ->  找到无线网卡,如果驱动不正确,一般会有黄色问号提示,这个时候就需要你找到原配光盘来重新驱动。
2.无线网卡没有打开,多数笔记本的无线网卡都会有一个物理开关,设置在笔记本后面或侧面,找到后确认打开,“on”为开,“off”为关。那有些型号的笔记本这个时候还有一个组合键开关操作。如联想E600,还需要功能键(Fn)+F4,来进行网卡的开关。打开后,笔记本会有亮灯显示。
3.如果这个时候,仍然 “windows无法配置此无线连接”,那么就可以确定 wzc服务没有启动,方法:“开始”菜单 -> 控制面板 -> 管理工具 -> 服务,打开后找到 Wireless Zero Configuration 这项服务,双击进入,确认该服务是否启动,并且将服务启动方式改为自动,这样以后重启机器时,该服务就会自动启动了。

问题出现在第三步,把这个 Wireless Zero Configuration 这项服务给关闭掉了,打开后就Ok了。
最近两天,每次发表日志后,经过约半分钟,提示这样:

Bo-Blog Database System Tips: MySQL Query Error

Time: 2008-3-6 2:39am
Script:

SQL: DELETE FROM `***blogs` WHERE `blogid`=-1
Error: MySQL server has gone away
Errno.: 2006



大概是前两天就开始的,每次都这样,要返回,继续点确定,反复多次,才有可能发布出去

或者点保存为草稿,再发布,不过保存为草稿也不是每次都成功,有时也显示这个错误

要怎么修复啊,出什么问题了?查来查去,有人说是因为google的插件,于是关闭插件:
pingservce (已激活)
Ping Service for Bo-blog

参考:http://www.9enjoy.com/page/1/53/
做一个实现自动登录的脚本 搜索资料后 很多人推荐使用expect命令
其中涉及到spawn
m_jackxiang@MNET-SZ-24*:~/bin> spawn ssh -p 36000 webdev@172.1*.**.***
bash: spawn: command not found
为什么我的linux机器找不到 spawn命令?
spawn是expect的算一个内建命令, 你当然man不到.
man expect|less -p spawn
这个 PNotes 相当好,找了好久,试了 N 个,终于找到个比较满意的了。

我的要求主要就 2 点,有快捷键、带管理(搜索)。我的用途基本上就和纸质便签一样,随时记写电话号码等等的,所以速度要快,要有快捷键才好用,有些信息可能过了一段时间还要用到,所以要有管理功能,最好有搜索。

PortableApps 提供的下载地址是 3.5 版的,没搜索,我装了以后用着感觉不错,但是有点小失望,后来到官方网站上看有 4.0 版的,下来一看,加了搜索功能,简直太棒了。

DownLoad:http://pnotes.sourceforge.net/


但是,我发现适合自己的还是uniqueruan建议和推荐使用的:Stickies(桌面便签) ,在哪儿才能下载呢?

这个是uniqueruan用的Stickies(桌面便签) V7.1b 简体中文绿色免费版 V7.1b:
http://www.dxysoft.com/soft/html/11535.html

这个是我发现的中文的Sticker桌面便签 V2.4 绿色版,还有不错的颜色和中文区分:
http://www.dxysoft.com/soft/html/22097.html



Zorin OS为替代Win而设计,Zorin是一个专为Windows用户提供的一个系统。这个版本的特点是基于Unity外壳的Ubuntu的GNOME2.X经典的环境。Zorin OS – 长得最像 Win7 的 Linux,Zorin OS 是 Linux 界的一朵奇葩,发行版基于 Ubuntu 尽可能模仿 Windows 7 界面,开始菜单任务栏什么的基本一模一样。系统自带了常用办公娱乐上网应用,还配备了 WINE,尽可能兼容一些 Windows 程序,如果你有兴趣且会折腾不妨一试。有免费版本下载,还提供各种专业方向(教育、商业、多媒体)的收费版本可供购买 DVD。
安装:http://tech.hexun.com/2011-06-13/130456262.html
Nemo Documents 是款文件组织管理工具(文档管理器),不是街道大妈胜似大妈,除了按类型、时间分类外,还可以为每个文件添加标签,为重要文件加星。
详情:http://www.appinn.com/nemo-documents/
网站服务器是一个在 Android 平台上搭建 Web 环境的小工具。

这坑爹名字……很不好介绍

就两个按钮,启动关闭。

然后访问网址就可以了。

需要 WIFI ,否则不干活。

网页文件放在 /sdcard/www/ 下,就是你 SD 卡下的 www 文件夹。

其实市场上类似应用很多,介绍这个是因为简单,而且是中文。没任何技术门槛,大家都可以用。

然后一个关键问题:究竟有什么用?

很深奥啊?但是我不说肯定有人问。

你可以放一些静态页面的小工具在里面,方便使用。比如我,把爱写字(详情见这里专注写作 – 方便易用的专心写作工具[Chrome])的源码扔进去了,完美运行,欧耶~~

DownLoad:http://g.appinn.com/um
    之前有过一款文件搜索神器 Everything!因为它的瞬间搜索速度实在让人震惊,相信很多人都对它爱不释手。但很可惜它只能搜索文件名而不能搜索文档的内容。譬如说想要搜索一份内容里带有“工资表”字样而不知道文件名的Word文档,那么就只能找外援了。        DocFetcher 是一个免费开源且跨平台的桌面文档内容搜索引擎,它能遍历你所有的文件文档内容,然后方便地对自己的电脑进行全文搜索。搜索自己电脑本地的文档内容就像使用Google或百度一样简单方便,这意味着你不必再去记忆文件名了,只要输入文件内容关键字即可搜索……
DocFetcher 桌面文档全文搜索引擎简介:         DocFetcher 跟 Google Desktop 和 百度硬盘搜索 的原理一样,都是需要事先对硬盘上的文件内容进行索引。然而,它比 Google Desktop 好的地方就是可以由用户指定索引的文件夹和文件格式。由于 Google Desktop 和 百度硬盘搜索 等进行全硬盘的全文索引实在太太太太太慢了,而且很久都没更新了 (估计都被官方抛弃了)。DocFetcher 虽然速度上比它们没有多少优势,但却可以把目录设置到你最常存放文档的文件夹而不是索引整个磁盘,当然这样就相当于变相提高索引速度了。DocFetcher 另外一个优势是索引数据比较小,不像 Google Desktop 那样,扫描完之后索引文件很容易就上几个G了。
  使用方法:        启动软件后,在右下角的“Search Scope”区域里右键,选择“Create Index”来选择要索引的文件夹,按“Run”确定并开始索引(文件数较多的话可能要等一段时间),当索引完成之后就可以进行搜索了!
        DocFetcher 有几个选项可以让你更准确地搜索想要的结果,例如左上角可以指定最小和最大文件的大小,筛选文件类型等。搜索结果会在同一界面上显示名称、大小、文件名、类型、路径、作者、修改日期等信息。左键点击任意文件将在预览区加载文件的内容。
支持搜索的文档格式:        DocFetcher 支持搜索的文档格式非常丰富,如:网页(html),文本文档 (txt),PDF,chm,rtf,Office文档 (doc、xls、ppt、docx、 xlsx、 pptx),OpenOffice (odt、ods、odg、odp),AbiWord (abw、abw.gz、zabw),Visio (vsd),svg 等等,基本上流行的文档都能被索引和搜索,应该能满足绝大部分人的需求了。
免费、跨平台、开源:        DocFetcher 拥有 Windows 和 Linux 的版本,而且源代码也是开放的,你可以免费使用,甚至还能通过源代码学习它的技术。由于它使用 Java 开发,所以你的系统需要先安装好 Java 运行库才能正常使用。
写在后面:        DocFetcher 的界面和功能做的算是中规中矩,支持格式还算广泛,重要的是它支持 Unicode,也就是说能完美支持中文 (简体与繁体) 搜索了!当然,大多数记得文件名的时候,神器 Everything 已经能满足文件搜索的需求了,只是偶尔需要通过文档文件内容进行搜索时,或者工作需要经常要和大量文档打交道的朋友,我推荐大家用 DocFetcher 作为一个补充吧,它同样不会让你失望的。
官网下载:http://sourceforge.net/projects/docfetcher/
介绍来自:http://www.appinn.com/docfetcher/
第二、无论面试的是什么职位,基础知识很重要。所有的高深技术,都要有牢固的基础知识做根基。
阅读全文
Jquery 操作添加缓存数据,实践如下,主要是下面这个缓存数据的设置和获取有点意思,特做记录:
阅读全文
新注意问题,将sprintf这个写在foreach时拼接URl时,要注意,不能直接写成:
1.sprintf错误赋值的写法(不能修改下面这个$getURlStr),如下:


2.而应该写成,如下,sprintf的值应该重新赋值给一个新的变量:


------------------------------------------------------------
接着讲:PHP的sprintf()函数用法

主要是对:在 0 后面的是 1 这个 1 是规定,小数点前面的数字占位要有1位以上。
例子,使用范例


这个 %01.2f 是什么意思呢?
首先 这个 % 符号是开始的意思,他写在最前面表示指定格式要开始了。 也就是 "起始字符", 直到出现 "转换字符" 为止,就算格式终止。
主要是想了解这一句:

如果把 1 改成 2 如果 $money 的值为 1.23 ,则 $formatted 的值将为 01.23
因为,在小数点前面的数字只占了1位,按照上面所规定的格式,小数点前数字应该占2位,现在只有1位,所以,用0来填满。
到目前,在 %01 后面的 .2 (点2) 就很好理解了,它的意思是,规定,小数点后的数字,必需占2位. 如果这时候,$money 的值为 1.234,则 $formatted 的值将为 1.23。
为什么 4 不见了呢? 因为,在小数点后面 按照上面的规定,必需且仅能占2位。 可是 $money 的值中,小数点占了3位,所以,4 被去掉了,只剩下 23。
最后,以 f "转换字符" 结尾,其他转换字符请自行参考上面的转换字符列表。

关于对齐
如果在 % 起始符号后面 加上 - (负号) 则,将会把数字以向右对齐的方式进行处理。

这时候,$formatted 将不会再是 01.40 而是 1.400

阅读全文
主要是表格背景,字体交替等在smarty中的运用:

阅读全文
一.最小化释放内存。在地址栏输入 about:config,然后新建一个名为 config.trim_on_minimize,并设定值为 true,重新启动 Firefox,这样当 Firefox 最小化时就会释放内存占用。(很有效)

为 Firefox 分配指定大小的内存缓存。这招我之前没实践过,正好试试。方法很简单,在地址栏输入 about:config,利用过滤器找到 browser.cache.memory.enable,更改它的值为 true;新建一个整数值,名为 browser.cache.memory.capacity,按照如下方案设定其值:

256M 内存=> 4096
512M 内存 => 8192
1G 内存=> 16384
From:http://blog.istef.info/2007/04/17/reduce-the-memory-usage-on-firefox/

二.减少内存泄露
使用Firefox的同学可能已经发现:Firefox占用的内存会越来越多,刚启动的时候几十M,过了半个小时,会飙升至200M甚至更多!这就是Firefox的内存泄露问题。
如果觉得限制Firefox内存会影响性能的话,推荐使用foxboost这个小工具来减少内存泄露。在文章结尾下载foxboost.zip,解压后,运行foxBoost.exe即可,foxBoost安静的在后台运行,关闭时右击托盘图标,close即可。它可以有效减少Firefox的内存泄漏问题,而不是限制内存使用。
From:http://www.x-berry.com/firefox-memory   减少内存泄露:foxboost-0.0.1.19 :
http://dl.commentcamarche.net/en.kioskea.net/download/files/foxboost-0.0.1.19.zip
PHP百分号转小数:

php 小数转换百分数函数:


阅读全文
在对某个目录进行压缩的时候,有时候想排除掉某个目录,例如:

如果123目录下有3个子目录,aa、bb、cc。

我现在想只对aa和bb目录打包压缩,命令如下:
tar -zcvf 123.tar.gz --exclude=cc 123

多个文件 用多个 –exclude=

解压的时候直接用
tar zxvf 123.tar.gz
实践如下:
Editplus列选择和Word-wrap功能是相冲突的,如果选择了Word-wrap功能,说白了就是长度太长时的换行功能,就不能有alt+c的功能,否则就可以有,在右键上也得到了体现。

右键菜单-》column select然后鼠标拖动,或者alt+c用键盘扩展选择。
注意:使用这个功能时,不能使用Word-wrap功能。
想通过.pac文件用PHP的CURL实现代理可以吗?cURL的FAQ上明确提到这点,是不可能的,呵呵,来自:http://curl.haxx.se/docs/faq.html#Does_curl_support_Javascript_or
-----------------------------------------------
Many web pages do magic stuff using embedded Javascript. Curl and libcurl have no built-in support for that, so it will be treated just like any other contents.

.pac files are a netscape invention and are sometimes used by organizations to allow them to differentiate which proxies to use. The .pac contents is just a Javascript program that gets invoked by the browser and that returns the name of the proxy to connect to. Since curl doesn't support Javascript, it can't support .pac proxy configuration either.

Some workarounds usually suggested to overcome this Javascript dependency:

- Depending on the Javascript complexity, write up a script that
translates it to another language and execute that.

- Read the Javascript code and rewrite the same logic in another language.

- Implement a Javascript interpreter, people have successfully used the
Mozilla Javascript engine in the past.

- Ask your admins to stop this, for a static proxy setup or similar.

。。。
Tags: ,

里面存放的是负载均衡的服务器集群

通过如下的方式设置一组服务器


在upstream里面 ip_hash
这样系统就会按照 ip地址进行hash映射到某个固定的服务器上,如果不使用这个选项,那么很有可能就是
某个服务器上没有那个session而导致错误。


通过如上的设置权值及相应的时间,既可以从日志当中显示如下的论询服务器的特点

在http


通过不断的刷新日志,发现 实际上nginx写日志的过程是集中式填写的,当大量的访问量出现的时候,他会先处理,等处理完之后再写.

PHP的Smarty去配置server实现思考:


经PHP的smarty翻译后如下:
server 1.1 weight=1 max_fails fail_timeout=30s;
server 1.2 weight=1 max_fails fail_timeout=30s;
localip = 72.46.128.82
PHP 5.4.0 正式版发布了,该版本包含大量的新特性,同时也修复了很多的 bug ,其中新特性有 traits、一些数组语法的提升、内建的 Web 服务器、性能提升等等,想去请看 changelog

官方发行说明:http://php.net/releases/5_4_0.php
5.3 到 5.4 的移植指南:http://php.net/migration54
下载地址:http://php.net/downloads.php#v5.4.0

来自:http://www.oschina.net/news/26249/php-5-4-0-final
新特性:http://www.oschina.net/question/54100_33123

今天试装了一下这个最新的版本,PHP的ea加速有问题:
lroot@192.168.225.128:~/software/eaccelerator-0.9.6.1# make
make: Warning: File `Makefile' has modification time 2.7e+04 s in the future

Build complete.
Don't forget to run 'make test'.

make: 警告:检测到时钟错误。您的创建可能是不完整的。
2)APC加速:
文件上传进度反馈, 这个需求在当前是越来越普遍, 比如大附件邮件. 在PHP5.4以前, 我们可以通过APC提供的功能来实现. 或者使用PECL扩展uploadprogress来实现.

虽然说, 它们能很好的解决现在的问题, 但是也有很明显的不足:

1. 他们都需要额外安装(我们并没有打算把APC加入PHP5.4)
。。。来自:http://www.laruence.com/2011/10/10/2217.html
无大文件上传和进度需求,先安一下试试:
root@192.168.225.128:~/software/APC-3.1.9# phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
config.m4:180: warning: AC_CACHE_VAL(PHP_APC_GCC_ATOMICS, ...): suspicious cache-id, must contain _cv_ to be cached
../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from...

root@192.168.225.128:~/software/APC-3.1.9# make
make: *** 没有指明目标并且找不到 makefile。 停止

3)Memcache Client扩展,安装成功,但有问题:
root@192.168.225.128:~/software/memcache-2.2.6# ls /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
问题:
root@192.168.225.128:~/software/memcache-2.2.6# php -m
PHP Warning:  PHP Startup: Unable to load dynamic library ' /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so' -  /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so: cannot open shared object file: No such file or directory in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library ' /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so' -  /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so: cannot open shared object file: No such file or directory in Unknown on line 0

其他扩展,还没有试,我估计也有很多这样那样的问题,为此,我估计这个PHP5.4.0应该是一个过渡版本,还有很多东东,不光是它本身,还有周边配合主件的完善,这还是需要一短时间的。So,建议大家还是用这个:PHP5.3.10吧,毕竟生产环境不是实验场所。
   本文,摘写并加工自杜洋老师的音频节目:
   放下,重识,运用,自我感悟,自我思考,自我风格,创新思维,真正的授人以渔,是一种思维方式,是一种尝试,没有系统,书店里只教技术,没有创新,也是市场的空白,前人很难把这些东西归纳,在商业管理,成功学里也有讲创新,但是理论上,没有聚焦,就好像某个技术,没有应用,这个应用就是针对创新具象的应用,
   不能单单的说技术,也不能空的说概念,得结合实际,创新是对现有结构有设计加以改进,是个单片机,激光技术,某个工厂的造船技术等。

放下:放下现有思维方式,有点像洗脑,只要让你接受一种观念,就叫洗脑。具有强制性,无选择性,你没有别的思维去考虑问题,没有从多个角度去考虑,你可以选择,按各种方式去选择,你有没有新的思路去解释一个技术物件?怎么去学,大部分我们接触的知识都是单向的,看书,看完后会所有功能,你会操作,但不一定花样多,人人都会用笔,但能写出好字的较少,颠倒概念,倒掉传统,这就是放下,怎么放下?是忘掉所学么?不现实。放下,也就是多一些角度,多一些思维方式干同一件事,不是倒掉,而是注入新水,溢出一部分,从多角度去考虑问题,多角度本身就是一个思想工具,你可能就不会固执了,不会切换角度和立场,就是没有放下,为什么要倒掉,赤壁里面有一个片段,满了满了。。。(略) 创新本是一种紧缺,俏丽的资源,这是一种能力。

重识:重新倒水,因放下后,不知道何去何从后,你空了,导入创新思维的水,一种行为习惯,它是一种理性思维,没有主见,给新的主见,人是有天赋的,但这个创新思维是可以学习的。一大拿因被打下山谷,不段潜移默化,不段发现,感悟,此侠客被逼也好,忍辱负重也罢,他愿意思考,思考可是实实在在的是一个工具。有一部分人,有缘遇到好的指导的人,愿意思考,愿意学,努力去完成这个转变。有思想有什么用?不能变成一个设计,一个很虚无的东西,那就是下面的运用了。

运用:转变思维,用思想这个工具,改变思想本身,用思思(是工具?),来改变其本身这个工具(有点像练习葵花宝典:欲练此功,必先自),放下和重识之后,把我们学过的东西用在我们的实例,通过实例,弄明白设计和应用,在程序的编写方法,功能设计,外观UI设计,面向客户群的营销的分析(辅)。

做一个创新思维的清道夫。。。EOF
163为它的游戏用户推出了动态口令卡。售价才10元。这让我非常的诧异。首先,我觉得这几乎是无懈可击的密保技术。其次,RSA的 SecurID卡在国内在几百RMB一个。而163的这东西,实在是便宜……

RSA 令牌 SID700 RSA SecurID

以前一直对这东西的原理很好奇。今天翻了些文档,略微整理如下:

1、密码:
登陆密码=f(静态密码,动态密码)。
静态密码就是用户自己设置的一个密码。
动态密码是通过卡动态生成的密码。
f是一个简单函数。例如不进位的加法、字符串拼接。
用户的静态密码最好是不要通过电脑键盘输入不通过网络传输的,所以很不推荐采用字符串拼接的方式。

2、构成
一个8位的处理器,一个时钟,一个LCD显示屏,一块电池。可能还会有一个键盘。
外壳的设计目标:一旦打开外壳,那么立即清空内存数据。
内部的设计目标:存储一个种子文件。然后按文件中的数据和当前时间拼起来进行AES,然后hash成6-8位的数字,显示在LCD上。

如果有键盘,那么用户可以通过键盘输入一串数字(用户的静态密码)。卡把这串数字(静态密码)与卡实际生成的数字(动态密码)用一种公开的算法(前面所说的那个f)进行组合,然后显示出来。通常采用的是不进位的加法。因此这个部件不是我们所需要关心的部分。

理论上来讲,如果知道种子、如果知道时间、如果知道生成器内部所采用的算法,那么我们就可以自行的算出这个动态密码。既然RSA公司敢发布软件版的生成器,那么就意味着它不怕这个算法被知道。事实上这个算法被hacker们公开已经是10年前的事情了。一个俄国hacker在发布自己的软件模拟器后留下这样一段话:
“RSA公司的伙计们:
如果你需要人帮助你设计安全的加密算法和协议,告诉我们,我们将会帮助你做出来。俄罗斯人并不都是熊。我们的国际象棋比你们下的好,记住!”

但是难点在于从卡中取走种子文件。就目前而言,是不可能通过它产生的随机序列反推回去得到它的种子文件的。

在网上看到了另一种类似方案:
1、用户输入一个用户名,发送给服务器
2、服务器返回一个随机数,记做C
3、用户使用自己的密码unlock动态口令卡
4、用户输入C。动态口令卡计算f(C,time,seed),然后显示出来
5、用户把口令卡的结果发送给服务器6
6、用户锁住口令卡

将DKEY动态密码结合PAM认证方案,在PAM静态密码认证基础之上,增加一层宁盾动态密码(该密码是由硬件令牌产生,每隔60秒变化一次,密码一次使用有效)认证,用以提升Linux/Unix服务器安全。
网址:http://ndkey.com/zh/dkey_for_linux.html
Linux Pam认证:http://www.chineselinuxuniversity.net/articles/35383.shtml
     一直以来,google android手机老是出现google talk身份验证失败,然后就是提示声音,这样道也习惯了,但偶尔还会收到在google上注册的gmail邮箱收到的邮件,但99%的时间都是身份验证失败,我估计是国内把那个域名或者System\etc\hosts文件的IP给屏蔽了,导致连接不上这个服务器,或者给防火墙堵了,不用也罢,但不想让它这样的骚扰,于是想卸载它,手机应用程序找不到google talk这个程序,有一次直接弄到root给相关服务卸载了,但手机开机挂了,返回去刷机,又给装回来了,这Google明明是一件好事,但这样整出个骚扰用户了,老是这么身份验证失败,我们也就用个google android玩玩,没有必要去细节深入其中的道理,我于是在网上找到这么一段:
./plugin/seopack/firstheader.php:       $fp = @fopen('sitemap.xml', 'w+') or die('没有建立文件或者写入权限,因此保存文件失败.请设置好权限再尝试.');


grep -r "没有建立文件或者写入权限,因此保存文件失败.请设置好权限再尝试." ./
./plugin/seopack/firstheader.php:       $fp = @fopen('sitemap.xml', 'w+') or die('没有建立文件或者写入权限,因此保存文件失败.请设置好权限再尝试.');
vi ./plugin/seopack/firstheader.php

查看刚迁移过这个目录下的这个文件位置:
jackxiang@72.46.128.82:~/public_html# find . -name "sitemap.xml"
./sitemap.xml
发现自己的这个突然没有了,于是给touch一个,如下:

。。。
我在想怎么会给出现这个问题呢?我有时间问一下bob。
   最近的一个项目需要PHP与SVN交互,最先想到的解决方案是用PHP的SVN扩展,搜了已经有PHP的SVN扩展,这两天也去http:/pecl.php.net/package/svn 上面下载了SVN扩展的源码.【备注:比如我看到php的subversion扩展是有的, 不过手册里写的却是试用阶段. 应该不如python的成熟. 何况...我觉得这种事情确实应该让python干, 就像web的事情应该让php干一样.http:/blog.csdn.net/akara/article/details/5566524】

为PHP增加SVN扩展:
http:/www.swordair.com/blog/2010/01/85


Installing shared extensions:     /usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/ successed
至此,终于通过编译,并在完成的最后提示在php.ini中增加一行:

版本比较差异,这样导出差异文件,后覆盖线上即可:
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di

svn diff -r 版本号1:版本号2  工作拷贝文件地址 >  保存差异文件
例:
svn diff -r PREV:COMMITTED  ./project/trunk/helloworld.c  > patch.c
写一个脚本测试一下,成功。
----------------------------------------------------------------------------------------------------
svn diff 比较两个目录:
svn diff --summarize http://rep_url/tags/proj1_090214 http://rep_url/trunk/proj1 >diff.txt
这个命令比较了 proj1_090214 和 proj1 的差异,并将差异信息输出到文件 diff.txt
summarize   选项的含义是只显示结果的概要,不显示文件的具体差异。
---------------------------------------------------------------------------------------------------
这样也成:
svn diff -r 3797:3788 --summarize https://tc-svn.XXXX.com/web/CCCC/web_aXc_proj/trunk  








下面是给svn设置用户名密码来访问,特别是ssl这块否则在终端是可以的,但是在apache加载后会报错:


通过svn list 导出该目录下所有的文件。
svn list -R  http:/192.168.1.11/svn/reponame/J2EE11 | wc -l

http:/192.168.1.11/svn 是 svn server 的root  /reponame 是库 /J2EE11 是路径

这样会包括 目录

过滤目录
svn list -R  svn_server_addr/svnrepo/folder  | grep -v \/$ | wc -l

请在 linux 下运行 win 平台可以装cygwin .
获取目录的函数实践:

查询版本下的注释:

Please not that using svn_log without giving revisions is much, much slower then with revisions. Examples:

$ time php -r "svn_log('http://localhost/svn/shopadsl');"

real    0m2.140s
user    0m0.140s
sys     0m0.000s

VS

$ time php -r "svn_log('http://localhost/svn/shopadsl', 0, 45);"

real    0m0.063s
user    0m0.024s
sys     0m0.016s

默认svn在linux下的密码位置参考:http:/justwinit.cn/post/4512/

更多使用方法:http:/www.php.net/manual/en/function.svn-checkout.php
重启Apache
[plain] view plaincopy
/etc/init.d/apache2 reload  
或php-fpm 重启:
[plain] view plaincopy
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`  

发现在Apache启动后会报错,解决方法如下:
If you having trouble with certificate verification like this:

PHP Warning:  svn_log(): svn error(s) occured 175002 (RA  layer request failed) OPTIONS of 'https://example.com/your/repos/path': Server certificate verification failed: issuer is not trusted

Try this two steps:

1. Run

"svn log https://example.com/your/repos/path"

on the commandline and permanent accept the certificate by typing "p" when asked.

2. Use the following settings for svn_auth_set_parameter() before calling other svn functions:


当然,也可以直接用PHP的Popen:
popen()这个函数, 看来echo t | svn ci ...那些命令可以用另外的方式来解决了

附转:

popen()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,对这种句柄只能做单一的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用pclose()函数来关闭它。


常用操作
1.查看最近3个版本日志
svn log [PATH] -v -l3

2.查看某两个版本,用来对比
svn log -r 14:15

3.日志放入文件
$ svn log -r 14 > mylog
$ svn log -r 19 >> mylog
$ svn log -r 27 >> mylog
$ cat mylog

或者
$ svn log –incremental -r 14 > mylog
$ svn log –incremental -r 19 >> mylog
$ svn log –incremental -r 27 >> mylog
$ cat mylog

参考:http:/www.php.net/manual/en/function.svn-checkout.php
你也可以参考:http:/blog.csdn.net/dragon8299/article/details/6689685
http:/www.swordair.com/blog/2010/01/85
http:/biancheng.dnbcw.info/win2003/377268.html


如果configure报下面的错
checking for svn includes... configure: error: failed to find svn_client.h
安装libsvn-dev包:CentOs应该也有对应的包
apt-get install libsvn-dev


解压缩后 切换到安装目录 执行/opt/lamp/php/bin/phpize
然后:./configure –with-php-config=/opt/lamp/php/bin/php-config
出现错误:checking for svn includes… configure: error: failed to find svn_client.h
解决办法:添加subversion服务端的目录 –with-svn=/usr/local/subversion
./configure –with-php-config=/opt/lamp/php/bin/php-config  –with-svn=/usr/local/subversion

make出错:
/usr/bin/ld: cannot find -lsvn_client-1

ok




===================================================================
在Tlinux的64位机器上折腾步骤记录,我艹,比Cenots折腾了更多时间来整这个玩意,真是步步惊心啊,如下:
第一步:编译,参数如下 ,这个参数都折腾了老半天啊。
./configure --with-php-config=/usr/local/qqwebsrv/php/bin/php-config  --with-svn=/opt/CollabNet_Subversion --with-svn-apr=/usr/local/apr
中间就会提示找不到什么.h啊:checking for svn includes... configure: error: failed to find svn_client.h,于是得找个这个h的包放在里面去才行。
root@10.12.21.108:~/software/svn-1.0.2# ls /usr/local/include/
subversion-1  subversion-1.tar.gz

第二步:/usr/local/apr-util/include/apr-1 这个Include进Makefile里。
修改Makefile: 39行左右
39 INCLUDES = -I/usr/local/qqwebsrv/php/include/php -I/usr/local/qqwebsrv/php/include/php/main -I/usr/local/qqwebsrv/php/includ        e/php/TSRM -I/usr/local/qqwebsrv/php/include/php/Zend -I/usr/local/qqwebsrv/php/include/php/ext -I/usr/local/qqwebsrv/php/in        clude/php/ext/date/lib -I/usr/local/include/subversion-1 -I/usr/local/apr/include/apr-1 -I/usr/local/apr-util/include/apr-1         -DLINUX=2 -D_REENTRANT -D_GNU_SOURC
加入:/usr/local/apr-util/include/apr-1
-I/usr/local/apr/include/apr-1 -I/usr/local/apr-util/include/apr-1

第三步:出现老是什么 cannot find -lsvn_client-1  ,做软链接后,出现下一个,太多了,于是否,如下:
全拷贝过去得了,注意:/opt/CollabNet_Subversion 这个是在网上找的整个包进行安装的SVN,是Rpm包。
cp -Rf /opt/CollabNet_Subversion/lib/*  /usr/lib/
make
make install
root@10.12.22.108:~/software/svn-1.0.2# make install
Installing shared extensions:     /usr/local/qqwebsrv/php/lib/extensions/


第四步:因发现在加入这个扩展后,出现:libsvn_client-1.so.0 cannot open shared object file no such file or directory
root@10.12.22.108:/# /sbin/ldconfig
/sbin/ldconfig: libraries libsasl2.so.2.0.21 and libsasl2.so.2.0.23 in directory /usr/lib have same soname but different type.
/sbin/ldconfig: libraries libgz.so.1 and libz.so.1.2.5 in directory /usr/lib have same soname but different type.
ldconfig: /usr/lib/libsvn_client-1.so.0 is not a symbolic link
根据上面的提示,于是删除掉这个文件:
rm -Rf  /usr/lib/libsvn_client-1.so.0
上面两个不管它,就这样就好了。

第五步(经实践是多余的):
查找网上文章:http://www.cnblogs.com/amboyna/archive/2008/02/06/1065322.html
vi /etc/ld.so.conf
加上:

再运行这个PHP的SVN扩展,好了。前面的libsasl2,libgz,删除高版本的,做个软链接就Ok了。

但是TLamp有问题了,Apache出现了:
[codes=html]
Apache2 has detected a syntax error in your configuration files:
apache2: Syntax error on line 142 of /etc/apache2/httpd.conf: Cannot load /usr/lib64/apache2/modules/mod_ssl.so into server: /usr/lib64/apache2/modules/mod_ssl.so: undefined symbol: SSL_CTX_set_client_cert_cb
[codes=html]
于是,自己重新下了一个Apache,PHP5.3.11等,重新编译后,这个问题也就没有了,直接访问SVN扩展输出Ok了,还以为需要用system或者popen去打开呢,看来用不着了。

为了安全把一些函数都给屏蔽了,在php.ini里可以看到:
[codes=html]
disable_functions = passthru,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,system,exec
[codes=html]
因只为了这个svn扩展,PHP5.3.11的编译也很简单,如下:
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd-2.0.59/bin/apxs   --enable-sockets --enable-mbstring

原本想加入其它的,现在想来,没有必要加上什么Mysql,Pdo,Mbstring等等。
(./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd-2.0.59/bin/apxs  --with-pdo=shared --with-pdo-mysql=/usr/local/mysql --enable-sockets --enable-mbstring)

EOF
近来看一个Js函数如下:

对这个eventstop(e);,有点迷惑

Demo:



Js兄弟说是让我查找了一下事件冒泡,这个文章写得好,能解惑:http://justcoding.iteye.com/blog/587876
Query对DOM的事件触发具有冒泡特性。有时利用这一特性可以减少重复代码,但有时候我们又不希望事件冒泡。这个时候就要阻止 jQuery.Event冒泡。

在jQuery.Event 的文档 中的开头得知,jQuery.Event对象是符合W3C标准的一个事件对象,同时jQuery.Event免去了检查兼容IE的步骤。

jQuery.Event提供了一个非常简单的方法来阻止事件冒泡:event.stopPropagation();



但是这个方法对使用live 绑 定的事件没有作用,需要一个更简单的方法阻止事件冒泡:return false;


另外 JavaScript 阻止冒泡

 阻止冒泡事件的方法有两种,第一种是IE的方法,第二种是DOM方法,至于为什么要分为两种方法去讨论之,这里就不做讨论了,总之是浏览器一些蹩 脚的问题,好了废话不说了,直接贴代码了:



举个例子:就是谷歌首页的更多选项吧,不知道的可以去看看http://www.google.com/ 。
这里要应用两个点击事件,一个是div.onclick,另一个就是document.onclick,那么问题就出现了,在调用 div.onclick的时候,由于冒泡事件的存在,会自动的调用document.onclick,由于冒泡的顺序是从里向外的
(div->body->document->html)所以div.onclick事件就会被覆盖掉,也就不会执行了,解决的方案其 实也是很简单的哦,就是在执行div.onclick的时候阻止冒泡事件就好了,那怎么阻止呢,就调用上面的函数就ok了!哈哈!
ps:在介绍 一下阻止浏览器默认行为的方法,大同小异,这里就不再赘述了。
正是这个函数,如下:
Tags: