September 3, 2010
php中抽象类和接口的概念和区别(二)
"一个子类如果implements一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可,这是抽象类的一个优点\n如果一个接口中定义的方法名改变了,那么所有实现此接口的子类显然将无法通过编译,因为它们所实现的方法名已经不存在了,这是接口的一个缺点;而抽象类就不存在这个问题,只是为子类添加了一个新的方法(接口中旧的方法)\n看前面两点,似乎抽象类要比接口有着更多的优点,但它却有着一个难以弥补的缺点:就是一个子类只能有一个父类。A extends B . 这样A就拥有了B的所有方法和功能,但当A还想拥有C的功能的时候。就不能通过 A extends C 来实现, 而需要走一些弯路。目前系统架构的趋势就是由针对抽象(借口,抽象类)而不是具体编程,并且将功能尽可能的细分。 这就需要通过实现多个接口的方式来实现,显然,抽象类无法提供这样的功能。从系统重构的角度来说,一个具体类抽象出接口是十分方便的。只需要写一个接口,里面定义具体类的所有方法,然后在为这个具体类implement这个接口就可以了。而抽象类就要复杂的多,比如说 B extends A , C …"
September 3, 2010
php中抽象类和接口的概念和区别(一)
"interface a { //接口内不可以定义属性 //所有方法必须为抽象方法(既不实现,只定义)\npublic function method1($param); protected function method2($param); }\n//接口不可被实现,例如 $instance = new a; //错误\n//接口实现类必须实现接口的所有方法,且方法参数也必须相同 //例如 class b implaments a{ //错误,封装应与接口相同 protected function method1($param) { //somecode here… }\n//错误,参数应与接口定义相同 protected function method2() {\n} }\n接口功能是实现类似C++中的多重继承的,但其语法更为明了"
September 3, 2010
PHP的接口与抽象类
"PHP的接口:为了实现特定功能而预留的类似类的一种类型。接口的主要目的:提供给类类似于模板的框架,以方便类的构建。\n在PHP****中定义接口\n在PHP中定义接口的形式如下:\nInterface interfaceName\n{\nConst 1;\n……\nConst 2;\nFunction methodName1();\n……\nFunction methodName2();\n}\nPHP****中单一接口的实现\n实现接口的语法如下:\nClass class_name implements interface_name\n例如:\nid = $id;\n}\nfunction getID()\n{\nreturn $this-\u0026gt;id;\n}\nfunction setName($name)\n{\n$this-\u0026gt;name = $name;\n}\nfunction getName()\n{\nreturn $this-\u0026gt;name;\n}\nfunction otherFunc() //这是一个接口中不存在的方法\n{\necho “Test”;\n}\n}\n?\u0026gt;\nPHP****中多重接口的实现\n在** …"
September 3, 2010
Freebsd 如何_打开_关闭_查看防火墙
"在FreeBSD服务器上调试ipfw防火墙规则的时候,有时候需要临时关闭ipfw防火墙,可以使用如下命令来进行操作:\n1)停止ipfw防火墙:\nipfw disable firewall\n/etc/rc.d/ipfw stop\n2)开启ipfw防火墙:\nipfw enable firewall\n/etc/rc.d/ipfw start\n随机器启动自动启用防火墙方法需要修改/etc/rc.conf文件,参考:第三步.\n3)如何查看ipfw是否在运行\n方法一:通过ipfw -a list 不断的去看包的数量\n方法二:sysctl -a | grep net.inet.ip.fw.enable\n如果状态是1表示是开启,0为关闭.\nipfw中文手册pdf: http://docs.haohtml.com/download/freebsd/ipfw_zh.pdf"
September 2, 2010
解决IE6从Nginx服务器下载图片不Cache的Bug
"其实这个Bug是由分两种情况的:\n1.和Nginx无关,是针对CSS背景图片的。\n一般用户不会碰到,更多的时候是开发者将自己的IE的缓存策略从默认的”自动”改为“每次访问都查询”才发生 的。特点是鼠标一旦浮动到有背景图片的地方,IE会不顾已经缓存的图片,自行去服务器再次获取图片,造成图片短暂消失。这个问题比较简单,可以通过以下脚 本解决。\n1\n2. 但是实际上更常见的原因是Nginx上打开了Gzip压缩功能。\n这个是IE6 的著名Bug,早在2002年就被人详细讨论过了,在IE7中有所改进,但微软永远也不会去修复IE6了。\n根本原因是Nginx对于启用了Gzip的http上下文,即使你在之前的配置文件里声明过 gzip_disable “MSIE [1-6].”,Nginx不再对IE6用Gzip压缩了,但是送出的http报头却仍然采用了和Gzip压缩数据包相匹配的Vary: Accept-Encoding。IE6不认识这个报头,IE6对除了Vary: User-Agent的报头外,都不查询缓存,直接去服务器申请。更绝得是,不是使用查询文件是否更新,而是强行要求一份完整文件。(IE7总算 …"
September 2, 2010
php spawn-fcgi和php-fpm
"spawn-fcgi是一个通用的FastCGI管理服务器\n她是lighttpd中的一部份,但目前已经单独成为一个项目,最新的lighttpd没有这一块(),但可以在以前版本中找到她\n在lighttpd-1.4.15( http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz )中就有她\nNote注:最新的spawn-fcgi可以到lighttpd.net网站搜索“spawn-fcgi”找到她的最新版本发布地址\n目前她的下载地址是http://redmine.lighttpd.net/news/2 最新版本是http://www.lighttpd.net/download/spawn-fcgi-1.6.0.tar.gz\ntar -zxvf lighttpd-1.4.15.tar.gz cd lighttpd-1.4.15 ./configure #编译 make #因为我不需要安装lighttp而是只需要他其中的某个文件,所以只make就可以了,不需要make install cp src/spawn-fcgi …"
September 2, 2010
Ubuntu下apt-get 命令参数
"常用的APT命令参数\napt-cache search package 搜索包\napt-cache show package 获取包的相关信息,如说明、大小、版本等\nsudo apt-get install package 安装包\nsudo apt-get install package – – reinstall 重新安装包\nsudo apt-get -f install 修复安装”-f = ――fix-missing”\nsudo apt-get remove package 删除包\nsudo apt-get remove package – – purge 删除包,包括删除配置文件等\nsudo apt-get update 更新源\nsudo apt-get upgrade 更新已安装的包\nsudo apt-get dist-upgrade 升级系统\nsudo apt-get dselect-upgrade 使用 dselect 升级\napt-cache depends package 了解使用依赖\napt-cache rdepends package …"
September 2, 2010
FreeBSD 如何从普通用户切换到root下
"OS:freebsd 7.2\n在FreeBSD 7.2下,通过ssh客户端连接到FreeBSD端,用普通的用户登录,执行下列命令报错:\n$ su – su: Sorry $ su su: Sorry\n原因:在FreeBSD上要使用 su命令成为root用户,不但要知道root的口令,还需要经过特别设置,否则就不能成功使用这个命令。这是因为 FreeBSD对执行su命令的用户进行了更严格的限制,能使用su命令的用户必须属于wheel组(root的基本属组,组ID为0),否则就不能通过这个命令成为root用户。\n因此需要编辑组设置文件/etc/group,将需要超级用户权力的管理成员加入到wheel组中。\n用 root用户登录,修改/etc/group文件,在wheel组中添加普通用户,操作如下:\n#ee /etc/group\n#wheel:*:0:root,pup (在wheel组中,增加pup用户)\n按ESC,选择a)leave editor—-\u0026gt;选择a)save changes,保存退出!\n使用pup用户ssh登录\n$ su – Password:\n成功切换到root权限!\n参 …"
September 2, 2010
linux,unix为什么要编译内核?
"今天看的内容是有关书上第六章编译内核的问题:\n首先为什么要编译内核?\n它最大的好处就是可以调整linux系统,以便其更合理地安装到计算机中。linux集成套件通常包括多种目\n标内核,能够处理各种机器。除此之外,还可以通过重新编译内核以便在你的计算机上实现一些功能,\n例如:将linux系统设置为一个临时路由器,使之拥有内置的路由功能,或者作为放火墙,添加一个新的外部设备(如SCSI卡等)\n创建自己的内核的最好理由就是使全世界内核设计者所提供的各种为改进性能而设计的内核得到充分利用。创建内核的过程不是很困难,只是要花费一些时间,并且系统越老或运行越慢,在创建时所花费的时间就越长,而且要特别注意一些关键的驱动程序或者其特性时,那会带来不少麻烦的\n这个内核将针对机器的处理器进行优化,并且只提供需要的驱动和特征。另一个原因是为内核增加新的支持特性,有些特性在发行商提供的内核中有可能没有包括进来,或让硬件工作得更好。\n最终结果是建立一个更小的,更快的,打上所有最新最稳定的补丁和增强特性的内核。"
September 1, 2010
squid优化建议
"squid优化建议(转贴) 作者:听松一隅\nSQUID是个很不错CACHE服务器,各大门户网站都在用。过去二天也做了些SQUID优化,把经验贴上来。\n几个重要参数:\nmaximum_object_size 是能cache最大的文件大小。对应wmv,rm文件,建议设置为32768 kB maximum_object_size_in_memory 是在内存中cache的最大文件大小。一般为128的倍数. cache_mem 是SQUID可用到的最大内存。经实践,4G内存的服务器用2G;超过2G导致SQUID运行不稳 首先要分析SQUID所cache内容:\n运行 squidclient -p 80 cache_object://localhost/info 能看到如下内容:\nStorage Swap size: 7549104 KB Storage Mem size: 418804 KB Mean Object Size: 160.46 KB\nMean Object Size是平均内容大小,一般要把maximum_object_size_in_memory设置成离它最近的128的倍数。在这个 …"