November 13, 2011
关于Linux操作系统源代码查看工具的介绍
"\u003cp\u003ea、Windows系统可以用Source Insight,Linux系统可以用Source Navigator。\u003c/p\u003e\n\u003cp\u003eb、vim或emacs编辑器,配合cscope、ctags、etags等交叉索引工具。\u003c/p\u003e\n\u003cp\u003ec、vim或emacs编辑器,配合grep、egrep等文本搜索工具,不过最好要对源代码目录结构有所熟悉\u003c/p\u003e\n\u003cp\u003ed、LXR,以网页的形式通过浏览器浏览,安装复杂(debian下安装容易,请版面搜寻lxr)\u003c/p\u003e\n\u003cp\u003ee、GNU global,可以在命令行用,也可以生成hypertext,类似lxr,但更省事。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2011/11/source_insight+key.zip\"\u003eSource Insight3.5(含Key)下载\u003c/a\u003e\u003c/p\u003e"
November 10, 2011
php里函数名或者方法名前加 & 符号表示的意思
"\u003ch1 id=\"先阅读手册\"\u003e先阅读手册\u003c/h1\u003e\n\u003cp\u003e从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符**\u0026amp;**\u003c/p\u003e\n\u003cp\u003e例子 17-13. 由函数返回一个引用\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;?php\nfunction \u0026amp;returns_reference()\n{\nreturn $someref;\n}\n\n$newref =\u0026amp; returns_reference();\n?\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e有关引用的更多信息, 请查看引用的解释。\u003c/p\u003e\n\u003cp\u003e在来看一段很多开源代码喜欢用的单例注册模式\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;?php\nclass a{}\nclass b{}\nfunction \u0026amp; aa($name)\n{\n static $class = array();\n if(!$class[$name])\n {\n $class[$name] = new $name();\n }\n return $class[$name];\n}\n$a = \u0026amp; aa(\u0026#39;a\u0026#39;);\n$b = \u0026amp; aa(\u0026#39;b\u0026#39;);\n\n$a2 = \u0026amp; aa(\u0026#39;a\u0026#39;);\n$b2 = …\u003c/code\u003e\u003c/pre\u003e"
November 6, 2011
php5.3不支持ZendOptimizer的解决办法(Zend Guard Loader)
"\u003cp\u003e[ \u003cstrong\u003e2013-04-04]好像ZendGuard-5_5_0版本找不到这个dll文件的\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ePHP 5.3 下,Zend Optimizer 已经被全新的 \u003cstrong\u003eZend Guard Loader\u003c/strong\u003e 取代\u003c/p\u003e\n\u003cp\u003e已经Zend Optimer的代替品为 Opcache,请参考: \u003ca href=\"http://blog.haohtml.com/archives/14071\"\u003ehttp://blog.haohtml.com/archives/14071\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e————————————————\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下载 Zend Guard Loader 压缩包。(官方下载地址: \u003ca href=\"http://www.zend.com/en/products/guard/downloads\"\u003ehttp://www.zend.com/en/products/guard/downloads\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e解压并提取 ZendGuardLoader.so(Linux)或 ZendLoader.dll(Windows),对应你的PHP版本。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e在你的 php.ini 文件添加下面一行,用来加载 Zend Guard Loader:\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e**Linux 和 Mac OS X: **zend_extension = 完整路径/ZendGuardLoader.so\n\u003cstrong\u003eWindows(非线程安全):\u003c/strong\u003e zend_extension = 完整路 …\u003c/p\u003e"
November 1, 2011
检查局域网可用ip的dos批处理脚本
"\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e要扫描192.168.0.x段的所有可用ip地址\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003efor /L %i IN(1,1,254) DO ping -w 2 -n 1 192.168.0.%\narp -a\n\u003c/code\u003e\u003c/pre\u003e"
November 1, 2011
freeBSD挂载光驱
"\u003cp\u003e挂接光驱\nmount -t cd9660 /dev/acd0 /cdrom\n卸载光驱\numount -f /cdrom\n挂接USB\nmount -t msdos /dev/da0s1 /mnt/usb\n卸载USB\numount /dev/da0s1\u003c/p\u003e"
October 31, 2011
Freebsd解决ARP欺骗问题
"\u003cp\u003e\u003cstrong\u003e1.不安装软件的方法。\u003c/strong\u003e\n首先要重启,确保你拿到的网关地址是正确的。\n步骤如下:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eifconfig\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e显示类似如下内容\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ebge0: flags=8843 mtu 1500\noptions=1b\ninet 192.168.0.5 netmask 0xffffffc0 broadcast 192.168.0.1\nether 00:17:08:2a:13:88\nmedia: Ethernet autoselect (100baseTX )\nstatus: active\nplip0: flags=108810 mtu 1500\nlo0: flags=8049 mtu 16384\ninet 127.0.0.1 netmask 0xff000000\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e我们把网关的信息存到一个文件里。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eecho 192.168.0.1 00:17:08:2a:13:88 \u0026gt; /etc/ipmac\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e接着使用crontab -e编辑系统定时排程(计划任务)让它按照设定时间循环执行\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e*/5 * * * * /usr/sbin/arp -f /etc/ipmac\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e这样就每5分钟更新一次网关MAC地址,保证正确。\u003c/p\u003e\n\u003cp\u003e注 …\u003c/p\u003e"
October 30, 2011
一个自动检测服务器网络状态的脚本
"\u003cp\u003e最近服务器总是莫明奇妙的网络不通。我在上一篇文章里写了一个自动检测网卡状态的脚本: \u003ca href=\"http://blog.haohtml.com/archives/11827\"\u003ehttp://blog.haohtml.com/archives/11827\u003c/a\u003e.但发现服务器仍然出现此问题.但服务器内部运行正常.这里基本可以确认是与外网不通的原因.就写了一个脚本,用来检测网络状态,在不通的情况就重启服务器了.此解决办法相当的变态.最好不要使用.\u003c/p\u003e\n\u003cp\u003e1.创建新文件 /data/check_net_status.sh,内容如下\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#!/bin/bash\nif [ $# -ne 1 ]\nthen\necho \u0026#39;ip address not defined!\u0026#39;\nexit\nfi\n\nip=$1\nlog_file=\u0026#34;$(date +%Y%m%d).log\u0026#34;\n\nret=`ping -c 10 $ip | grep ttl | wc -l`\nif [ $ret -lt 2 ]; then\necho \u0026#34;$(date +%H:%M:%S) ===== reboot\u0026#34; \u0026gt;\u0026gt; $log_file\nshutdown -r now\nfi …\u003c/code\u003e\u003c/pre\u003e"
October 27, 2011
php客户端memcached的安装教程
"\u003cp\u003e我们在上篇文章里()介绍了LNMP的安装方法.只安装了memcache客户端.有些用户可能需要memcached这种客户端的.这里介绍一种php客户端memcached的安装方法.\u003c/p\u003e\n\u003cp\u003e之前在安装memcache时有提到memcached客户端是叫memcache,其实还有一个基于libmemcached的客户端叫memcached,据说性能更好,功能也更多。参考:\u003c/p\u003e\n\u003cp\u003ememcache的官方主页: \u003ca href=\"http://pecl.php.net/package/memcache\"\u003ehttp://pecl.php.net/package/memcache\u003c/a\u003e\nmemcached的官方主页: \u003ca href=\"http://pecl.php.net/package/memcached\"\u003ehttp://pecl.php.net/package/memcached\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e以下是我安装Memcached版本的PHP模块的过程记录:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#wget http://download.tangent.org/libmemcached-0.9.tar.gz\n#tar zxf libmemcached-0.9.tar.gz\n#cd libmemcached-0.9\n#./configure --prefix=/usr/local/libmemcached --with-memcached\n#make …\u003c/code\u003e\u003c/pre\u003e"
October 26, 2011
MySQL 数据库性能优化之缓存参数优化[转载]
"\u003cp\u003e在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣的朋友们有所帮助。\u003c/p\u003e\n\u003cp\u003e这是本系列的第一篇文章:MySQL 数据库性能优化之缓存参数优化\u003c/p\u003e\n\u003cp\u003e数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。\u003cstrong\u003e\u003cem\u003e本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化\u003c/em\u003e\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003equery_cache_size/query_cache_type (global)\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eQuery cache 作用于整个 MySQL Instance,主要用来缓存 MySQL 中的 ResultSet,也就是一条SQL语句执行的结果集,所以仅仅只能针对select语句。当我们打开了 Query Cache 功能,MySQL在接受到一 …\u003c/p\u003e"
October 22, 2011
FreeBSD下自动检查网卡状态并自动启用网卡
"\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#/bin/bash\n\nlog_file=`date +%Y%m%d`\nlog_file=$log_file\u0026#34;.log\u0026#34;\ncheck_date=`date +%H:%M:%S`\n#status=`ifconfig bge0 | grep status | awk \u0026#39;{print $2}\u0026#39;`\nstatus=`ifconfig bge0 | awk \u0026#39;/status/{print $2}\u0026#39;`\n\nif [ $status != \u0026#39;active\u0026#39; ]; then\n status=\u0026#39;down\u0026#39;\n ifconfig bge0 up\nelse\n echo \u0026#39;ok\u0026#39;\nfi\n\ncheck_date=${check_date}\u0026#34; =========== \u0026#34;${status}\necho $check_date \u0026gt;\u0026gt; $log_file\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e另一处写法,其实一样的:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#!/bin/bash\nlog_file=\u0026#34;$(date …\u003c/code\u003e\u003c/pre\u003e"
October 20, 2011
dd 命令用来测试硬盘读写速度(转)
"\u003cp\u003edd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1. 命令简介\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003edd 的主要选项:\n指定数字的地方若以下列字符结尾乘以相应的数字:\nb=512, c=1, k=1024, w=2, xm=number m\u003c/p\u003e\n\u003cp\u003eif=file\n输入文件名,缺省为标准输入。\u003c/p\u003e\n\u003cp\u003eof=file\n输出文件名,缺省为标准输出。\u003c/p\u003e\n\u003cp\u003eibs=bytes\n一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。\u003c/p\u003e\n\u003cp\u003eobs=bytes\n一次写 bytes 个字节(即一个块大小为 bytes 个字节)。\u003c/p\u003e\n\u003cp\u003ebs=bytes\n同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。\u003c/p\u003e\n\u003cp\u003ecbs=bytes\n一次转换 bytes 个字节,即转换缓冲区大小。\u003c/p\u003e\n\u003cp\u003eskip=blocks\n从输入文件开头跳过 blocks 个块后再开始复制。\u003c/p\u003e\n\u003cp\u003eseek=blocks\n从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。\u003c/p\u003e\n\u003cp\u003ecount=blocks\n仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。 …\u003c/p\u003e"
October 20, 2011
FreeBSD/Linux检测硬盘坏道
"\u003cp\u003e\u003cstrong\u003eLinux检测硬盘坏道\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ebadblocks\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e功能说明:检查磁盘装置中损坏的区块。\u003c/p\u003e\n\u003cp\u003e语法:badblocks [-svw][-b ][-o ][磁盘装置][磁盘区块数][启始区块]\u003c/p\u003e\n\u003cp\u003e补充说明:执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e参数:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e-b 指定磁盘的区块大小,单位为字节。\u003c/p\u003e\n\u003cp\u003e-o 将检查的结果写入指定的输出文件。\u003c/p\u003e\n\u003cp\u003e-s 在检查时显示进度。\u003c/p\u003e\n\u003cp\u003e-v 执行时显示详细的信息。\u003c/p\u003e\n\u003cp\u003e-w 在检查时,执行写入测试。\u003c/p\u003e\n\u003cp\u003e[磁盘装置] 指定要检查的磁盘装置。\u003c/p\u003e\n\u003cp\u003e[磁盘区块数] 指定磁盘装置的区块总数。\u003c/p\u003e\n\u003cp\u003e[启始区块] 指定要从哪个区块开始检查。\u003c/p\u003e\n\u003cp\u003ebadblocks 检测磁盘坏块\u003c/p\u003e\n\u003cp\u003e1)$badblocks -s //显示进度 -v //显示执行详细情况 /dev/sda1\u003c/p\u003e\n\u003cp\u003e2)读写方式检测 未挂载的磁盘设备或分区\u003c/p\u003e\n\u003cp\u003e$badblocks -s //显示进度 -w //以写去检测 -v //显示执行详细情况 /dev/sda2\u003c/p\u003e\n\u003cp\u003e=========================\u003cstrong\u003eFreeBSD检测硬盘坏道\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e利用硬盘的S.M.A.R.T.功能来做。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ecd …\u003c/p\u003e\u003c/blockquote\u003e"
October 20, 2011
FreeBSD下的fsck命令
"\u003cp\u003e对文件系统进行检查,并对损害的文件系统进行修复。\n\u003cstrong\u003efsck的语法如下:\u003c/strong\u003e\nfsck (-F fstype) (-v) (-m) (-special…)\nfsck (-F fstype) (-v) (-y|Y|n|N)\n(-o fstype options) (special…)\n其中:\n-F fstype : 说明被检查的文件系统的类型\n-v : 返回完成的命令行,但不运行\n-y|Y: 对所有问题均回答Yes\n-n|N: 对所有问题均回答No\n-m: 对文件系统进行检查,不修复文件系统,\n如果文件系统经检查后是可安装的,则显示\nufs fsck : sanity check : /dev/rdsk/c0t0d0s0 okay.\n-o: 文件系统类型选项,选项由逗号分隔,\u003c/p\u003e\n\u003cp\u003e**最常用的选项有两个: **\nP: 整理(preen)模式\nF: 强制检查模式,此选项忽略文件系统状态标志。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e移去一个没有相关文件的目录入口 答Yes或Y来删除该目录入口\u003c/li\u003e\n\u003cli\u003e重连接一个已分配但不能访问的文件\n对fsck的”RECONNECT?”回答Yes,即把该I节点连接到lost+found目录下,文件名即是I …\u003c/li\u003e\u003c/ol\u003e"
October 19, 2011
遍历memcache中的key和value
"\u003cp\u003e\u003cstrong\u003e什么是\u003c/strong\u003e \u003cstrong\u003ememcache\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ememcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e为什么要遍历\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e目前,用到memcache的公司和网站也越来越多。Memcache的客户端操作一般都只提供了get,set等简单的操作,这些操作都是非常高效的。 虽然memcache是个key-value存储的系统,但是在某些时候,我们可能需要遍历memcache的数据。\u003c/p\u003e\n\u003cp\u003e通过使用memcache 内置方法Memcache::getExtendedStats,首先获得items信息。\u003c/p\u003e\n\u003cp\u003e最后得到的解决类似与\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;php\n$memcache = new Memcache();\n$all_items = …\u003c/code\u003e\u003c/pre\u003e"
October 19, 2011
memcache的addServer的故障转移机制
"\u003cp\u003e如果有多台memcached服务器端(当然其他支持memcache协议的服务前端都可以,比如Tokyo Tyrant),最好使用$memcache-\u0026gt;addServer 来连接服务前端。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e连接示例:\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$mem_conf = array(\n array(\u0026#39;host\u0026#39;=\u0026gt;\u0026#39;192.168.0.11\u0026#39;, \u0026#39;port\u0026#39;=\u0026gt;\u0026#39;11211\u0026#39;),\n array(\u0026#39;host\u0026#39;=\u0026gt;\u0026#39;192.168.0.12\u0026#39;, \u0026#39;port\u0026#39;=\u0026gt;\u0026#39;11211\u0026#39;),\n array(\u0026#39;host\u0026#39;=\u0026gt;\u0026#39;192.168.0.13\u0026#39;, \u0026#39;port\u0026#39;=\u0026gt;\u0026#39;11211\u0026#39;)\n);\n\n$memcache = new Memcache ( );\nforeach ( $mem_conf as $v ) {\n $memcache-\u0026gt;addServer ( $v …\u003c/code\u003e\u003c/pre\u003e"