FreeBSD 自带防火墙 ipfw 简单介绍

最近 FreeBSD 的 VPS 总是有些奇怪的链接,不得不了解一下 FreeBSD 的防火墙了。在网上找了多处的资料,发现资料都很老或者非常混乱,所以稍微整理了下做个记录分享,可以帮助大家快速上手吧。

FreeBSD 下首选的无疑是 ipfw 了,在官方的文档中有这么一段关于启用 ipfw 的说明:

IPFW 是基本的 FreeBSD 安装的一部分, 以单独的可加载内核模块的形式提供。 如果在 rc.conf 中加入 firewall_enable="YES" 语句, 就会自动地加载对应的内核模块。 除非您打算使用由它提供的 NAT 功能, 一般情况下并不需要把 IPFW 编进 FreeBSD 的内核。

阅读全部内容 >>

PHP 第三方序列化扩展 igbinary

igbinary 是一个 php 的第三方扩展,相对于 php 自带的 serialize,igbinary 具有性能高,节省空间的特点,在某些高要求的场景中使用它是个不错的方案。

igbinary 使用一些对应标记和信息分隔变量中数组的键名和值等其它内容,并且依赖这些标记信息进行反序列化。
如数组

array(true, null, 'foo'=>'bar', 'text', 123)

序列化后大概是这种形式
[STX][DC4][ACK][ENQ][ACK][SOH][DC1][EXT]foo[DC1][EXT]bar[ACK][STX][DC1][EOT]text[ACK][EXT][ACK]{
黑色标记的内容,如 [STX] 代表一个位标记(1个字节),这里只是形式表现,并不代表标记就是这样。

阅读全部内容 >>

基于 PHP + MySQL 的可靠消息队列实现

等我来写

Debian GNU/Linux创始人Ian Murdock不幸辞世:享年42岁

当地时间2015年12月30日早些时候,Debian GNU/Linux创始人伊恩·默多克(Ian Murdock)不幸辞世。此前,他曾通过Twitter表示自己遭到了警方的暴力,并且透露了要自杀的倾向。在之前的文章中,考虑到要对其家人给予隐私和尊重,我们并未深入这件事。伊恩·默多克辞世的声明,由Debian项目组的三名成员(Ana Guerrero Lopez、Donald Norwood、Paul Tagliamonte)所发出。

R.I.P.

阅读全部内容 >>

关于 PHP 中的 isset 和 array_key_exists 的问题

一直以来我都在想既然有 isset 用来判断数组中的指定的键是否存在,为什么还要有 array_key_exists 的存在,因为 isset 不仅更方便而且性能更好,直到今天在程序出现一个诡异的问题,最后查出无论如何 isset 都判断不出一个明显已经存在于数组中的键的问题时才仔细看了一下文档。

原来 isset 对于数组中指定的索引有值的情况下,如果值是 NULL 那么也会返回 FALSE(官方文档),而不是仅仅判断是否有没有这个键,所以理论上来说 isset 仅仅是用来判断键存在且有值(一般情况下 NULL 都代表什么都没有),那么 isset 在很严格的情况下跟 empty 就十分类似而变的不可靠了。

<?php
$arr = array('a'=>'Hello World', 'b'=>null, 'c'=>0);
isset($arr['a']); //TRUE

isset($arr['b']); //FALSE
!empty($arr['b']); //FALSE
array_key_exists('b', $arr); //TRUE

isset($arr['c']); //TRUE
!empty($arr['c']); //FALSE
array_key_exists('c', $arr); //TRUE

所以如果你需要判断指定的键名是否存在于某个数组中,而不管它的值是什么(哪怕是NULL),那么就需使用 array_key_exists,其它多数情况下还是推荐 isset,毕竟性能会更好。