使用 rinetd 进行端口转发, linux下简单好用的端口映射转发工具rinetd。
Unix/LinuxC技术 jackxiang 2011-5-12 12:56
安装rinetd
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
tar -zxvf rinetd.tar.gz
cd rinetd
make;make install
配置文件
vi /etc/rinetd.conf
最简单的配置方式
192.168.1.100 80 192.168.1.200 80
这样就完成了
然后你所有对于 192.168.1.100 80端口的访问将转发到 192.168.1.200 的80端口上
但是有个前提就是 192.168.1.100这台机子上的没有启动任何占用80端口的进程,如apache等;否则将转发不成功。
PS:他只能转发TCP的端口,不能转发UDP以及其他协议的端口;
rinetd的详细配置教程
http://hi.baidu.com/opbsder/blog/item/31d6f545a1c2f9318694734a.html
——————————————————————————————————————————————————————————————
linux下简单好用的工具rinetd,实现端口映射/转发/重定向
官网地址http://www.boutell.com/rinetd
软件下载
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
解压安装
tar zxvf rinetd.tar.gz
make
make install
编辑配置
vi /etc/rinetd.conf
0.0.0.0 8080 172.19.94.3 8080
0.0.0.0 2222 192.168.0.103 3389
1.2.3.4 80 192.168.0.10 80
说明一下(0.0.0.0表示本机绑定所有可用地址)
将所有发往本机8080端口的请求转发到172.19.94.3的8080端口
将所有发往本机2222端口的请求转发到192.168.0.103的3389端口
将所有发往1.2.3.4的80端口请求转发到192.168.0.10的80端口
命令格式是
bindaddress bindport connectaddress connectport
绑定的地址 绑定的端口 连接的地址 连接的端口
或
[Source Address] [Source Port] [Destination Address] [Destination Port]
源地址 源端口 目的地址 目的端口
启动程序
pkill rinetd ##关闭进程
rinetd -c /etc/rinetd.conf ##启动转发
把这条命令加到/etc/rc.local里面就可以开机自动运行
查看状态
netstat -antup
需要注意
1.rinetd.conf中绑定的本机端口必须没有被其它程序占用
2.运行rinetd的系统防火墙应该打开绑定的本机端口
例如:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1111 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT
来自:http://blog.csdn.net/paulluo0739/article/details/7023711
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
tar -zxvf rinetd.tar.gz
cd rinetd
make;make install
配置文件
vi /etc/rinetd.conf
最简单的配置方式
192.168.1.100 80 192.168.1.200 80
这样就完成了
然后你所有对于 192.168.1.100 80端口的访问将转发到 192.168.1.200 的80端口上
但是有个前提就是 192.168.1.100这台机子上的没有启动任何占用80端口的进程,如apache等;否则将转发不成功。
PS:他只能转发TCP的端口,不能转发UDP以及其他协议的端口;
rinetd的详细配置教程
http://hi.baidu.com/opbsder/blog/item/31d6f545a1c2f9318694734a.html
——————————————————————————————————————————————————————————————
linux下简单好用的工具rinetd,实现端口映射/转发/重定向
官网地址http://www.boutell.com/rinetd
软件下载
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
解压安装
tar zxvf rinetd.tar.gz
make
make install
编辑配置
vi /etc/rinetd.conf
0.0.0.0 8080 172.19.94.3 8080
0.0.0.0 2222 192.168.0.103 3389
1.2.3.4 80 192.168.0.10 80
说明一下(0.0.0.0表示本机绑定所有可用地址)
将所有发往本机8080端口的请求转发到172.19.94.3的8080端口
将所有发往本机2222端口的请求转发到192.168.0.103的3389端口
将所有发往1.2.3.4的80端口请求转发到192.168.0.10的80端口
命令格式是
bindaddress bindport connectaddress connectport
绑定的地址 绑定的端口 连接的地址 连接的端口
或
[Source Address] [Source Port] [Destination Address] [Destination Port]
源地址 源端口 目的地址 目的端口
启动程序
pkill rinetd ##关闭进程
rinetd -c /etc/rinetd.conf ##启动转发
把这条命令加到/etc/rc.local里面就可以开机自动运行
查看状态
netstat -antup
需要注意
1.rinetd.conf中绑定的本机端口必须没有被其它程序占用
2.运行rinetd的系统防火墙应该打开绑定的本机端口
例如:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1111 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT
来自:http://blog.csdn.net/paulluo0739/article/details/7023711
[实践OK]Linux 下的du命令结合awk通过du来扫描大于G的文件夹,新加所有文件上G的查找方法-from:scottjiang江庆海,外加上文件层级大小统计。
Unix/LinuxC技术 jackxiang 2011-5-12 12:48
一、查找上G的文件:
列出上G并删除的命令,如果加上 |sh 就能删除掉:
find /data/logs/nginx -type f -name "*.log-*" |xargs -i du -lh {} |awk '{if(match($1, "G")>0) print $0}' |awk '{print "rm -Rf " $2}'
du -sh /data/logs/swoole/swoole.log
99G /data/logs/swoole/swoole.log
上G的日志/data/logs/swoole/swoole.log清空即可:
find /data/logs/swoole -type f -name "*.log" |xargs -i du -lh {} |awk '{if(match($1, "G")>0) print $0}' |awk '{print "echo > " $2}'|sh
#定时清空swoole测试机上上G的文件
* 1 * * * find /data/logs/swoole -type f -name "*.log" |xargs -i du -lh {} |awk '{if(match($1, "G")>0) print $0}' |awk '{print "echo > " $2}'|sh
二、查找上的G目录:
这样来查找:
示例Demo:
root@116.255.139.240:/data1/logs# find . -name "*" |du -sh *|awk '{if(match($1, "G")>0) print $0 }'
5.0G access.log
Linux中清理磁盘空间时,经常需要找出大于200M的文件。
这个命令可以实现这个功能:
find / -size +200M -exec du -h {} \;
http://blog.csdn.net/yfleng2002/article/details/8080556
三、文件夹大小的及层级统计:
du -h --max-depth=1 |grep 'G' |sort #查看上G目录并排序
du -h --max-depth=0 user
--max-depth=n表示仅仅深入到第n层文件夹,此处设置为0,即表示不深入到子文件夹。
du -h --max-depth=1 /home/|grep [M] |sort #查看上M目录并排序
21M /home/jackx
32M /home/
9.2M /home/jackxiang
du -h --max-depth=1 |sort #查看当前目录下所有一级子目录文件夹大小 并排序
1.2G .
12K ./.ssh
16K ./.gconfd
16K ./js
45M ./yucc
464K ./s
48K ./.gconf
48K ./.subversion
参考:http://www.cnblogs.com/mfryf/p/3243211.html
awk match用法,上面是返回值作上G判断,还能正则,如下:
cat test
this is wang ,not wan
that is chen, not che
this is chen ,and wang ,not wan che
awk '{match($0,/.+is([^,]+).+not(.+)/,a);print a[1],a[2]}' test
wang wan
chen che
chen wan che
来自:https://www.cnblogs.com/timeisbiggestboss/p/7242351.html
列出上G并删除的命令,如果加上 |sh 就能删除掉:
find /data/logs/nginx -type f -name "*.log-*" |xargs -i du -lh {} |awk '{if(match($1, "G")>0) print $0}' |awk '{print "rm -Rf " $2}'
du -sh /data/logs/swoole/swoole.log
99G /data/logs/swoole/swoole.log
上G的日志/data/logs/swoole/swoole.log清空即可:
find /data/logs/swoole -type f -name "*.log" |xargs -i du -lh {} |awk '{if(match($1, "G")>0) print $0}' |awk '{print "echo > " $2}'|sh
#定时清空swoole测试机上上G的文件
* 1 * * * find /data/logs/swoole -type f -name "*.log" |xargs -i du -lh {} |awk '{if(match($1, "G")>0) print $0}' |awk '{print "echo > " $2}'|sh
二、查找上的G目录:
这样来查找:
示例Demo:
root@116.255.139.240:/data1/logs# find . -name "*" |du -sh *|awk '{if(match($1, "G")>0) print $0 }'
5.0G access.log
Linux中清理磁盘空间时,经常需要找出大于200M的文件。
这个命令可以实现这个功能:
find / -size +200M -exec du -h {} \;
http://blog.csdn.net/yfleng2002/article/details/8080556
三、文件夹大小的及层级统计:
du -h --max-depth=1 |grep 'G' |sort #查看上G目录并排序
du -h --max-depth=0 user
--max-depth=n表示仅仅深入到第n层文件夹,此处设置为0,即表示不深入到子文件夹。
du -h --max-depth=1 /home/|grep [M] |sort #查看上M目录并排序
21M /home/jackx
32M /home/
9.2M /home/jackxiang
du -h --max-depth=1 |sort #查看当前目录下所有一级子目录文件夹大小 并排序
1.2G .
12K ./.ssh
16K ./.gconfd
16K ./js
45M ./yucc
464K ./s
48K ./.gconf
48K ./.subversion
参考:http://www.cnblogs.com/mfryf/p/3243211.html
awk match用法,上面是返回值作上G判断,还能正则,如下:
cat test
this is wang ,not wan
that is chen, not che
this is chen ,and wang ,not wan che
awk '{match($0,/.+is([^,]+).+not(.+)/,a);print a[1],a[2]}' test
wang wan
chen che
chen wan che
来自:https://www.cnblogs.com/timeisbiggestboss/p/7242351.html
ctrl + v才是块视图模式,用块模式选中多行,然后在按大些的I,写入注释如://,后按ESC,这些选中的多行也就都给注释了。
esc
0 跳到行首
ctrl+v 可视块模式
jjj 下移3行
I 进入插入模式
//
esc
整个做缩进:
=G
二)vi选中花括号里面的全部内容不包括{}:
在括号下面ctrl+V(大写v),后在k,到括号那一行(如果括号后有注释,得把光标放在{上后,再按%),然后按下%号,选中到了下面括号},再k到上一行,也就选中了括号里出的。
而这个sublime有一个快捷键:ctrl+shift+m:选中花括号里面的全部内容不包括{}。
阅读全文
esc
0 跳到行首
ctrl+v 可视块模式
jjj 下移3行
I 进入插入模式
//
esc
整个做缩进:
=G
二)vi选中花括号里面的全部内容不包括{}:
在括号下面ctrl+V(大写v),后在k,到括号那一行(如果括号后有注释,得把光标放在{上后,再按%),然后按下%号,选中到了下面括号},再k到上一行,也就选中了括号里出的。
而这个sublime有一个快捷键:ctrl+shift+m:选中花括号里面的全部内容不包括{}。
阅读全文
Linux的rpm包名称中经常有什么64位,32位,i386,i586,Noarch等等之类的,让人犯晕,不知道哪个是合适的。先一个一个搞清楚这些概念。
64位,32位指的是操作系统。
操作系统只是硬件和应用软件中间的一个平台。
32位操作系统针对的32位的CPU设计。
64位操作系统针对的64位的CPU设计。
32位处理器和64位处理器,其计数都是8的倍数。它表示一个时钟周期里,处理器处理的二进制代码数。32位处理器每个时钟周期处理32位数据即4个字节,64位处理器处理64位数据即8个字节。
2的32次方= 4G左右,很显然32位CPU只有4G左右的内存寻址空间,对于一些服务器来讲4G的内存的远远不够的了。而64位CPU的内存寻址空间是2的64次方=120GB左右。
用命令file /sbin/init或者getconf LONG_BIT可以查看是32位还是64位。
i386:几乎任何的X86平台,不论是旧的pentum或是新的pentum-IV和K7系统CPU,都能够正常工作,i指得是Intel兼容的CPU,至于386就是CPU的等级。
i586:就是586等级的电脑,包括pentum第一代MMX CPU,AMD的K5,K6系统CPU(socket7插脚)等CPU都是这个等级。
i686:pentum 2 以后的Intel系统CPU及K7以后等级的CPU都属于这个686等级。
Noarch:代表跟硬件体系结构无关。不管是 x86、PowerPC,Sparc 或 Alpha 系统。
来源:http://hi.baidu.com/simayilong80/blog/item/6c8e2651428164808c543080.html
64位,32位指的是操作系统。
操作系统只是硬件和应用软件中间的一个平台。
32位操作系统针对的32位的CPU设计。
64位操作系统针对的64位的CPU设计。
32位处理器和64位处理器,其计数都是8的倍数。它表示一个时钟周期里,处理器处理的二进制代码数。32位处理器每个时钟周期处理32位数据即4个字节,64位处理器处理64位数据即8个字节。
2的32次方= 4G左右,很显然32位CPU只有4G左右的内存寻址空间,对于一些服务器来讲4G的内存的远远不够的了。而64位CPU的内存寻址空间是2的64次方=120GB左右。
用命令file /sbin/init或者getconf LONG_BIT可以查看是32位还是64位。
i386:几乎任何的X86平台,不论是旧的pentum或是新的pentum-IV和K7系统CPU,都能够正常工作,i指得是Intel兼容的CPU,至于386就是CPU的等级。
i586:就是586等级的电脑,包括pentum第一代MMX CPU,AMD的K5,K6系统CPU(socket7插脚)等CPU都是这个等级。
i686:pentum 2 以后的Intel系统CPU及K7以后等级的CPU都属于这个686等级。
Noarch:代表跟硬件体系结构无关。不管是 x86、PowerPC,Sparc 或 Alpha 系统。
来源:http://hi.baidu.com/simayilong80/blog/item/6c8e2651428164808c543080.html
Alternative PHP Cache (APC)是一种对PHP有效的开放源高速缓冲储存器工具,它能够隐藏编辑的脚本。
所以对于后来命令,如果它已经改变了,PHP只能重新编辑脚本。
主要是加速PHP
下载地址http://pecl.php.net/package/APC
解压 安装
/usr/local/php/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php/bin/php-config
make
make install
cp /usr/local/php/lib/php/extensions/no-debug-zts-20060613/apc.so /usr/local/php/lib/php/extensions/apc.so
chmod 755 /usr/local/php/lib/php/extensions/apc.so
配置/etc/php.ini 末尾加入
extension=apc.so
apc.enabled = 1
apc.cache_by_default = on
apc.shm_segments = 1
apc.shm_size = 32
apc.ttl = 600
apc.user_ttl = 600
apc.num_files_hint = 0
apc.write_lock = On
重启apache
apc.cache_by_default = On
是否默认对所有文件启用缓冲。 若设为Off并与以加号开头的apc.filters指令一起用,则文件仅在匹配过滤器时才被缓存
apc.enabled = On
是否启用APC,如果APC被静态编译进PHP又想禁用它,这是唯一的办法。
pc.filters =
一个以逗号分隔的POSIX扩展正则表达式列表。
如果源文件名与任意一个模式匹配,则该文件不被缓存。
注意,用来匹配的文件名是传递给include/require的文件名,而不是绝对路径。
如果正则表达式的第一个字符是"+"则意味着任何匹配表达式的文件会被缓存,如果第一个字符是"-"则任何匹配项都不会被缓存。"-"是默认值,可以省略掉。
apc.ttl = 0
缓存条目在缓冲区中允许逗留的秒数。0 表示永不超时。建议值为7200~36000。设为 0 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。
apc.user_ttl = 0
类似于apc.ttl,只是针对每个用户而言,建议值为7200~36000。
apc.gc_ttl = 3600
缓存条目在垃圾回收表中能够存在的秒数
此值提供了一个安全措施,即使一个服务器进程在执行缓存的源文件时崩溃, 中.国.站长站
而且该源文件已经被修改,为旧版本分配的内存也不会被回收,直到达到此TTL值为止。设为零将禁用此特性。
pc.max_file_size = 1M
禁止大于此尺寸的文件被缓存。
apc.num_files_hint = 1000
Web服务器上可能被包含或被请求的不同源文件的大致数量(建议值为1024~4096)。
如果你不能确定,则设为 0 ;此设定主要用于拥有数千个源文件的站点。
apc.shm_segments = 1
为编译器缓冲区分配的共享内存块数量(建议值为1)。
如果APC耗尽了共享内存,并且已将apc.shm_size指令设为系统允许的最大值,你可以尝试增大此值。
apc.shm_size = 30
每个共享内存块的大小(以MB为单位,建议值为128~256)。
有些系统(包括大多数BSD变种)默认的共享内存块大小非常少。
apc.write_lock = On
是否启用写入锁。
在非常繁忙的服务器上,无论是启动服务还是修改文件,都可能由于多个进程企图同时缓存一个文件而导致竞争条件
启用该指令可以避免竞争条件的出现。下面贴出本人试验的以及拷贝的一兄弟的试验代码apc1.php<?php
/*
ob_start();
$info="My apc";
apc_store("info",$info);
//echo apc_fetch("info");
echo apc_cache_info ();
*/
?>
<?php
//apc test
//constants
$constants = array('APC_FILE' => 'apc.php', 'AUTHOR' => 'tim');
apc_define_constants('numbers', $constants);
apc_load_constants('numbers');
echo 'APC_FILE='.APC_FILE.'<br>';
echo 'AUTHOR='.AUTHOR.'<br>';//variable
if(!apc_fetch('time1')) apc_store('time1', time());
if(!apc_fetch('time2')) apc_store('time2', time(),2); //set ttl
echo 'time1:'.apc_fetch('time1').'<br>';
echo 'time2:'.apc_fetch('time2').'<br>';//object
class a{
function b(){return 'i am b in class a';}
}
apc_store('obj',new a());
$a = apc_fetch('obj');
echo $a->b();
echo '<br>';
//array
$arr = array('a'=>'i am a','b'=>'i am b');
apc_store('arr',$arr);
$apc_arr = apc_fetch('arr');
print_r($apc_arr);
?> apc2.php<?php
echo apc_fetch("info");
apc_load_constants('numbers');
echo 'APC_FILE='.APC_FILE.'<br>';
echo 'AUTHOR='.AUTHOR.'<br>';
?>
来源:http://home.phpchina.com/space.php?uid=29824&do=blog&id=40482
所以对于后来命令,如果它已经改变了,PHP只能重新编辑脚本。
主要是加速PHP
下载地址http://pecl.php.net/package/APC
解压 安装
/usr/local/php/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php/bin/php-config
make
make install
cp /usr/local/php/lib/php/extensions/no-debug-zts-20060613/apc.so /usr/local/php/lib/php/extensions/apc.so
chmod 755 /usr/local/php/lib/php/extensions/apc.so
配置/etc/php.ini 末尾加入
extension=apc.so
apc.enabled = 1
apc.cache_by_default = on
apc.shm_segments = 1
apc.shm_size = 32
apc.ttl = 600
apc.user_ttl = 600
apc.num_files_hint = 0
apc.write_lock = On
重启apache
apc.cache_by_default = On
是否默认对所有文件启用缓冲。 若设为Off并与以加号开头的apc.filters指令一起用,则文件仅在匹配过滤器时才被缓存
apc.enabled = On
是否启用APC,如果APC被静态编译进PHP又想禁用它,这是唯一的办法。
pc.filters =
一个以逗号分隔的POSIX扩展正则表达式列表。
如果源文件名与任意一个模式匹配,则该文件不被缓存。
注意,用来匹配的文件名是传递给include/require的文件名,而不是绝对路径。
如果正则表达式的第一个字符是"+"则意味着任何匹配表达式的文件会被缓存,如果第一个字符是"-"则任何匹配项都不会被缓存。"-"是默认值,可以省略掉。
apc.ttl = 0
缓存条目在缓冲区中允许逗留的秒数。0 表示永不超时。建议值为7200~36000。设为 0 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。
apc.user_ttl = 0
类似于apc.ttl,只是针对每个用户而言,建议值为7200~36000。
apc.gc_ttl = 3600
缓存条目在垃圾回收表中能够存在的秒数
此值提供了一个安全措施,即使一个服务器进程在执行缓存的源文件时崩溃, 中.国.站长站
而且该源文件已经被修改,为旧版本分配的内存也不会被回收,直到达到此TTL值为止。设为零将禁用此特性。
pc.max_file_size = 1M
禁止大于此尺寸的文件被缓存。
apc.num_files_hint = 1000
Web服务器上可能被包含或被请求的不同源文件的大致数量(建议值为1024~4096)。
如果你不能确定,则设为 0 ;此设定主要用于拥有数千个源文件的站点。
apc.shm_segments = 1
为编译器缓冲区分配的共享内存块数量(建议值为1)。
如果APC耗尽了共享内存,并且已将apc.shm_size指令设为系统允许的最大值,你可以尝试增大此值。
apc.shm_size = 30
每个共享内存块的大小(以MB为单位,建议值为128~256)。
有些系统(包括大多数BSD变种)默认的共享内存块大小非常少。
apc.write_lock = On
是否启用写入锁。
在非常繁忙的服务器上,无论是启动服务还是修改文件,都可能由于多个进程企图同时缓存一个文件而导致竞争条件
启用该指令可以避免竞争条件的出现。下面贴出本人试验的以及拷贝的一兄弟的试验代码apc1.php<?php
/*
ob_start();
$info="My apc";
apc_store("info",$info);
//echo apc_fetch("info");
echo apc_cache_info ();
*/
?>
<?php
//apc test
//constants
$constants = array('APC_FILE' => 'apc.php', 'AUTHOR' => 'tim');
apc_define_constants('numbers', $constants);
apc_load_constants('numbers');
echo 'APC_FILE='.APC_FILE.'<br>';
echo 'AUTHOR='.AUTHOR.'<br>';//variable
if(!apc_fetch('time1')) apc_store('time1', time());
if(!apc_fetch('time2')) apc_store('time2', time(),2); //set ttl
echo 'time1:'.apc_fetch('time1').'<br>';
echo 'time2:'.apc_fetch('time2').'<br>';//object
class a{
function b(){return 'i am b in class a';}
}
apc_store('obj',new a());
$a = apc_fetch('obj');
echo $a->b();
echo '<br>';
//array
$arr = array('a'=>'i am a','b'=>'i am b');
apc_store('arr',$arr);
$apc_arr = apc_fetch('arr');
print_r($apc_arr);
?> apc2.php<?php
echo apc_fetch("info");
apc_load_constants('numbers');
echo 'APC_FILE='.APC_FILE.'<br>';
echo 'AUTHOR='.AUTHOR.'<br>';
?>
来源:http://home.phpchina.com/space.php?uid=29824&do=blog&id=40482
编辑文件httpd.conf
找到
Listen 80
在下面加一行
Listen 443
Listen 8080
注意:上面这个监听8080必须要,否则就有下面的端口依旧没法打开,通过:apachectl -t ,检查配置也是Ok的。
再找到我虚拟主机部分的:
NameVirtualHost *:8080
NameVirtualHost *:443
8080:
下面是抄下其他人的。。。
阅读全文
找到
Listen 80
在下面加一行
Listen 443
Listen 8080
注意:上面这个监听8080必须要,否则就有下面的端口依旧没法打开,通过:apachectl -t ,检查配置也是Ok的。
再找到我虚拟主机部分的:
NameVirtualHost *:8080
NameVirtualHost *:443
8080:
下面是抄下其他人的。。。
阅读全文
把encode的html通过decode转回来再strip_tags去掉冗余的html标签:
返回:
---------- 调试PHP ----------
替换前:<a href=/index.html style="font-size:12px" > jackX </a>
替换后: jackX
———————————htmlentities和htmlspecialchars区别———————————
---------- 调试PHP ----------
<a href="test.html">²âÊÔÒ³Ãæ</a>
<a href="test.html">测试页面</a>
如下结果所示:htmlentities把中文的测试页面也给变了。
—————————————————————————————————————————————————————
很多人都以为htmlentities跟htmlspecialchars的功能是一样的,都是格式化html代码的,我以前也曾这么认为,但是今天我发现并不是这样的。
这两个函数在格式化带有英文字符的html代码的时候基本没啥问题,但是htmlentities对中文字符也不放过,这样得出来的结果是中文字符部分变为一堆乱码。当时做英文站的时候根本就没觉察到这个问题,而今天公司的一个收藏站却因为有有非英文字符而出现了问题,我最终查出来是htmlentities这个函数的问题,同时我也找到了htmlspecialchars这个函数。
阅读全文
返回:
---------- 调试PHP ----------
替换前:<a href=/index.html style="font-size:12px" > jackX </a>
替换后: jackX
———————————htmlentities和htmlspecialchars区别———————————
---------- 调试PHP ----------
<a href="test.html">²âÊÔÒ³Ãæ</a>
<a href="test.html">测试页面</a>
如下结果所示:htmlentities把中文的测试页面也给变了。
—————————————————————————————————————————————————————
很多人都以为htmlentities跟htmlspecialchars的功能是一样的,都是格式化html代码的,我以前也曾这么认为,但是今天我发现并不是这样的。
这两个函数在格式化带有英文字符的html代码的时候基本没啥问题,但是htmlentities对中文字符也不放过,这样得出来的结果是中文字符部分变为一堆乱码。当时做英文站的时候根本就没觉察到这个问题,而今天公司的一个收藏站却因为有有非英文字符而出现了问题,我最终查出来是htmlentities这个函数的问题,同时我也找到了htmlspecialchars这个函数。
阅读全文
P – 以 CPU 占用率大小的顺序排列进程列表
M – 以内存占用率大小的顺序排列进程列表
使用 top 直接终止 CPU 消耗较大的进程
如前面所述,可以通过 top 命令查看系统的负载问题,并定位耗用较多 CPU 资源的进程。
可以直接在 top 运行界面快速终止相应的异常进程。说明如下:
想要终止某个进程,只需按下小写的 k 键。
输入想要终止的进程 PID (top 输出结果的第一列)。比如,如下图所示,假如想要终止 PID 为 23 的进程,输入 23 后按回车。
来自:https://help.aliyun.com/knowledge_detail/41225.html
如下图所示,操作成功后,界面会出现类似 “Send pid 23 signal [15/sigterm]” 的提示信息让用户进行确认。按回车确认即可。
CPU 使用率较低但负载较高
问题描述:
Linux 系统没有业务程序运行,通过 top 观察,类似如下图所示,CPU 很空闲,但是 load average 却非常高:
处理办法:
load average 是对 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。
出现此种情况时,可能是由于僵死进程导致的。可以通过指令 ps -axjf 查看是否存在 D 状态进程。
D 状态是指不可中断的睡眠状态。该状态的进程无法被 kill,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。
阅读全文
M – 以内存占用率大小的顺序排列进程列表
使用 top 直接终止 CPU 消耗较大的进程
如前面所述,可以通过 top 命令查看系统的负载问题,并定位耗用较多 CPU 资源的进程。
可以直接在 top 运行界面快速终止相应的异常进程。说明如下:
想要终止某个进程,只需按下小写的 k 键。
输入想要终止的进程 PID (top 输出结果的第一列)。比如,如下图所示,假如想要终止 PID 为 23 的进程,输入 23 后按回车。
来自:https://help.aliyun.com/knowledge_detail/41225.html
如下图所示,操作成功后,界面会出现类似 “Send pid 23 signal [15/sigterm]” 的提示信息让用户进行确认。按回车确认即可。
CPU 使用率较低但负载较高
问题描述:
Linux 系统没有业务程序运行,通过 top 观察,类似如下图所示,CPU 很空闲,但是 load average 却非常高:
处理办法:
load average 是对 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。
出现此种情况时,可能是由于僵死进程导致的。可以通过指令 ps -axjf 查看是否存在 D 状态进程。
D 状态是指不可中断的睡眠状态。该状态的进程无法被 kill,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。
阅读全文
实例如下:
修改/usr/local/webserver/nginx/conf/Nginx.conf
在尾部加上:
本人使用的Bo-blog版本Ver 2.1.1 博文量稍大显现出DB锁表问题
Php/Js/Shell/Go jackxiang 2011-5-6 20:11
我用的bo-blog,刚才,发现博客的服务器的负载很高,就一博客,不致与:
Top一看:
Mysql:
如下:
一看索引没有,赶紧加上索引:
SELECT `blogid`,`pubtime`,`edittime`,`blogalias` FROM `boblog_blogs` WHERE `property`<2 ORDER BY
alter table `boblog_blogs` add index property(property);
SELECT `blogid`,`title`,`blogalias` FROM `boblog_blogs` WHERE `property`<'2' AND `pubtime`<'13040783';
alter table `boblog_blogs` add index property_pubtime(property,pubtime);
SELECT * FROM `boblog_blogs` WHERE `property`<2 AND `frontpage`=0 ORDER BY `sticky`DESC, `pubtime`;
alter table `boblog_blogs` add index property_frontpage(property,frontpage);
博客次数和上面是一个表,索引加多了,update效率会不会下降?如下:
UPDATE LOW_PRIORITY `boblog_blogs` SET `views`=`views`+1 WHERE `blogid`='4257'
看来一个博客的访问设计仍旧需要考究和研究,我的博文也就3000多,DB性能就显现出来了。
后记:
查看后依旧有这样那样的小问题,但sleep和锁表大为缓解。
后来,负载降低,由25降低到5,说明还是有点效果滴嘛:
+----+-------------+--------------+-------+----------------------------------------------+----------+---------+------+------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+----------------------------------------------+----------+---------+------+------+-----------------------------+
| 1 | SIMPLE | boblog_blogs | range | property,property_pubtime,property_frontpage | property | 4 | NULL | 3526 | Using where; Using filesort |
+----+-------------+--------------+-------+----------------------------------------------+----------+---------+------+------+-----------------------------+
Top一看:
Mysql:
如下:
一看索引没有,赶紧加上索引:
SELECT `blogid`,`pubtime`,`edittime`,`blogalias` FROM `boblog_blogs` WHERE `property`<2 ORDER BY
alter table `boblog_blogs` add index property(property);
SELECT `blogid`,`title`,`blogalias` FROM `boblog_blogs` WHERE `property`<'2' AND `pubtime`<'13040783';
alter table `boblog_blogs` add index property_pubtime(property,pubtime);
SELECT * FROM `boblog_blogs` WHERE `property`<2 AND `frontpage`=0 ORDER BY `sticky`DESC, `pubtime`;
alter table `boblog_blogs` add index property_frontpage(property,frontpage);
博客次数和上面是一个表,索引加多了,update效率会不会下降?如下:
UPDATE LOW_PRIORITY `boblog_blogs` SET `views`=`views`+1 WHERE `blogid`='4257'
看来一个博客的访问设计仍旧需要考究和研究,我的博文也就3000多,DB性能就显现出来了。
后记:
查看后依旧有这样那样的小问题,但sleep和锁表大为缓解。
后来,负载降低,由25降低到5,说明还是有点效果滴嘛:
+----+-------------+--------------+-------+----------------------------------------------+----------+---------+------+------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+----------------------------------------------+----------+---------+------+------+-----------------------------+
| 1 | SIMPLE | boblog_blogs | range | property,property_pubtime,property_frontpage | property | 4 | NULL | 3526 | Using where; Using filesort |
+----+-------------+--------------+-------+----------------------------------------------+----------+---------+------+------+-----------------------------+
MySQL_LOAD_DATA权限设置
Php/Js/Shell/Go jackxiang 2011-5-6 09:44
Mysql版本号:
mysql> select version();
+------------+
| version() |
+------------+
| 5.0.26-log |
+------------+
配置:
vi /etc/my.cnf
有一行:
local-infile=1
但是导入DB的时候就是不行:
最后解决方法:
导入OK!
反过来证明其配置可能有问题。
具体原因待查,估计得从show variables入手思路:
不加参数:
一样的,奇怪了!!!
Mysql手册摘抄:
你可以用--local-infile=0选项启动mysqld从服务器端禁用所有LOAD DATA LOCAL命令。
对于mysql命令行客户端,可以通过指定--local-infile[=1]选项启用LOAD DATA LOCAL,或通过--local-infile=0选项禁用。类似地,对于mysqlimport,--local or -L选项启用本地数据文件装载。在任何情况下,成功进行本地装载需要服务器启用相关选项。
如果你使用LOAD DATA LOCAL Perl脚本或其它读选项文件中的[client]组的程序,你可以在组内添加local-infile=1选项。但是,为了便面不理解local-infile的程序产生问题,则规定使用loose- prefix:
·[client]
·loose-local-infile=1
·如果LOAD DATA LOCAL INFILE在服务器或客户端被禁用,试图执行该语句的客户端将收到下面的错误消息:
ERROR 1148: The used command is not allowed with this MySQL version
参考来源:
http://wenku.baidu.com/view/4b93ac10f18583d0496459a0.html
mysql> select version();
+------------+
| version() |
+------------+
| 5.0.26-log |
+------------+
配置:
vi /etc/my.cnf
有一行:
local-infile=1
但是导入DB的时候就是不行:
最后解决方法:
导入OK!
反过来证明其配置可能有问题。
具体原因待查,估计得从show variables入手思路:
不加参数:
一样的,奇怪了!!!
Mysql手册摘抄:
你可以用--local-infile=0选项启动mysqld从服务器端禁用所有LOAD DATA LOCAL命令。
对于mysql命令行客户端,可以通过指定--local-infile[=1]选项启用LOAD DATA LOCAL,或通过--local-infile=0选项禁用。类似地,对于mysqlimport,--local or -L选项启用本地数据文件装载。在任何情况下,成功进行本地装载需要服务器启用相关选项。
如果你使用LOAD DATA LOCAL Perl脚本或其它读选项文件中的[client]组的程序,你可以在组内添加local-infile=1选项。但是,为了便面不理解local-infile的程序产生问题,则规定使用loose- prefix:
·[client]
·loose-local-infile=1
·如果LOAD DATA LOCAL INFILE在服务器或客户端被禁用,试图执行该语句的客户端将收到下面的错误消息:
ERROR 1148: The used command is not allowed with this MySQL version
参考来源:
http://wenku.baidu.com/view/4b93ac10f18583d0496459a0.html
平凡的世界<yyddrr@qq.com> 11:42:34
请教一个正则的问题,如何匹配这样的字符串:(1),其中1是一位的数字,前后带小括号,用这三个字符结尾
平凡的世界<yyddrr@qq.com> 11:43:12
比如原字符串:“我是一个中国人(4)”,那这个就匹配。
平凡的世界<yyddrr@qq.com> 11:44:19
这些都不匹配:“我是一个(4)中国人”,“中国人(98)”,“我是一个中国人(4)”,“我是一个中国人(4d)”
回复如下:
单曲(67803698) 11:46:38
$pattern = '/(.*)\([0-9]\)$/';
平凡的世界<yyddrr@qq.com> 11:46:32
多谢单曲,测试一下
解释如下:
(.*): 匹配所有
[0-9]:匹配数字
\(:转意(
测试结果:
我也用editplus正则匹配了下,是Ok的。
\(\d\)$
回忆未来(372647693) 15:18:01
这: (.*) 怎么请?加了括号是什么意思。
我姓->苏(14044522) 15:18:25
任意字符的意思!
回忆未来(372647693) 15:18:54
.*:任意字符的意思
那括号呢?
莫莫(3296320) 15:18:54
任意
莫莫(3296320) 15:19:06
括号可加可不加
春江花月夜(6010707) 15:19:45
加括号可以用$1-9的方式捕获结果
.*\(\d\)$ 也成
春江花月夜(6010707) 15:20:16
如果只是验证字符串的格式,前面的(.*)匹配是多余的
也成,但是我用ediplus的正则发现不行,于是问了下,膘哥说:
editplus 3.2开始就有这个TR1设置:增加「使用 TR1 正则表达式」选项(「首选项」->「常规」)。TR1 regular expression才能\d!
TR1 正则表达式:简单的说,C++ TR1 regular expression library就是C++的正则表达式拓展。而按照帮助文档,该选项提供的正则表达式是ECMAScript(JavaScript)兼容的,比原来的正则表达式功能强大很多。
TR1正则表达式?这是什么东东?赶紧更新到EditPlus 3.21,打开帮助文档一看:
Use TR1 regular expression
Check this option to use C++ TR1 regular expression library instead of the previous regular expression feature. TR1 regular expression supports ECMAScript compatible and has more features but is slower than the previous one.
查了一下维基百科,C++ Technical Report 1 (TR1)是ISO/IEC TR 19768, C++ Library Extensions(函式库扩充)的一般名称。TR1是一份文件,内容提出了对C++标准函式库的追加项目。这些追加项目包括了正则表达式、智能指针、哈希表、随机数生成器等。TR1自己并非标准,他是一份草稿文件。
简单的说,C++ TR1 regular expression library就是C++的正则表达式拓展。而按照帮助文档,该选项提供的正则表达式是ECMAScript(JavaScript)兼容的,比原来的正则表达式功能强大很多。
我一直对EditPlus对正则表达式有限支持耿耿于怀,而Notepad++、UltraEdit、EmEditor等编辑器对于正则表达式的支持也不尽如人意。EditPad对正则表达式的支持很好,但是我又用不习惯,而且搜索多个文件的时候好像也用不了正则表达式。现在EditPlus 3.21增强正则表达式,真是太好了,强烈推荐!
Use TR1 regular expression选项默认设置是没有开启的,要选择Tools->Preferences,勾上才行。现在,只要是JavaScript的正则表达式能做到的,EditPlus也能做到。再次强烈推荐~
http://demon.tw/programming/c-tr1-regular-expression-library.html
再次摘录,以下来自:http://demon.tw/programming/c-tr1-regular-expression-library.html
C++ TR1 regular expression library,这是昨天在EditPlus里看到的,以前一直都没听说过。我不喜欢C++,自然也不会去了解这方面的东西。
据说VS2008 SP1已经基本上完全支持了TR1库,最新的VS2010也支持,正好机器上装有Visual C++ Express 2010,于是测试了一下。
能编译通过,输出2. Egg prices,结果也正确。但是TR1自己并非标准,他是一份草稿文件。然而他所提出的项目很有可能成为下次的官方标准。这份文件的目标在于“为扩充的C++标准函式库建立更为广泛的现成实作品”。当C++编译器开始支持得时候,非标准也许会变成事实的标准。
如果没记错的话这是本博客第一次写和C++有关的东西,但是纯粹是对这个EditPlus用的正则表达式库好奇而已,并不表示我对C++看法的改变。
Just use plain C, I don’t need C++ .
参考链接:
TR1 Regular Expressions:http://msdn.microsoft.com/en-us/library/bb982727.aspx
Getting started with C++ TR1 regular expressions:http://www.johndcook.com/cpp_regex.html
请教一个正则的问题,如何匹配这样的字符串:(1),其中1是一位的数字,前后带小括号,用这三个字符结尾
平凡的世界<yyddrr@qq.com> 11:43:12
比如原字符串:“我是一个中国人(4)”,那这个就匹配。
平凡的世界<yyddrr@qq.com> 11:44:19
这些都不匹配:“我是一个(4)中国人”,“中国人(98)”,“我是一个中国人(4)”,“我是一个中国人(4d)”
回复如下:
单曲(67803698) 11:46:38
$pattern = '/(.*)\([0-9]\)$/';
平凡的世界<yyddrr@qq.com> 11:46:32
多谢单曲,测试一下
解释如下:
(.*): 匹配所有
[0-9]:匹配数字
\(:转意(
测试结果:
我也用editplus正则匹配了下,是Ok的。
\(\d\)$
回忆未来(372647693) 15:18:01
这: (.*) 怎么请?加了括号是什么意思。
我姓->苏(14044522) 15:18:25
任意字符的意思!
回忆未来(372647693) 15:18:54
.*:任意字符的意思
那括号呢?
莫莫(3296320) 15:18:54
任意
莫莫(3296320) 15:19:06
括号可加可不加
春江花月夜(6010707) 15:19:45
加括号可以用$1-9的方式捕获结果
.*\(\d\)$ 也成
春江花月夜(6010707) 15:20:16
如果只是验证字符串的格式,前面的(.*)匹配是多余的
也成,但是我用ediplus的正则发现不行,于是问了下,膘哥说:
editplus 3.2开始就有这个TR1设置:增加「使用 TR1 正则表达式」选项(「首选项」->「常规」)。TR1 regular expression才能\d!
TR1 正则表达式:简单的说,C++ TR1 regular expression library就是C++的正则表达式拓展。而按照帮助文档,该选项提供的正则表达式是ECMAScript(JavaScript)兼容的,比原来的正则表达式功能强大很多。
TR1正则表达式?这是什么东东?赶紧更新到EditPlus 3.21,打开帮助文档一看:
Use TR1 regular expression
Check this option to use C++ TR1 regular expression library instead of the previous regular expression feature. TR1 regular expression supports ECMAScript compatible and has more features but is slower than the previous one.
查了一下维基百科,C++ Technical Report 1 (TR1)是ISO/IEC TR 19768, C++ Library Extensions(函式库扩充)的一般名称。TR1是一份文件,内容提出了对C++标准函式库的追加项目。这些追加项目包括了正则表达式、智能指针、哈希表、随机数生成器等。TR1自己并非标准,他是一份草稿文件。
简单的说,C++ TR1 regular expression library就是C++的正则表达式拓展。而按照帮助文档,该选项提供的正则表达式是ECMAScript(JavaScript)兼容的,比原来的正则表达式功能强大很多。
我一直对EditPlus对正则表达式有限支持耿耿于怀,而Notepad++、UltraEdit、EmEditor等编辑器对于正则表达式的支持也不尽如人意。EditPad对正则表达式的支持很好,但是我又用不习惯,而且搜索多个文件的时候好像也用不了正则表达式。现在EditPlus 3.21增强正则表达式,真是太好了,强烈推荐!
Use TR1 regular expression选项默认设置是没有开启的,要选择Tools->Preferences,勾上才行。现在,只要是JavaScript的正则表达式能做到的,EditPlus也能做到。再次强烈推荐~
http://demon.tw/programming/c-tr1-regular-expression-library.html
再次摘录,以下来自:http://demon.tw/programming/c-tr1-regular-expression-library.html
C++ TR1 regular expression library,这是昨天在EditPlus里看到的,以前一直都没听说过。我不喜欢C++,自然也不会去了解这方面的东西。
据说VS2008 SP1已经基本上完全支持了TR1库,最新的VS2010也支持,正好机器上装有Visual C++ Express 2010,于是测试了一下。
能编译通过,输出2. Egg prices,结果也正确。但是TR1自己并非标准,他是一份草稿文件。然而他所提出的项目很有可能成为下次的官方标准。这份文件的目标在于“为扩充的C++标准函式库建立更为广泛的现成实作品”。当C++编译器开始支持得时候,非标准也许会变成事实的标准。
如果没记错的话这是本博客第一次写和C++有关的东西,但是纯粹是对这个EditPlus用的正则表达式库好奇而已,并不表示我对C++看法的改变。
Just use plain C, I don’t need C++ .
参考链接:
TR1 Regular Expressions:http://msdn.microsoft.com/en-us/library/bb982727.aspx
Getting started with C++ TR1 regular expressions:http://www.johndcook.com/cpp_regex.html
CentOS6.0,我是这样安装的,如下:
使用方法:
中国国家授时中央的IP地址是:210.72.145.44,得这样:
VPS时间老是走不准,只好搞这个来同步一下:
Centos:
yum install -y ntp
客户端设置:
1、Linux服务器可通过 ntpdate 命令与时间服务器同步(如果没有安装ntp软件,CentOS可以通过“yum install ntp”命令安装):
/usr/sbin/ntpdate ntp.api.bz
如果想定时执行ntpdate进行时间同步,可以通过crontab来进行:
crontab -e
输入以下内容,每小时的第19分钟做一次时间同步:
19 * * * * /usr/sbin/ntpdate ntp.api.bz
#date -s 2004/10/16
将系统时间设定成下午1点12分0秒的命令如下。
#date -s 13:12:00
---- 注意,这里说的是系统时间,是linux由操作系统维护的。
---- 在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性, Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。如果要确保修改生效可以执行如下命令。
---- #clock -w
---- 这个命令强制把系统时间写入CMOS。
你也可以通过源码安装,参考:
http://it.chinawin.net/os/article-12702.html
-bash: crontab: command not found:
yum install -y vixie-cron
1. 确认crontab是否安装:
执行 crontab 命令如果报 command not found,就表明没有安装
2. 安装 crontab
执行 yum install -y vixie-cron
3. 确认是否安装成功:
执行 crontab -l
4. 看是否设置了开机自动启动
chkconfig --list crond
5. 启动crontab
service crond start
^Croot@192.168.98.128:~# chkconfig --list crond
crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
使用方法:
中国国家授时中央的IP地址是:210.72.145.44,得这样:
VPS时间老是走不准,只好搞这个来同步一下:
Centos:
yum install -y ntp
客户端设置:
1、Linux服务器可通过 ntpdate 命令与时间服务器同步(如果没有安装ntp软件,CentOS可以通过“yum install ntp”命令安装):
/usr/sbin/ntpdate ntp.api.bz
如果想定时执行ntpdate进行时间同步,可以通过crontab来进行:
crontab -e
输入以下内容,每小时的第19分钟做一次时间同步:
19 * * * * /usr/sbin/ntpdate ntp.api.bz
#date -s 2004/10/16
将系统时间设定成下午1点12分0秒的命令如下。
#date -s 13:12:00
---- 注意,这里说的是系统时间,是linux由操作系统维护的。
---- 在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性, Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。如果要确保修改生效可以执行如下命令。
---- #clock -w
---- 这个命令强制把系统时间写入CMOS。
你也可以通过源码安装,参考:
http://it.chinawin.net/os/article-12702.html
-bash: crontab: command not found:
yum install -y vixie-cron
1. 确认crontab是否安装:
执行 crontab 命令如果报 command not found,就表明没有安装
2. 安装 crontab
执行 yum install -y vixie-cron
3. 确认是否安装成功:
执行 crontab -l
4. 看是否设置了开机自动启动
chkconfig --list crond
5. 启动crontab
service crond start
^Croot@192.168.98.128:~# chkconfig --list crond
crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
发现Discuz 验证用户是否在线的机制 非常有趣, 这里到时难住了我一个之前没怎么接触过Web系统的,唉,搞了半天才发现,Discuz!X 的判断是否在线的机制,不是跟我们普通想象的在数据库中又一个标志位来标识是否在线。
Discuz在数据库中是没有这个标志位的,只有在pre_common_onlinetime和pre_forum_onlinelist中提到在线相关的,不过pre_common_onlinetime是记录每个用户(UID)在线的总时间的,(据说:这个记录在线总时间的方法就是,每十分钟记录一次在线时间,然后累加在这张表中,不过这个任务我一直没有发现,这个好像是NT版本的 不知道PHP是不是也这样)
还有一张表 pre_forum_onlinelist 用来记录当前在线成员列表的,不过这个列表不是当前在线的成员,而是title
Discuz 判断登录是通过Cookie来判断的,我做过实验,如果我把一位已经登录的用户的SID从session表中删除,然后在刷新刚才已经登录的页面,此时这个用户还是在线的状态,从这里可以判断出,不是通过session表中的数据来判断的,当然我也没发现其它的标志是否在线的表。
说明:Discuz 的Cookie 和 server的session 是分开的,相对独立的。
由于第一次接触Web系统,所以还有很多需要学习的!
接下来要努力研究一下Discuz 的Cookie,她到底是什么样的机制!
希望分析过Discuz 的朋友 多多探讨!
参考:
http://www.mzlhappy.com/72.html
http://www.discuz.net/thread-2135200-1-1.html
请问体哥:如何设置延长用户在线时间?以前我的老论坛可以设置用户在线最高时间。比如:180分钟,用户只要没有退出,自行离开论坛后还是显示他在线!!DZ7有办法设置或者修改代码吗?谢谢!
在线时间设定的太短,稍微间隔下就会自动下线,感觉不是很好,能否改进呢?
后台 -- 全局 -- 优化设置 -- 服务器优化,在线时间保持时间:
Discuz在数据库中是没有这个标志位的,只有在pre_common_onlinetime和pre_forum_onlinelist中提到在线相关的,不过pre_common_onlinetime是记录每个用户(UID)在线的总时间的,(据说:这个记录在线总时间的方法就是,每十分钟记录一次在线时间,然后累加在这张表中,不过这个任务我一直没有发现,这个好像是NT版本的 不知道PHP是不是也这样)
还有一张表 pre_forum_onlinelist 用来记录当前在线成员列表的,不过这个列表不是当前在线的成员,而是title
Discuz 判断登录是通过Cookie来判断的,我做过实验,如果我把一位已经登录的用户的SID从session表中删除,然后在刷新刚才已经登录的页面,此时这个用户还是在线的状态,从这里可以判断出,不是通过session表中的数据来判断的,当然我也没发现其它的标志是否在线的表。
说明:Discuz 的Cookie 和 server的session 是分开的,相对独立的。
由于第一次接触Web系统,所以还有很多需要学习的!
接下来要努力研究一下Discuz 的Cookie,她到底是什么样的机制!
希望分析过Discuz 的朋友 多多探讨!
参考:
http://www.mzlhappy.com/72.html
http://www.discuz.net/thread-2135200-1-1.html
请问体哥:如何设置延长用户在线时间?以前我的老论坛可以设置用户在线最高时间。比如:180分钟,用户只要没有退出,自行离开论坛后还是显示他在线!!DZ7有办法设置或者修改代码吗?谢谢!
在线时间设定的太短,稍微间隔下就会自动下线,感觉不是很好,能否改进呢?
后台 -- 全局 -- 优化设置 -- 服务器优化,在线时间保持时间:
错误编号:145
问题分析:
这种情况是不能打开 %s.MYI 造成的,引起这种情况可能的原因有:
1、服务器非正常关机,数据库所在空间已满,或一些其它未知的原因,对数据库表造成了损坏。
2、类 unix 操作系统下直接将数据库文件拷贝移动会因为文件的属组问题而产生这个错误。
解决方法:
1、修复数据表
可以使用下面的三种方式修复数据表:(第二种方法仅适合独立主机用户)
1)使用 myisamchk ,MySQL 自带了专门用户数据表检查和修复的工具 —— myisamchk 。更改当前目录到 MySQL安装目录的 bin 目录下面,一般情况下只有在这个下面才能运行 myisamchk 命令。常用的修复命令为:
myisamchk -r 数据文件目录/数据表名.MYI;
CODE: [COPY]
myisamchk -r 数据文件目录/数据表名.MYI;
2)通过 phpMyAdmin 修复, phpMyAdmin 带有修复数据表的功能,进入到某一个表中后,点击“操作”,在下方的“表维护”中点击“修复表”即可。
注意:以上三种修复方式在执行前一定要备份数据库。
2、修改文件的属组(仅适合独立主机用户)
1)复制数据库文件的过程中没有将数据库文件设置为 MySQL 运行的帐号可读写(一般适用于 Linux 和 FreeBSD 用户)。
问题分析:
这种情况是不能打开 %s.MYI 造成的,引起这种情况可能的原因有:
1、服务器非正常关机,数据库所在空间已满,或一些其它未知的原因,对数据库表造成了损坏。
2、类 unix 操作系统下直接将数据库文件拷贝移动会因为文件的属组问题而产生这个错误。
解决方法:
1、修复数据表
可以使用下面的三种方式修复数据表:(第二种方法仅适合独立主机用户)
1)使用 myisamchk ,MySQL 自带了专门用户数据表检查和修复的工具 —— myisamchk 。更改当前目录到 MySQL安装目录的 bin 目录下面,一般情况下只有在这个下面才能运行 myisamchk 命令。常用的修复命令为:
myisamchk -r 数据文件目录/数据表名.MYI;
CODE: [COPY]
myisamchk -r 数据文件目录/数据表名.MYI;
2)通过 phpMyAdmin 修复, phpMyAdmin 带有修复数据表的功能,进入到某一个表中后,点击“操作”,在下方的“表维护”中点击“修复表”即可。
注意:以上三种修复方式在执行前一定要备份数据库。
2、修改文件的属组(仅适合独立主机用户)
1)复制数据库文件的过程中没有将数据库文件设置为 MySQL 运行的帐号可读写(一般适用于 Linux 和 FreeBSD 用户)。
将TCP/IP、UDP网络协议映射成本机的虚拟COM口,用于串口服务器、GPRS/CDMA、EIO联网等产品的虚拟串口映射。也可以用于调试各类串口软件,内建虚拟串口互联插件,可以互联若干对虚拟串口,内部集成Telnet管理器。
收费版支持Windows98/2000/XP/2003/VISTA/Win7。免费版只支持WindowsXP操作系统。
适用于我公司所有具备以太网接口的设备。
V2.82重要更新:
1.Server模式下,一个COM口可支持无限个Client连接,但免费版只允许前3个TCP/IP连接与COM口双向数据通讯,其他连接为单向通讯。VSPM3收费版没有此限制。
2.Client模式下,支持动态域名解析,远程主机地址可以直接指定域名,比如www.google.com。
DownLoad:
http://www.powerip.net/download/vspm.rar
参考:
http://article.ednchina.com/Other/20090721103435.htm
收费版支持Windows98/2000/XP/2003/VISTA/Win7。免费版只支持WindowsXP操作系统。
适用于我公司所有具备以太网接口的设备。
V2.82重要更新:
1.Server模式下,一个COM口可支持无限个Client连接,但免费版只允许前3个TCP/IP连接与COM口双向数据通讯,其他连接为单向通讯。VSPM3收费版没有此限制。
2.Client模式下,支持动态域名解析,远程主机地址可以直接指定域名,比如www.google.com。
DownLoad:
http://www.powerip.net/download/vspm.rar
参考:
http://article.ednchina.com/Other/20090721103435.htm
我在做nginx相关项目时发现,如果架构前端使用了nginx代理,那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短链接的方式和后端交互的原因,使得nginx和后端的ESTABLISHED变得很少而TIME_WAIT很多。这不但发生在安装nginx的代理服务器上,而且也会使后端的app服务器上有大量的TIME_WAIT。查阅TIME_WAIT资料,发现这个状态很多也没什么大问题,但可能因为它占用了系统过多的端口,导致后续的请求无法获取端口而造成障碍,目前看来最好的办法是让每个TIME_WAIT早点过期:
在linux上的nginx负载均衡器上可以这么配置:
#让TIME_WAIT状态可以重用,这样即使TIME_WAIT占满了所有端口,也不会拒绝新的请求造成障碍
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
#让TIME_WAIT尽快回收,我也不知是多久,观察大概是一秒钟
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
※或者将以上配置直接写进/etc/sysctl文件,sysctl -p立即生效;如果后端的web集群为nginx+php5,它们的内核优化可关闭上述功能(这点跟前端的负载均衡器是不一样的);年纪大了,将以上学习心得写进博客备忘,也方便以后布署时直接粘贴。
在linux上的nginx负载均衡器上可以这么配置:
#让TIME_WAIT状态可以重用,这样即使TIME_WAIT占满了所有端口,也不会拒绝新的请求造成障碍
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
#让TIME_WAIT尽快回收,我也不知是多久,观察大概是一秒钟
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
※或者将以上配置直接写进/etc/sysctl文件,sysctl -p立即生效;如果后端的web集群为nginx+php5,它们的内核优化可关闭上述功能(这点跟前端的负载均衡器是不一样的);年纪大了,将以上学习心得写进博客备忘,也方便以后布署时直接粘贴。