零、linux下用ctrl+r快速搜索history命令:
(1)ctrl + r输入后多按几次。
(2)!?a.php?:p
(3)命令少或就近的情况下还是直接按键盘上面的[上]键更有效率。
linux命令行的history是一个熟知但不常用的命令,原因是要查某个命令的编号需要输入 history|grep xxx ,又因为!?xxx,!xxx 属于运行即执行也不方便,ctrl+r则方便多了。
ctrl+r
用途:反向搜索执行过的命令。(reverse-i-search)
1、ctrl+r
2、fo
3、ctrl+r (继续反向搜索)
只需要寥寥几键。当然若仅是上几个命令还是[上]键更有效率。
一、
问:linux 同一用户利用securecrt登陆两次, 各自执行一些命令后,再执行history看到的 结果不一样,是为什么?
答:确定存在这个问题,是ssh的复用,只有通过在一个终端里使用history -w后,另一个终端才会看得到哈,或关闭terminal后会写入,这里有一个buffer,实践也证明是这样的。
要想看只有通过,如:root, /root/.bash_history,root用户登录可以再/root/目录下ls -a 可以看到有.bash_history文件 tail .bash_history 也可以看到你执行过的命令 你执行一些命令后linux会向.bash_history写 入你执行过的命令。
除非你限定同一id不能同时登录:限制同一ID不能两人同时登录
1、限制同一ID不能两人同时登录
2、防止终端用户两人同时用同一ID登录
1、限制同一ID不能两人同时登录
echo "* hard max logins 2 " >> /etc/security/limits.conf
2、防止终端用户两人同时用同一ID登录
echo "session required pam_limits.so" >>/etc/pam.d/login
来自:http://www.sudu.cn/info/html/edu/linux/20080407/265620.html
入侵时目标如果是linux服务器,看切忌清理痕迹的时候别忘记history命令的记录哦
1、修改/etc/profile将HISTSIZE=1000改成0或1
清除用户home路径下。bash_history
2、立即清空里的history当前历史命令的记录
history -c
3、bash执行命令时不是马上把命令名称写入history文件的,而是存放在内部的buffer中,等bash退出时会一并写入。
不过,可以调用'history -w'命令要求bash立即更新history文件。
history -w
二、相关命令:
(1)共计最大保存history的条目数:
[root@test ~]# echo $HISTSIZE
1000
(2)查看history存的最大值,最旧,写入:
[root@localhost ~]# history |head
[root@localhost ~]# history |head
4 cd ..
5 ll
6 cd ..
(3)把history立即写入root:/root/.bash_history
history -w
三、History(历史)命令用法 15 例
如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率。本文将通过实例的方式向你介绍 history 命令的 15 个用法。
阅读全文
(1)ctrl + r输入后多按几次。
(2)!?a.php?:p
(3)命令少或就近的情况下还是直接按键盘上面的[上]键更有效率。
linux命令行的history是一个熟知但不常用的命令,原因是要查某个命令的编号需要输入 history|grep xxx ,又因为!?xxx,!xxx 属于运行即执行也不方便,ctrl+r则方便多了。
ctrl+r
用途:反向搜索执行过的命令。(reverse-i-search)
1、ctrl+r
2、fo
3、ctrl+r (继续反向搜索)
只需要寥寥几键。当然若仅是上几个命令还是[上]键更有效率。
一、
问:linux 同一用户利用securecrt登陆两次, 各自执行一些命令后,再执行history看到的 结果不一样,是为什么?
答:确定存在这个问题,是ssh的复用,只有通过在一个终端里使用history -w后,另一个终端才会看得到哈,或关闭terminal后会写入,这里有一个buffer,实践也证明是这样的。
要想看只有通过,如:root, /root/.bash_history,root用户登录可以再/root/目录下ls -a 可以看到有.bash_history文件 tail .bash_history 也可以看到你执行过的命令 你执行一些命令后linux会向.bash_history写 入你执行过的命令。
除非你限定同一id不能同时登录:限制同一ID不能两人同时登录
1、限制同一ID不能两人同时登录
2、防止终端用户两人同时用同一ID登录
1、限制同一ID不能两人同时登录
echo "* hard max logins 2 " >> /etc/security/limits.conf
2、防止终端用户两人同时用同一ID登录
echo "session required pam_limits.so" >>/etc/pam.d/login
来自:http://www.sudu.cn/info/html/edu/linux/20080407/265620.html
入侵时目标如果是linux服务器,看切忌清理痕迹的时候别忘记history命令的记录哦
1、修改/etc/profile将HISTSIZE=1000改成0或1
清除用户home路径下。bash_history
2、立即清空里的history当前历史命令的记录
history -c
3、bash执行命令时不是马上把命令名称写入history文件的,而是存放在内部的buffer中,等bash退出时会一并写入。
不过,可以调用'history -w'命令要求bash立即更新history文件。
history -w
二、相关命令:
(1)共计最大保存history的条目数:
[root@test ~]# echo $HISTSIZE
1000
(2)查看history存的最大值,最旧,写入:
[root@localhost ~]# history |head
[root@localhost ~]# history |head
4 cd ..
5 ll
6 cd ..
(3)把history立即写入root:/root/.bash_history
history -w
三、History(历史)命令用法 15 例
如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率。本文将通过实例的方式向你介绍 history 命令的 15 个用法。
阅读全文
关东有义士,兴兵讨群凶。初期会盟津,乃心在咸阳。
军合力不齐,踌躇而雁行。势利使人争,嗣还自相戕。
淮南弟称号,刻玺于北方。铠甲生虮虱,万姓以死亡。
白骨露于野,千里无鸡鸣。生民百遗一,念之断人肠。
军合力不齐,踌躇而雁行。势利使人争,嗣还自相戕。
淮南弟称号,刻玺于北方。铠甲生虮虱,万姓以死亡。
白骨露于野,千里无鸡鸣。生民百遗一,念之断人肠。
Telnet是系统管理员常用的远程登录和管理工具,在Windows 2000/XP/2003/Vista系统中它作为标准的系统组件集成到系统中供用户使用。不过默认情况下Telnet服务是被禁止,通常情况下我们只需运行services.msc打开服务管理,找到Telnet服务项设置其启动类型为“手动”或者“自动”,然后启动该服务即可使用了。不过在Windows 7中,你按照上述方法是不能找到并启用Telnet服务的。那如何找回Windows 7的Telnet功能呢?
1、隐藏原因
其实,在服务管理器中找不到Telnet并不是Windows 7抛弃了Telnet,而是默认状态下Windows 7并没有安装Telnet服务。这也是微软第一次从个人系统中将Telnet剔出了系统默认组件之外,这和Windows Server 2008类似。我想微软这么做,应该是出于安全性考虑,毕竟Telnet的数据是以明文传输的,攻击者和容易通过嗅探获取敏感信息。基于安全性考虑,建议大家还是使用安全性更高的、加密的SSH远程管理方式。
2、安装Telnet
不过,我们也没有必要因噎废食,作为个人用户Telnet还是非常方便的。在Windows 7下安装Telnet和Windows Server 2008略有不同,大家可以通过下面的操作方法实现。依次点击“开始”→“控制面板”→“程序”,“在程序和功能”找到并点击“打开或关闭Windows功能”进入Windows 功能设置对话框。找到并勾选“Telnet客户端”和“Telnet服务器”,最后“确定”稍等片刻即可完成安装。除此之外,我们也可通过该向导安装“TFTP客户端”、“Internet 信息服务”等
安装完成后,Telnet服务默认情况下是禁用的。还需执行“开始”→“运行”,输入servcies.msc打开服务管理器。找到并双击Telnet服务项,设置其启动方式为“手动”(更安全,只在需要的时候才启用),最后“启动”该服务“确定”退出即可
1、隐藏原因
其实,在服务管理器中找不到Telnet并不是Windows 7抛弃了Telnet,而是默认状态下Windows 7并没有安装Telnet服务。这也是微软第一次从个人系统中将Telnet剔出了系统默认组件之外,这和Windows Server 2008类似。我想微软这么做,应该是出于安全性考虑,毕竟Telnet的数据是以明文传输的,攻击者和容易通过嗅探获取敏感信息。基于安全性考虑,建议大家还是使用安全性更高的、加密的SSH远程管理方式。
2、安装Telnet
不过,我们也没有必要因噎废食,作为个人用户Telnet还是非常方便的。在Windows 7下安装Telnet和Windows Server 2008略有不同,大家可以通过下面的操作方法实现。依次点击“开始”→“控制面板”→“程序”,“在程序和功能”找到并点击“打开或关闭Windows功能”进入Windows 功能设置对话框。找到并勾选“Telnet客户端”和“Telnet服务器”,最后“确定”稍等片刻即可完成安装。除此之外,我们也可通过该向导安装“TFTP客户端”、“Internet 信息服务”等
安装完成后,Telnet服务默认情况下是禁用的。还需执行“开始”→“运行”,输入servcies.msc打开服务管理器。找到并双击Telnet服务项,设置其启动方式为“手动”(更安全,只在需要的时候才启用),最后“启动”该服务“确定”退出即可
完整配置教程网上多的是.这里只是记录一下心得.配置过的都看得懂
1)增加用户
由于htpasswd是apache的内置命令,所以先进入apache的命令目录
# cd /usr/local/apache/bin/
# htpasswd -cm /etc/svn/passwd xx
# htpasswd -m /etc/svn/passwd xx1
2)权限配置
小小配置,差别挺大的.
<Location /svn>
DAV svn
#SVNPath /svnroot/
SVNParentPath /svnroot/
AuthzSVNAccessFile /etc/svn/authz
AuthType Basic
AuthName "welcome to subversion"
AuthUserFile /etc/svn/passwd
Require valid-user
</Location>
在此情总下, SVNPath /svnroot/ 和 SVNParentPath /svnroot/ 是有区别的.
1. SVNPath /svnroot/svn1 在/etc/authz 的权限配置里面. 项目是用路径表示. 如: [/svn1] 表示根目录下面的 /svn1 目录的权限.
[/]
* = r
[/svn1]
* = r
xx = rw
2. SVNParentPath /svnroot/ 在/etc/authz 的权限配置里面. 项目是用路径表示. 如: [svnroot:svn1/] 表示svnroot项目下面的 /svn1目录 的权限.
svnroot 表示在当前库的conf/svnserve.conf 里配置的名称realm = svnroot
来源:http://blog.xoyo.com/php/article/92973.shtml
实际得参考:http://www.svn8.com/svnpz/20080310/271.html
1)增加用户
由于htpasswd是apache的内置命令,所以先进入apache的命令目录
# cd /usr/local/apache/bin/
# htpasswd -cm /etc/svn/passwd xx
# htpasswd -m /etc/svn/passwd xx1
2)权限配置
小小配置,差别挺大的.
<Location /svn>
DAV svn
#SVNPath /svnroot/
SVNParentPath /svnroot/
AuthzSVNAccessFile /etc/svn/authz
AuthType Basic
AuthName "welcome to subversion"
AuthUserFile /etc/svn/passwd
Require valid-user
</Location>
在此情总下, SVNPath /svnroot/ 和 SVNParentPath /svnroot/ 是有区别的.
1. SVNPath /svnroot/svn1 在/etc/authz 的权限配置里面. 项目是用路径表示. 如: [/svn1] 表示根目录下面的 /svn1 目录的权限.
[/]
* = r
[/svn1]
* = r
xx = rw
2. SVNParentPath /svnroot/ 在/etc/authz 的权限配置里面. 项目是用路径表示. 如: [svnroot:svn1/] 表示svnroot项目下面的 /svn1目录 的权限.
svnroot 表示在当前库的conf/svnserve.conf 里配置的名称realm = svnroot
来源:http://blog.xoyo.com/php/article/92973.shtml
实际得参考:http://www.svn8.com/svnpz/20080310/271.html
1.首先查看端口状态,可以使用命令
-># netstat -an (若查看某个端口,后面可接端口号)
2.检查服务状态使用chkconfig,如检查SSH,
-># chkconfig sshd
如为off,则需要打开系统服务的端口,可用chkconfig on命令,如打开SSH,
-># chkconfig ssh on service xinetd restart
3.防火墙开放端口:
(方法一:)
i. 进入 /etc/sysconfig/ 目录,用 vi 命令编辑 SuSEfirewall2 文件,
-># vi SuSEfirewall2
在文件中找到FW_SERVICES_EXT_TCP,在其后面加上服务名或者是服务对应的端口,如SSH,
FW_SERVICES_EXT_TCP=”ssh” 或 FW_SERVICES_EXT_TCP=”22″
保存之后退出。
ii. 重启防火墙,以使配置生效,
-># rcSuEfirewall2 restart
(方法二:)
i. 进入 /etc/sysconfig/ 目录, 查找 iptables 文件。若不存在,则新建一个名为iptables文件,
-># touch iptables
ii. 在iptables文件中添加如下,以便打开端口,如:
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp –dport 22 –state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp –dport 80 –state NEW -j ACCEPT
iii. 重起iptalbes服务:service iptables restart 或重启机器。
方法三:)
引自:http://hi.baidu.com/wzj423/blog/item/81e8d2f9525b995d242df23a.html 部分内容
创建/etc/init.d/firewall文件:
vi /etc/init.d/firewall
放到/etc/init.d下的原因是方便自动启动。
脚本如下:
#!/bin/bash
# This program is used to use start my iptables.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:~/bin
export PATH
case “$1″ in
start)
echo -n “Staring FireWall …”
# /sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp –dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p all -m state –state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p all -m state –state INVALID,NEW -j DROP
echo “OK”
;;
stop)
echo -n “Stop FireWall … ”
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
echo “OK”
;;
restart)
/etc/init.d/firewall stop
/etc/init.d/firewall start
echo “Restart FireWall OK”
;;
*)
echo “Usage: $0 {start|stop|restart}”
esac
exit 0
如果想新开端口,直接修改start部分即可。
测试firewall是否能正常工作:
/etc/init.d/firewall restart
没有问题。
配置firewall随系统自动启动:
cd /etc/init.d
update-rc.d firewall defaults 01
01表示启动优先级,让系统刚启动时就立即启动防火墙规则,可修改所有的K01为K99,在关机或重启服务器时最后停止防火墙服务。
-># netstat -an (若查看某个端口,后面可接端口号)
2.检查服务状态使用chkconfig,如检查SSH,
-># chkconfig sshd
如为off,则需要打开系统服务的端口,可用chkconfig on命令,如打开SSH,
-># chkconfig ssh on service xinetd restart
3.防火墙开放端口:
(方法一:)
i. 进入 /etc/sysconfig/ 目录,用 vi 命令编辑 SuSEfirewall2 文件,
-># vi SuSEfirewall2
在文件中找到FW_SERVICES_EXT_TCP,在其后面加上服务名或者是服务对应的端口,如SSH,
FW_SERVICES_EXT_TCP=”ssh” 或 FW_SERVICES_EXT_TCP=”22″
保存之后退出。
ii. 重启防火墙,以使配置生效,
-># rcSuEfirewall2 restart
(方法二:)
i. 进入 /etc/sysconfig/ 目录, 查找 iptables 文件。若不存在,则新建一个名为iptables文件,
-># touch iptables
ii. 在iptables文件中添加如下,以便打开端口,如:
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp –dport 22 –state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp –dport 80 –state NEW -j ACCEPT
iii. 重起iptalbes服务:service iptables restart 或重启机器。
方法三:)
引自:http://hi.baidu.com/wzj423/blog/item/81e8d2f9525b995d242df23a.html 部分内容
创建/etc/init.d/firewall文件:
vi /etc/init.d/firewall
放到/etc/init.d下的原因是方便自动启动。
脚本如下:
#!/bin/bash
# This program is used to use start my iptables.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:~/bin
export PATH
case “$1″ in
start)
echo -n “Staring FireWall …”
# /sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp –dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p all -m state –state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p all -m state –state INVALID,NEW -j DROP
echo “OK”
;;
stop)
echo -n “Stop FireWall … ”
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
echo “OK”
;;
restart)
/etc/init.d/firewall stop
/etc/init.d/firewall start
echo “Restart FireWall OK”
;;
*)
echo “Usage: $0 {start|stop|restart}”
esac
exit 0
如果想新开端口,直接修改start部分即可。
测试firewall是否能正常工作:
/etc/init.d/firewall restart
没有问题。
配置firewall随系统自动启动:
cd /etc/init.d
update-rc.d firewall defaults 01
01表示启动优先级,让系统刚启动时就立即启动防火墙规则,可修改所有的K01为K99,在关机或重启服务器时最后停止防火墙服务。
可以啊。不过要注意端口不能用一个(默认为80,你的其中一个要换为其他端口)
据我所了解,你的选择方式有:
1、安装两套apache服务器,单独使用配置文件,网页(www)默认目录等。比如有个xampp,可以让你方便的安装使用 apache+perl+mysql。比如我这次的一个项目(作业)就是用xampp(不过学校机房是windows,所以我这个xampp是win下的)在学校机房给老师演示的。
2、安装一套apache服务器,其中一个用正常的方式运行,另外一个用配置文件(包含mysql服务配置,apache端口,默认目录配置,php配置等,)作为参数(具体方法看apache的使用说明或者Google一下)传入给apache程序。
这样就能运行两套apache了。
ps:个人意见,未实践,经过实践后有结果的话欢迎探讨。
据我所了解,你的选择方式有:
1、安装两套apache服务器,单独使用配置文件,网页(www)默认目录等。比如有个xampp,可以让你方便的安装使用 apache+perl+mysql。比如我这次的一个项目(作业)就是用xampp(不过学校机房是windows,所以我这个xampp是win下的)在学校机房给老师演示的。
2、安装一套apache服务器,其中一个用正常的方式运行,另外一个用配置文件(包含mysql服务配置,apache端口,默认目录配置,php配置等,)作为参数(具体方法看apache的使用说明或者Google一下)传入给apache程序。
这样就能运行两套apache了。
ps:个人意见,未实践,经过实践后有结果的话欢迎探讨。
Double-click 选项修改为 Close Tab:
双击复制并打开新session:
options -> global options -> Terminal -> Tabs 选择Double-click action的下拉框为Clone tab,这样就可以在已经打开的session标签中鼠标双击,打开一个完全一样的新session标签。
================================================================================================================
secureCRT6.5设置 自动登录 密码保存
1 telnet自动登录
a 点击connect in tab(alt+b)-->new session->按向导设置主机名,然后完成

b 选择刚才设置的主机,点击右键弹出菜单,选择properties按钮。

如图设置自动登录,在初始化发送中设置ogin和assword为你登录主机使用的用户名和密码,点击ok完成连接。

2 ssh2连接方式
a ssh2顾名思义,就是安全连接,但那个不是本文的关注点,本文只关注自动登录,O(∩_∩)O~
前面步骤跟telnet连接方式相同,都是alt+b,然后new session,如图,然后完成。

b 选择刚设置好的主机,鼠标右键,弹出菜单,选properties。

c 在弹出的对话框中选择ssh2设置,再选择authentication中的password选项,点选右边的properties,弹出左下角对话框,填入登录用户名,密码,ok完成。

阅读全文
双击复制并打开新session:
options -> global options -> Terminal -> Tabs 选择Double-click action的下拉框为Clone tab,这样就可以在已经打开的session标签中鼠标双击,打开一个完全一样的新session标签。
================================================================================================================
secureCRT6.5设置 自动登录 密码保存
1 telnet自动登录
a 点击connect in tab(alt+b)-->new session->按向导设置主机名,然后完成
b 选择刚才设置的主机,点击右键弹出菜单,选择properties按钮。
如图设置自动登录,在初始化发送中设置ogin和assword为你登录主机使用的用户名和密码,点击ok完成连接。
2 ssh2连接方式
a ssh2顾名思义,就是安全连接,但那个不是本文的关注点,本文只关注自动登录,O(∩_∩)O~
前面步骤跟telnet连接方式相同,都是alt+b,然后new session,如图,然后完成。
b 选择刚设置好的主机,鼠标右键,弹出菜单,选properties。
c 在弹出的对话框中选择ssh2设置,再选择authentication中的password选项,点选右边的properties,弹出左下角对话框,填入登录用户名,密码,ok完成。
阅读全文
HTTP协议分析
HTTP协议之我见
原文地址:http://bbs.sotenet.com/viewthread.php?tid=47
//起因是昨天看了YELLOW哥的HTTP传文件的文章。下面的东西可能看起来有点乱。但基本原理写的都很清楚了。
/*
对HTTP协议进行分析:
测试环境:
WIN 2K -SP4
Apache/1.3.29 (Win32)
IE 6.0
Firefox/1.0
测试步骤:
1:先建立TCP连接。
2:发送如下请求:
GET /index.html HTTP/1.1
Accept:*?*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host:192.168.0.119
Connection: Keep-Alive
3:如后接受数据:
接受到的的结构如下: HTTP协议回应 + 网页正文 + HTTP的结尾结构
//------------------------------------------------------------------------具体数据如下
HTTP/1.1 200 OK
Date: Mon, 19 Dec 2005 10:51:54 GMT
Server: Apache/1.3.29 (Win32)
Last-Modified: Tue, 16 Mar 2004 12:24:28 GMT
ETag: "0-dab-4056f1fc"
Accept-Ranges: bytes
Content-Length: 3499
Keep-Alive: timeout=30, max=100
Connection: Keep-Alive
Content-Type: text/html
//**************************************网页正文(略)
HTTP/1.1 414 Request-URI Too Large
Date: Mon, 19 Dec 2005 10:51:54 GMT
Server: Apache/1.3.29 (Win32)
Connection: close
Content-Type: text/html; charset=iso-8859-1
Request-URI Too Large
The requested URL's length exceeds the capacity
limit for this server.
request failed: URI too long
--------------------------------------------------------------------------------
Apache/1.3.29 Server at localhost Port 8080
//------------------------------------------------------------------------数据结束
这之间还要有一个地方值得注意的就是当发出请求后,服务器回送数据时是分段发送的。
比如Apache/1.3.29 (Win32)返回一个大网页数据的时候就发送了5个包
1,2,3,4包是4098字节,最后剩下的数据由第5个包返回是1953个字节。
这5个包的数据结构如下:
1包:HTTP回应头结构 + 网页正文
2包:网页正文
3包:网页正文
4包:网页正文
5包:网页正文 + HTTP回应结尾结构
今天上午大哥说的东西其实就是这样一个东西:
1:SERVER开一个端口80。
2:CLIENT 连接 SERVER 用TCP协议,然后提出一个HTTP请求。
3:CLIENT 接收 SERVER 的数据,结构:HTTP回应头结构 + 文件内容 + HTTP回应结尾结构
从这些我们基本就可以看出来HTTP协议是建立在TCP协议之上。协议的请求和回应的结构也不是很严格。
这点和TCP,UDP等协议比较起来,HTTP协议并不像TCP/UDP等协议严格。
其实如果要较细致的学习这个协议,主要就是学习请求和回应的格式。
这是我截获的 IE6.0 的HTTP请求,访问命令:http://192.168.0.119:800
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, *?*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: 192.168.0.119:800
Connection: Keep-Alive
这是我截获的 firefox 的HTTP请求,访问命令:http://192.168.0.119:800
GET / HTTP/1.1
Host: 192.168.0.119:800
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.7.5) Gecko/20041224 Firefox/1.0
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*?*;q=0.5
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
注:以上请求里面有都一个*?*,其实这“?”应该是“/” 原因是因为是程序里面的注释符号
今天就着昨天的研究成果上面又具体的看了一下,还那昨天的那5个包做例子:
这之间还要有一个地方值得注意的就是当发出请求后,服务器回送数据时是分段发送的。
比如Apache/1.3.29 (Win32)返回一个大网页数据的时候就发送了5个包
1,2,3,4包是4098字节,最后剩下的数据由第5个包返回是1953个字节。
(info_php.php)
这5个包的数据结构如下:
1包4098:HTTP回应头结构 + 5个字节的数据() + 网页正文
2包4098:5个字节的数据() + 网页正文
3包4098:5个字节的数据() + 网页正文
4包4098:5个字节的数据() + 网页正文
5包1953:5个字节的数据() + 网页正文 + 5个字节的数据(通常是0) + HTTP回应结尾结构 + 网页结构
以上是对大于两个分段的网页的测试:(index.htm)
两个分段的网页:
1包4096:HTTP回应头结构 + 网页正文 + HTTP回应结尾结构 + 网页结构(一半)
2包195:网页结构(另一半)
以上是对大于一个分段的网页的测试:(index.html)
1包949: HTTP回应头结构 + 网页正文 + HTTP回应结尾结构 + 网页结构
一点小小的疑惑:当我测试普通的网页(*.html)反回分段时没有那5个字节的数据。
但当我测试动态网页(*.php)时在里面有那5个字节的数据,我不明白是不是里面还有什么别的机制来控制
HTTP协议的数据分段。另外说一点就是,那个5个字节的数据是16进制的数据。
大概是代表本分段里面的网页正文数据的字节数。
相信HTTP协议里面还有我没有发现的东西,但基本的东西我想我这里面写应该差不多了!
下面是我测试的小程序代码:
//----------------------THE----END--------------------------------------
HTTP协议之我见
原文地址:http://bbs.sotenet.com/viewthread.php?tid=47
//起因是昨天看了YELLOW哥的HTTP传文件的文章。下面的东西可能看起来有点乱。但基本原理写的都很清楚了。
/*
对HTTP协议进行分析:
测试环境:
WIN 2K -SP4
Apache/1.3.29 (Win32)
IE 6.0
Firefox/1.0
测试步骤:
1:先建立TCP连接。
2:发送如下请求:
GET /index.html HTTP/1.1
Accept:*?*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host:192.168.0.119
Connection: Keep-Alive
3:如后接受数据:
接受到的的结构如下: HTTP协议回应 + 网页正文 + HTTP的结尾结构
//------------------------------------------------------------------------具体数据如下
HTTP/1.1 200 OK
Date: Mon, 19 Dec 2005 10:51:54 GMT
Server: Apache/1.3.29 (Win32)
Last-Modified: Tue, 16 Mar 2004 12:24:28 GMT
ETag: "0-dab-4056f1fc"
Accept-Ranges: bytes
Content-Length: 3499
Keep-Alive: timeout=30, max=100
Connection: Keep-Alive
Content-Type: text/html
//**************************************网页正文(略)
HTTP/1.1 414 Request-URI Too Large
Date: Mon, 19 Dec 2005 10:51:54 GMT
Server: Apache/1.3.29 (Win32)
Connection: close
Content-Type: text/html; charset=iso-8859-1
Request-URI Too Large
The requested URL's length exceeds the capacity
limit for this server.
request failed: URI too long
--------------------------------------------------------------------------------
Apache/1.3.29 Server at localhost Port 8080
//------------------------------------------------------------------------数据结束
这之间还要有一个地方值得注意的就是当发出请求后,服务器回送数据时是分段发送的。
比如Apache/1.3.29 (Win32)返回一个大网页数据的时候就发送了5个包
1,2,3,4包是4098字节,最后剩下的数据由第5个包返回是1953个字节。
这5个包的数据结构如下:
1包:HTTP回应头结构 + 网页正文
2包:网页正文
3包:网页正文
4包:网页正文
5包:网页正文 + HTTP回应结尾结构
今天上午大哥说的东西其实就是这样一个东西:
1:SERVER开一个端口80。
2:CLIENT 连接 SERVER 用TCP协议,然后提出一个HTTP请求。
3:CLIENT 接收 SERVER 的数据,结构:HTTP回应头结构 + 文件内容 + HTTP回应结尾结构
从这些我们基本就可以看出来HTTP协议是建立在TCP协议之上。协议的请求和回应的结构也不是很严格。
这点和TCP,UDP等协议比较起来,HTTP协议并不像TCP/UDP等协议严格。
其实如果要较细致的学习这个协议,主要就是学习请求和回应的格式。
这是我截获的 IE6.0 的HTTP请求,访问命令:http://192.168.0.119:800
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, *?*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: 192.168.0.119:800
Connection: Keep-Alive
这是我截获的 firefox 的HTTP请求,访问命令:http://192.168.0.119:800
GET / HTTP/1.1
Host: 192.168.0.119:800
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.7.5) Gecko/20041224 Firefox/1.0
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*?*;q=0.5
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
注:以上请求里面有都一个*?*,其实这“?”应该是“/” 原因是因为是程序里面的注释符号
今天就着昨天的研究成果上面又具体的看了一下,还那昨天的那5个包做例子:
这之间还要有一个地方值得注意的就是当发出请求后,服务器回送数据时是分段发送的。
比如Apache/1.3.29 (Win32)返回一个大网页数据的时候就发送了5个包
1,2,3,4包是4098字节,最后剩下的数据由第5个包返回是1953个字节。
(info_php.php)
这5个包的数据结构如下:
1包4098:HTTP回应头结构 + 5个字节的数据() + 网页正文
2包4098:5个字节的数据() + 网页正文
3包4098:5个字节的数据() + 网页正文
4包4098:5个字节的数据() + 网页正文
5包1953:5个字节的数据() + 网页正文 + 5个字节的数据(通常是0) + HTTP回应结尾结构 + 网页结构
以上是对大于两个分段的网页的测试:(index.htm)
两个分段的网页:
1包4096:HTTP回应头结构 + 网页正文 + HTTP回应结尾结构 + 网页结构(一半)
2包195:网页结构(另一半)
以上是对大于一个分段的网页的测试:(index.html)
1包949: HTTP回应头结构 + 网页正文 + HTTP回应结尾结构 + 网页结构
一点小小的疑惑:当我测试普通的网页(*.html)反回分段时没有那5个字节的数据。
但当我测试动态网页(*.php)时在里面有那5个字节的数据,我不明白是不是里面还有什么别的机制来控制
HTTP协议的数据分段。另外说一点就是,那个5个字节的数据是16进制的数据。
大概是代表本分段里面的网页正文数据的字节数。
相信HTTP协议里面还有我没有发现的东西,但基本的东西我想我这里面写应该差不多了!
下面是我测试的小程序代码:
//----------------------THE----END--------------------------------------
首先说一下儒家:
阅读全文
阅读全文
中国道家的创始人老子与越国大夫范蠡是师生关系。
阅读全文
阅读全文
$(".btn1").click(function(){
$("div").scrollTop(100);
});
$(selector).scrollTop(offset)
$("div").scrollTop(100);
});
$(selector).scrollTop(offset)
var login_css = document.createElement('link');
login_css.id = 'login_css';
login_css.rel = 'stylesheet';
login_css.type = 'text/css';
login_css.media = 'screen';
login_css.href = css_url;
document.body.appendChild(login_css);
login_css.id = 'login_css';
login_css.rel = 'stylesheet';
login_css.type = 'text/css';
login_css.media = 'screen';
login_css.href = css_url;
document.body.appendChild(login_css);
// add div element
var divE = document.createElement('div');
divE.id = 'login_container';
divE.style.visibility = 'hidden';
divE.style.opacity = 0;
var login_HTML = "";
var divE = document.createElement('div');
divE.id = 'login_container';
divE.style.visibility = 'hidden';
divE.style.opacity = 0;
var login_HTML = "";
var d = document.documentElement || document.body;
var scrollTop = d.scrollTop > d.offsetTop ? d.scrollTop : d.offsetTop;
divE.style.top = scrollTop+220+'px';
document.body.appendChild(divE);
var scrollTop = d.scrollTop > d.offsetTop ? d.scrollTop : d.offsetTop;
divE.style.top = scrollTop+220+'px';
document.body.appendChild(divE);
在向大家详细介绍CentOS ulimit之前,首先让大家了解下CentOS ulimit,然后全面介绍CentOS ulimit,希望对大家有用。CentOS ulimit值(Linux文件句柄数量)在CentOS5(RHEL5)中的调整。
在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题,比如还有Squid做代理,当文件打开数到900多时速能就非常快的下降,有可能打不开网页.
其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量.
查看方法
我们可以用CentOS ulimit -a来查看所有限制值
[root@centos5 ~]# Centos ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
max nice (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4096
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
max rt priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited||<
其中 "open files (-n) 1024 "是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目).这个值可用CentOS ulimit命令来修改,但CentOS ulimit命令修改的数值只对当前登录用户的目前使用环境有效,系统重启或者用户退出后就会失效.
系统总限制是在这里,/proc/sys/fs/file-max.可以通过cat查看目前的值,修改/etc/sysctl.conf 中也可以控制.
另外还有一个,/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量
查找文件句柄问题的时候,还有一个很实用的程序lsof.可以很方便看到某个进程开了那些句柄.也可以看到某个文件/目录被什么进程占用了.
修改方法
若要令修改CentOS ulimits的数值永久生效,则必须修改配置文档,可以给CentOS ulimit修改命令放入/etc/profile里面,这个方法实在是不方便,还有一个方法是修改/etc/sysctl.conf .我修改了,测试过,但对用户的CentOS ulimits -a 是不会改变的。只是/proc/sys/fs/file-max的值变了.(我给命令放到rc.local中失败)
我认为正确的做法,应该是修改/etc/security/limits.conf
里面有很详细的注释,比如
* soft nofile 32768
* hard nofile 65536
也可以直接运行下面这个shell。直接copy到你的终端中运行就好了.
echo -ne "
* soft nofile 65536
* hard nofile 65536
" >>/etc/security/limits.conf
就可以将文件句柄限制统一改成软32768,硬65536.配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制注意.这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning.其实CentOS ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软默认显示的是软限制,如果运行CentOS ulimit命令修改的时候没有加上的话,就是两个参数一起改变.生效
修改完重新登录就可以见到.(我的系统是CentOS5.1.修改了,重新登录后就立刻生效.可以用CentOS ulimit -a 查看确认.)
如果你使用squid的话,你要在/etc/init.d/squid的文件加入CentOS ulimit -HSn 65535.另外,在squid.conf中也要加入max_filedesc 16384
freebsd下的ulimit命令在哪里?
今天,一个网友问我freebsd的ulimit怎么没有,其实这个问题随便google一下就有了,网上现成就有答案的。
首先要看用的是什么shell,很多shell都有内部命令ulimit,不过freebsd的默认shell 是csh,它的对应内部命令是limit不是ulimit,freebsd还有一个外部命令limits,freebsd中需要改变这些资源使用限制只能用外部命令,内部命令改不了,如果你一定要用ulimit的话,就只能安装有ulimit内部命令的shell,比如bash,sh。
在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题,比如还有Squid做代理,当文件打开数到900多时速能就非常快的下降,有可能打不开网页.
其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量.
查看方法
我们可以用CentOS ulimit -a来查看所有限制值
[root@centos5 ~]# Centos ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
max nice (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4096
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
max rt priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited||<
其中 "open files (-n) 1024 "是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目).这个值可用CentOS ulimit命令来修改,但CentOS ulimit命令修改的数值只对当前登录用户的目前使用环境有效,系统重启或者用户退出后就会失效.
系统总限制是在这里,/proc/sys/fs/file-max.可以通过cat查看目前的值,修改/etc/sysctl.conf 中也可以控制.
另外还有一个,/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量
查找文件句柄问题的时候,还有一个很实用的程序lsof.可以很方便看到某个进程开了那些句柄.也可以看到某个文件/目录被什么进程占用了.
修改方法
若要令修改CentOS ulimits的数值永久生效,则必须修改配置文档,可以给CentOS ulimit修改命令放入/etc/profile里面,这个方法实在是不方便,还有一个方法是修改/etc/sysctl.conf .我修改了,测试过,但对用户的CentOS ulimits -a 是不会改变的。只是/proc/sys/fs/file-max的值变了.(我给命令放到rc.local中失败)
我认为正确的做法,应该是修改/etc/security/limits.conf
里面有很详细的注释,比如
* soft nofile 32768
* hard nofile 65536
也可以直接运行下面这个shell。直接copy到你的终端中运行就好了.
echo -ne "
* soft nofile 65536
* hard nofile 65536
" >>/etc/security/limits.conf
就可以将文件句柄限制统一改成软32768,硬65536.配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制注意.这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning.其实CentOS ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软默认显示的是软限制,如果运行CentOS ulimit命令修改的时候没有加上的话,就是两个参数一起改变.生效
修改完重新登录就可以见到.(我的系统是CentOS5.1.修改了,重新登录后就立刻生效.可以用CentOS ulimit -a 查看确认.)
如果你使用squid的话,你要在/etc/init.d/squid的文件加入CentOS ulimit -HSn 65535.另外,在squid.conf中也要加入max_filedesc 16384
freebsd下的ulimit命令在哪里?
今天,一个网友问我freebsd的ulimit怎么没有,其实这个问题随便google一下就有了,网上现成就有答案的。
首先要看用的是什么shell,很多shell都有内部命令ulimit,不过freebsd的默认shell 是csh,它的对应内部命令是limit不是ulimit,freebsd还有一个外部命令limits,freebsd中需要改变这些资源使用限制只能用外部命令,内部命令改不了,如果你一定要用ulimit的话,就只能安装有ulimit内部命令的shell,比如bash,sh。
前面说到我放弃IIS全面转向apache了,随后因为小丫头的出生,一直都比较忙,也没空仔细检查。这两天稍微闲了点,让我发现居然有两处乱码问题:一处是后台编辑文章处的“热门标签”,中文标签全部乱码;另一处则是安装的WP-RecentComments插件,在侧边栏首页显示正常,但一点下一页后就会变乱码了。
经过查询得知都是因为apache编码设置的问题,因为原本我服务器上的apache上运行的一套系统文件编码是gb2312,httpd.conf中设置AddDefaultCharset gb2312,从而导致wp中某些模块无法正常以utf-8编码解析。折腾了一下午,总算是解决了让apache同时支持GBK和UTF-8编码。
以下为具体解决方法:
1、httpd.conf中设置AddDefaultCharset off,并在原gb2312编码系统所设置的虚拟主机字段中加入AddDefaultCharset gb2312。
2、注释掉php.ini文件中的default_charset = “gb2312″
3、重启apache服务,搞定!
来源:http://looki.cn/348.html
经过查询得知都是因为apache编码设置的问题,因为原本我服务器上的apache上运行的一套系统文件编码是gb2312,httpd.conf中设置AddDefaultCharset gb2312,从而导致wp中某些模块无法正常以utf-8编码解析。折腾了一下午,总算是解决了让apache同时支持GBK和UTF-8编码。
以下为具体解决方法:
1、httpd.conf中设置AddDefaultCharset off,并在原gb2312编码系统所设置的虚拟主机字段中加入AddDefaultCharset gb2312。
2、注释掉php.ini文件中的default_charset = “gb2312″
3、重启apache服务,搞定!
使用AddCharset变量将字符编码应用到指定后缀名的当前目录以及子目录的所有文件上。比如,为所有后缀名为.html的文件指定UTF-8字符编码,我们可以在.htaccess文件中加入一下代码:
AddCharset UTF-8 .html
后缀名可以是包括或者省略前面的”.”. 我们也可以在一行中同时指定多个后缀名。在一般情况下,最好将Apache的默认字符编码设置为UTF-8;
AddDefaultCharset utf-8
AddDefaultCharset可以为On/Off或者任何在IANA注册的,在MIME介质类型中使用的字符值。当且仅当响应的content-type是text/plain或text/html时,它会为介质类型字符参数指定默认的值。这个值会覆盖在响应中通过META指定的字符集,当然最后的行为还要取决于用户使用的客户端/游览器设置。当AddDefaultCharset为Off时,将关闭这个功能;设置为On时,将使用默认的字符集iso-8859-1;或为AddDefaultCharset指定可选的字符集比如UTF-8。
通过使用AddType也可以实现字符编码设置,这个参数会同时指定字符编码和MIME类型。
AddType 'text/html; charset=UTF-8' html
在Apache中,我们也可以为某一个特定的文件设置字符编码。比如,我们希望在一个文件夹中,只对文件example.html使用UTF-8,而其他文件仍然是用默认编码。我们可以编辑这个文件夹下的.htaccess文件,并添加如下内容:
<Files "example.html">
AddCharset UTF-8 .html
</Files>
通过以下配置,可以实现同样的效果:
<Files "example.html">
ForceType 'text/html; charset=UTF-8'
</Files>
我们也可以使用正则表达式为多个文件指定编码。例如:
<FilesMatch ".(htm|html|css|js)$">
AddCharset UTF-8 .html
</FilesMatch>
或
<FilesMatch ".(htm|html|css|js)$">
ForceType 'text/html; charset=UTF-8'
</FilesMatch>
注:需要注意的是配置参数的顺序对于结果起到重要的作用。比如在配置文件中有如下设置:
AddCharset UTF-8 .utf8
AddCharset windows-1252 .html
在这种配置下,文件example.utf8.html将使用windows-1252,而example.html.utf8将使用UTF-8字符编码;
AddCharset UTF-8 .html
后缀名可以是包括或者省略前面的”.”. 我们也可以在一行中同时指定多个后缀名。在一般情况下,最好将Apache的默认字符编码设置为UTF-8;
AddDefaultCharset utf-8
AddDefaultCharset可以为On/Off或者任何在IANA注册的,在MIME介质类型中使用的字符值。当且仅当响应的content-type是text/plain或text/html时,它会为介质类型字符参数指定默认的值。这个值会覆盖在响应中通过META指定的字符集,当然最后的行为还要取决于用户使用的客户端/游览器设置。当AddDefaultCharset为Off时,将关闭这个功能;设置为On时,将使用默认的字符集iso-8859-1;或为AddDefaultCharset指定可选的字符集比如UTF-8。
通过使用AddType也可以实现字符编码设置,这个参数会同时指定字符编码和MIME类型。
AddType 'text/html; charset=UTF-8' html
在Apache中,我们也可以为某一个特定的文件设置字符编码。比如,我们希望在一个文件夹中,只对文件example.html使用UTF-8,而其他文件仍然是用默认编码。我们可以编辑这个文件夹下的.htaccess文件,并添加如下内容:
<Files "example.html">
AddCharset UTF-8 .html
</Files>
通过以下配置,可以实现同样的效果:
<Files "example.html">
ForceType 'text/html; charset=UTF-8'
</Files>
我们也可以使用正则表达式为多个文件指定编码。例如:
<FilesMatch ".(htm|html|css|js)$">
AddCharset UTF-8 .html
</FilesMatch>
或
<FilesMatch ".(htm|html|css|js)$">
ForceType 'text/html; charset=UTF-8'
</FilesMatch>
注:需要注意的是配置参数的顺序对于结果起到重要的作用。比如在配置文件中有如下设置:
AddCharset UTF-8 .utf8
AddCharset windows-1252 .html
在这种配置下,文件example.utf8.html将使用windows-1252,而example.html.utf8将使用UTF-8字符编码;
来源:http://looki.cn/348.html
参考:http://www.jackxiang.com/post/3170/
除了网上流传的环境配置以外,
在PHP程序中加上 ini_set('default_charset','utf-8');
将包含unicode码的文件统一转换成utf8格式,这里需要注意的是editplus保存的utf8文件不带BOM头,
这在大多数情况下不会有什么问题,而在模板输出时会有乱码现象,除了检查模板文件中utf8的标记之外,利用editplus来保存模板时没有BOM头也是一个原因,原因在于模板解析时,PHP读取文件时,没有检查到BOM头,会把该文件当成ansi格式处理,这样最终向浏览器输出的HTML就成了乱码。
另一篇文章:
我的页面代码如下
[Copy to clipboard] [ - ]CODE:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link rel="stylesheet" type="text/css" href=http://bbs.chinaunix.net/"script/css.css" />
<script type="text/javascript" src=http://bbs.chinaunix.net/"script/menu.js"></script>
</head>
<body class="leftbgcolor">
<div><imgsrc=http://bbs.chinaunix.net/"image/gl.gif" border="0"/>관리센터</div>
编码选择utf-8,但是打开时ie自动选择的却是gb2312出现乱码,在DW里我选取择"包括Unicode签名(BOM)"后,ie自动选择utf8就不会出现乱码,我不想使用BOM,因为使用BOM后,session又会提示警告。大家说应该怎么办呢?
先去除 BOM。然后再加入:
[Copy to clipboard] [ - ]CODE:header('Content-Type: text/html; charset=UTF-8');
即可。
httpd.conf
AddDefaultCharset GB2312
PHP.INI
default_charset = "gb2312 "
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
如果你在网上搜索 “apache配置”,搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312。对于新手而且是只用GB2312编码的开发人来说,这么做是ok的。
但是如果要想使用UTF-8字符集的话,比如 在test.php文件中需要有
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 这段代码。这时你再打开浏览器访问test.php页面的话,你看到的是正确的页面。但是如果实际上浏览器还是以GB2312编码解释从服务器返回的response,为什么呢?原因是浏览器是根据http应答消息头部中的 Content-type: text/html; charset=GB2312 来决定使用何种编码解释应答,也就是说apache服务器仍然用GB2312编码传递数据。
所以说如果apache的默认字符集被设置成了GB2312,即使在页面中声明使用UTF-8编码,apache服务器还是会按照GB2312编码来传送http response。
没 关系,我们把AddDefaultCharset GB2312 改成 AddDefaultCharset UTF-8,看看什么结果?如果你看到乱码恭喜你,你还知道是乱码问题;如果你看到是空白页面,那么你就惨了,你可能会以为这是其他什么原因造成的,而不 会从编码的角度去考虑怎么解决问题。这是为什么?
原因在于php文件本身是用系统字符集来编码的,中文的windows XP都是用GB2312,每一个文件头部都有字段指示该文件是用何种方式编码的。当apache接到浏览器的请求后,会让php去解释所请求的页面,比如 test.php。php会识别出test.php的编码方式是GB2312后(就像我们用javac编译java源文件时,编译器默认用系统编码读源文 件里的内容。如果源文件不是用系统编码来保存的,可以用命令javac -encoding指定具体的编码),把数据以GB2312的编码格式传递给apache,而apache服务器不会改变从php传来的数据,只是在应答 消息头部中把字符集设置成UTF-8: Content-type: text/html; charset=UTF-8. 也就是说你传递的是GB2312编码的数据,而浏览器却以UTF-8编码来解释应答消息。
由 于UTF-8为3个字节表示一个汉子,而普通的GB2312或BIG5是两个。页面输出时,由于上述原因,出现半个汉字的情况,这时该半个汉字会和的 >结合成一个乱码字,导致IE无法读完的话,会发现实际上整个叶面全部已经输出了。如果使用的是Mozilla、Mozilla Firefox、Sarafi的浏览器这不会造成这个问题,而是一堆乱码。这是由于Firefox浏览器和IE解析网页编码的策略不同产生的。
OK,我们把test.php以UTF-8保存,再用浏览器访问时,就没有问题了。可这样做,会使得apache目录下的所有web应用只能用同一种编码。如何搞定?
解决办法:
首先,可以使用AddDefaultCharset off来 关闭默认文件编码,这样apache服务器就不会在http应答消息头部设置charset,只是设置Content-type: text/html. 而浏览器就会依靠html文件中设置的harset来决定编码。其次,脚本php.ini文件中的default_charset = “UTF-8″作用同httpd.conf文件,把该行注释掉,使php自动识别文件的编码方式。
这样不论你用什么编码方式,只要test.php中的
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 与你test.php文件编码方式相同,就不会产生乱码问题。
用户提交数据的编码
浏 览器提交的字符编码由客户端的characher encoding决定。例如,当前浏览器的编码是Gb2312,用户提交数据后,无论apache设置的编码方式是GB2312还是UTF-8,这时在服 务器端接收到的仍是以Gb2312编码的数据。如果要在返回页面上显示用户刚才提交的数据,而该页面是用UTF-8编码,或者要在数据库中存储的用户提交 的数据,而数据库是UTF-8编码的,那就要做字符转换了。
除了网上流传的环境配置以外,
在PHP程序中加上 ini_set('default_charset','utf-8');
将包含unicode码的文件统一转换成utf8格式,这里需要注意的是editplus保存的utf8文件不带BOM头,
这在大多数情况下不会有什么问题,而在模板输出时会有乱码现象,除了检查模板文件中utf8的标记之外,利用editplus来保存模板时没有BOM头也是一个原因,原因在于模板解析时,PHP读取文件时,没有检查到BOM头,会把该文件当成ansi格式处理,这样最终向浏览器输出的HTML就成了乱码。
另一篇文章:
我的页面代码如下
[Copy to clipboard] [ - ]CODE:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link rel="stylesheet" type="text/css" href=http://bbs.chinaunix.net/"script/css.css" />
<script type="text/javascript" src=http://bbs.chinaunix.net/"script/menu.js"></script>
</head>
<body class="leftbgcolor">
<div><imgsrc=http://bbs.chinaunix.net/"image/gl.gif" border="0"/>관리센터</div>
编码选择utf-8,但是打开时ie自动选择的却是gb2312出现乱码,在DW里我选取择"包括Unicode签名(BOM)"后,ie自动选择utf8就不会出现乱码,我不想使用BOM,因为使用BOM后,session又会提示警告。大家说应该怎么办呢?
先去除 BOM。然后再加入:
[Copy to clipboard] [ - ]CODE:header('Content-Type: text/html; charset=UTF-8');
即可。
httpd.conf
AddDefaultCharset GB2312
PHP.INI
default_charset = "gb2312 "
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
如果你在网上搜索 “apache配置”,搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312。对于新手而且是只用GB2312编码的开发人来说,这么做是ok的。
但是如果要想使用UTF-8字符集的话,比如 在test.php文件中需要有
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 这段代码。这时你再打开浏览器访问test.php页面的话,你看到的是正确的页面。但是如果实际上浏览器还是以GB2312编码解释从服务器返回的response,为什么呢?原因是浏览器是根据http应答消息头部中的 Content-type: text/html; charset=GB2312 来决定使用何种编码解释应答,也就是说apache服务器仍然用GB2312编码传递数据。
所以说如果apache的默认字符集被设置成了GB2312,即使在页面中声明使用UTF-8编码,apache服务器还是会按照GB2312编码来传送http response。
没 关系,我们把AddDefaultCharset GB2312 改成 AddDefaultCharset UTF-8,看看什么结果?如果你看到乱码恭喜你,你还知道是乱码问题;如果你看到是空白页面,那么你就惨了,你可能会以为这是其他什么原因造成的,而不 会从编码的角度去考虑怎么解决问题。这是为什么?
原因在于php文件本身是用系统字符集来编码的,中文的windows XP都是用GB2312,每一个文件头部都有字段指示该文件是用何种方式编码的。当apache接到浏览器的请求后,会让php去解释所请求的页面,比如 test.php。php会识别出test.php的编码方式是GB2312后(就像我们用javac编译java源文件时,编译器默认用系统编码读源文 件里的内容。如果源文件不是用系统编码来保存的,可以用命令javac -encoding指定具体的编码),把数据以GB2312的编码格式传递给apache,而apache服务器不会改变从php传来的数据,只是在应答 消息头部中把字符集设置成UTF-8: Content-type: text/html; charset=UTF-8. 也就是说你传递的是GB2312编码的数据,而浏览器却以UTF-8编码来解释应答消息。
由 于UTF-8为3个字节表示一个汉子,而普通的GB2312或BIG5是两个。页面输出时,由于上述原因,出现半个汉字的情况,这时该半个汉字会和的 >结合成一个乱码字,导致IE无法读完的话,会发现实际上整个叶面全部已经输出了。如果使用的是Mozilla、Mozilla Firefox、Sarafi的浏览器这不会造成这个问题,而是一堆乱码。这是由于Firefox浏览器和IE解析网页编码的策略不同产生的。
OK,我们把test.php以UTF-8保存,再用浏览器访问时,就没有问题了。可这样做,会使得apache目录下的所有web应用只能用同一种编码。如何搞定?
解决办法:
首先,可以使用AddDefaultCharset off来 关闭默认文件编码,这样apache服务器就不会在http应答消息头部设置charset,只是设置Content-type: text/html. 而浏览器就会依靠html文件中设置的harset来决定编码。其次,脚本php.ini文件中的default_charset = “UTF-8″作用同httpd.conf文件,把该行注释掉,使php自动识别文件的编码方式。
这样不论你用什么编码方式,只要test.php中的
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 与你test.php文件编码方式相同,就不会产生乱码问题。
用户提交数据的编码
浏 览器提交的字符编码由客户端的characher encoding决定。例如,当前浏览器的编码是Gb2312,用户提交数据后,无论apache设置的编码方式是GB2312还是UTF-8,这时在服 务器端接收到的仍是以Gb2312编码的数据。如果要在返回页面上显示用户刚才提交的数据,而该页面是用UTF-8编码,或者要在数据库中存储的用户提交 的数据,而数据库是UTF-8编码的,那就要做字符转换了。
1.查看CPU信息命令
cat /proc/cpuinfo
2.查看内存信息命令
cat /proc/meminfo
3.查看硬盘信息命令
fdisk -l
cat /proc/cpuinfo
2.查看内存信息命令
cat /proc/meminfo
3.查看硬盘信息命令
fdisk -l





