存档

作者存档

ip2long在32位系统下“溢出”问题

2012年2月17日 121 阅读 3 条评论

PHP ip2long的算法是 A*256*256*256+B*256*256+C*256+D 这个和mysql的INET_ATON算法是一样的。如果你把10.0.0.1使用ip2long计算,得到的结果是167772161,如果你把这个整数存到数据库里面(mysql存储这个值是字段需要用int UNSIGNED。否则,128以上的IP段就存储不了了。),你可以这样取得这个结果集SELECT INET_ATON('10.0.0.1')。 ip2long计算的结果可以使用long2ip来进行逆运算。唯一的一个小问题是,在32位系统上,高位IP计算出来的long会超长“溢出”, 输出一个负数。不过不影响long2ip进行逆运算。不过在判断IP区间的话,可能引起麻烦。解决办法 就是看是否是负数,如果是负数,使用sprintf格式化输出或者bindec再decbin # phpsh Starting php type 'h' or 'help' to see instructions & features php> echo ip2long('192.168.1.38') -1062731482 php> echo long2ip(ip2long('192.168.1.38')-1) 192.168.1.37 php> echo long2ip(ip2long('1................阅读全文

分类: MyOriginal, PHP Note 标签: , ,

Discuz!X 初始化过程中会自动初始化的一些系统缓存

2012年2月7日 101 阅读 2 条评论

"\ultrax\source\class\class_core.php" 约536行 usergroup_【当前用户的groupid】 admingroup_【当前用户的adminid】 setting style_default cronnextrun usergroup_【newusergroupid】 style_【主题ID】 此外,如果你进入一些特定页面,还会调用更深层次的一些缓存。比如编辑器表情标签初始化的时候会载入similes缓存,使用plugin.php调用插件的时候会自动载入plugin缓存等等,如果需要在别处调用某一处缓存,比如plugin,similes,可以直接传给loadcache($cachenames, $force = false)一个缓存名称后就可以获取到缓存数据。当然传入一个数组也是可以的。 以下是缓存的工作原理 via: discuz dev wiki 如何注册系统缓存呢?可以使用dX基带的缓存扩展机制。 很简单 在\source\function\cache增加一个文件,比如以dz 自己带到smiles为例。 <?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * This is NOT a freeware, use is subject to l................阅读全文

Linux下获取进程正确的启动时间的几种方法

2012年1月31日 211 阅读 2 条评论

1.使用ps显示的进程运行后到现在经过的时间进行计算(Via) Script by ihipop #!/bin/bash pid=$1 elt=$(ps w -p $pid o pid=,cmd=,etime= |awk '{print $NF}') case $(echo $elt | sed -e 's/:/:\n/g' |grep ":" -c) in "1") elt=$(echo $elt |sed -e 's/:/ minutes ago /') ;; *) elt=$(echo $elt |sed -e 's/-/ days ago /' -e 's/:/ hours ago /' -e 's/:/ minutes ago /') ;; esac date -d "$elt seconds ago" 2.通过procfs里面的jiffies时间计算(Via) 在Linux系统中,时间管理有两个基本概念:xtime和jiffies。 xtime主要给time系函数使用,结构比较简单(include\linux\time.h): struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds, 纳秒,以前的版本是微秒*/ }; tv_sec就是大家平常所说的unix时间戳,在CMOS中维护,关机时由电池维持正常运行。 系统启动时,通过get_cmos_time()取cmos................阅读全文

Teredo/TB隧道下Win7系统的IPV6 DNS解析优先级问题。

2012年1月27日 281 阅读 没有评论

回家后,用上了那个WRT54G,上了ddwrt+chnroutes+DNSMASQ不能用交大的isatap隧道了,不过Teredo隧道又可以正常稳定的使用,但是发现一些奇怪的问题,比如,使用nslookup可以解析到ipv6.google.com,但是ping,一直提示“Ping request could not find host ipv6.google.com. Please check the name and try again.” 无法解析域名。但是直接ping google的IPV6地址确实是通的。证明IPV6链路正常。 一开始以为是其他隧道的干扰,关闭了其他隧道,还是老样子.而且使用gogo6的Tunnel broker也这样。放Google搜索了半天,找到了这个解释 微软脑残: http://ipv6-or-no-ipv6.blogspot.com/2009/02/teredo-ipv6-on-vista-no-aaaa-resolving.html Vista doesn't look up AAAA at all when it's on Teredo. It's intended behavior -- stupid, perhaps, but it's intended. See http://technet.microsoft.com/en-us/library/bb727035.aspx for all the details. 解决方................阅读全文

Chakra 硬盘/U盘 安装小记

2012年1月11日 397 阅读 2 条评论

真是折腾死人啊。 先说说过程,我再写写问题吧。 第一步当然是引导啦。不过在这之前,需要先下载安装镜像。我这里下载的是这个chakra-2011.12-Edn-CD-x86_64.iso 挂载这个镜像后,把引导内核提取出来chakraiso和chakraiso.img。放在某个分区的根目录。如果你会对U盘安装GRUB,那最好啦。如果你不想覆写U盘的引导记录,想利用系统自己的引导记录,也行。 Linux下就不说啦,讲讲在windows下面怎么办。 如果你使用win7 可以使用boot.ini 虽然nt6.0开始使用bootmgr了,不过还是认这个boot.ini的。XP自然就不必说了。唯一需要注意的是,有限软刷BIOS激活的Win7,不能使用官方grldr覆盖根目录下那个隐藏的grldr,否则可能导致软激活失败。这个grldr使用随机的hash和干扰码干扰生成,为的也是骗过微软的反盗版检测。如果你没有上面这些问题,你就先下载官方的GRUB4DOS,提取出grldr.mbr,grldr。grldr.mbr的作用就是在被ntldr/bootmgr引导后寻找grldr并加载并加他。如................阅读全文

Nginx rewrite中 Query String的处理

2012年1月10日 330 阅读 没有评论

Nginx除了能对UA进行处理,乃能对特殊的Query String进行处理。 最典型的应用就是,location进行路径匹配的时候,是没办法是用正则表达一起捕获这个路径和querstring的。那么我想真的URL里面的Query String进行不同的rewrite,应该如何处理呢?答案就是$arg变量。 Nginx里面$query_string 与$args相同,存储了所提交的所有$query_string 比如&p=2887&q=test 如果想要在nginx里面单独访问这些变量。可以这样 比如$p变量可以这样访问 $arg_p 下面是用这样一个实例讲述一下。 我准备停用WAP-T-WAP插件,但是发现Google对我站点的wap收录比较多,为了保留SEO,对wap目录进行301重定向。 要求是 如果请求中的$query_string包含"q=数字",301重新定向到首页交由index.php处理。 否则只是301重新定向到首页。 location ~* ^/wap/ { # if ( $http_user_agent ~* "(MSIE|bot|Spider|Slurp)" ) { # } if ................阅读全文

适用于DD-WRT V24 SP1 的Auto DD VPN(PPTP+jffs)方案

2011年12月3日 667 阅读 没有评论

基本设置过程是一样的 可能原来的那些脚本在V24上有点问题的 自己修正了下脚本 在pptp+jffs(如何初始化?)方案中 run.sh废弃 使用下面的方案设置代替run.sh launch.sh #!/bin/sh #Update by ihipop @ 2011/12/1 21:29 #http://ihipop.info #This Version is tested and Passed @ dd-wrt.v24-13064_VINT_mega.bin (SP1 Build10020) on Linksys WRT54GS v2.1 VPNUP='vpnup.sh' VPNDOWN='vpndown.sh' VPNLOG='/tmp/autoddvpn.log' #PPTPSRVSUB=$(nvram get pptpd_client_srvsub) DLDIR='http://autoddvpn.googlecode.com/svn/trunk/' #CRONJOBS="* * * * * root /bin/sh /tmp/check.sh >> /tmp/last_check.log" PID=$$ INFO="[INFO#${PID}]" DEBUG="[DEBUG#${PID}]" IPUP="/etc/config/pptpd_client.ip-up" IPDOWN="/etc/config/pptpd_client.ip-down" WORKING="/jffs/pptp" echo "$................阅读全文

Buffalo的LS-WXL/E NAS改机小记

2011年11月16日 956 阅读 没有评论

这款NAS很有性价比 买回来不带硬盘 虽然CPU有些孱弱大概600MHZ左右,是Marvell Feroceon 88FR131 [56251311] revision 1 (ARMv5TE),但是作为600元的一款NAS来说,集成了一大堆功能,真的是物有所值。 默认固件阉割了Telnet/SSH ,使用acp_commander.jar也无法取得root和telnet权限,干脆不折腾了 直接刷开了SSH/Telnet的第三方MOD 推荐这款 http://forum.buffalo.nas-central.org/viewtopic.php?f=68&t=23603 下载下来后 运行LSUpdater.exe即可 整个过程是傻瓜化的 大约需要10几min,期间保证不要断电就可以了 另外,电源模式千万不要切换成auto auto模式是很省电,只要你安装了NAS Navigator2 这玩意就会随着安装NAS Navigator2 的电脑一起开机关机自动唤醒等。 我刷的就是ls_series-154-mod1,刷固件一般不会造成硬盘数据丢失。不过你要是不放心的话 可以再备份下。 刷好后进入webadmin重置默认设置,这样webadmin的用户名和密码会被重置为admin/pa................阅读全文

分类: MyOriginal 标签: , , ,

Windows Server 2003 Resource Kit Tools && Sleep Command

2011年11月11日 620 阅读 1 条评论

Windows下没有sleep命令 可以试试Windows Server 2003 Resource Kit Tools 就是Windows Server 2003 资源工具包。 这个包内包含了sleep命令(支持精确到ms级别的延迟) 甚至提供了一个tail命令 下载地址 http://www.microsoft.com/download/en/details.aspx?DisplayLang=en&id=17657 安装后提取出sleep.exe 再次运行安装程序即可卸载 Usage: sleep time-to-sleep-in-seconds sleep [-m] time-to-sleep-in-milliseconds sleep [-c] commited-memory ratio (1%-100%) 阅读全文

分类: Windows Server 标签: , , ,

导出别人DiscuzX的插件语言包

2011年11月10日 446 阅读 没有评论

DZ得开发模式语言包言包临时目录(开发模式)在 data/plugindata/插件id.lang.php 这个不是每个插件都会用到这个目录。 对于需要修改语言包的时候 没有这个开发目录里面的文件确实不方便,好像以前有人出过一个工具,记不得了,我修改了DZ的语言函数来实现 function_core.php lang函数 找到 $returnvalue = & $_G['cache']['pluginlanguage_script']; 下面加上一句话 file_put_contents('abcdefgh.txt',var_export($_G['cache']['pluginlanguage_script'],true)); 如果需要精细一点 $_G['cache']['pluginlanguage_script']可以换成$_G['cache']['pluginlanguage_script']['插件id'] 打开生成的abcdefgh.txt 提取出这个数组 放到data/plugindata/插件id.lang.php 赋值给 $scriptlang['插件id'] 即可。 var_export导出的数组符合语法规范 可以直接赋值。 在开发模式下修改插件后 再次用设计模式导出为XML即可 阅读全文