从如何获取可信赖的ip地址聊起

起因

写这篇文章缘起SF的一个问题 http://segmentfault.com/q/1010000000686700/a-1020000000687155。由此我想到了很多,就和大家随便聊聊吧

在PHP中获取ip地址有一段网上流传甚广的代码,还有它的各种变种

function real_ip()
{
    static $realip = NULL;

    if ($realip !== NULL)
    {
        return $realip;
    }

    if (isset($_SERVER))
    {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);

            /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
            foreach ($arr AS $ip)
            {
                $ip = trim($ip);

                if ($ip != 'unknown')
                {
                    $realip = $ip;

                    break;
                }
            }
        }
        elseif (isset($_SERVER['HTTP_CLIENT_IP']))
        {
            $realip = $_SERVER['HTTP_CLIENT_IP'];
        }
        else
        {
            if (isset($_SERVER['REMOTE_ADDR']))
            {
                $realip = $_SERVER['REMOTE_ADDR'];
            }
            else
            {
                $realip = '0.0.0.0';
            }
        }
    }
    else
    {
        if (getenv('HTTP_X_FORWARDED_FOR'))
        {
            $realip = getenv('HTTP_X_FORWARDED_FOR');
        }
        elseif (getenv('HTTP_CLIENT_IP'))
        {
            $realip = getenv('HTTP_CLIENT_IP');
        }
        else
        {
            $realip = getenv('REMOTE_ADDR');
        }
    }

    preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';

    return $realip;
}

这段代码的原理是从HTTP_X_FORWARDED_FOR以及HTTP_CLIENT_IP还有REMOTE_ADDR中获取ip地址。

- 阅读剩余部分 -

测试新的反垃圾策略

Typecho新版本发布以后,很多用户反馈以往存在的垃圾评论肆虐的现象并没有的得到改善,虽然很多人都加上了Akismet来拦截,但是看到垃圾箱里一堆不断增长的垃圾信息,也是非常影响心情的。

这个问题的关键在于识别评论者是否为机器人,很多人使用验证码来解决,这是一个很有效的方法,但是会影响用户体验。是否有一种更友好的方法,可以默默地完成这一工作呢?

其实是有的,这种方法也被用在了很多反垃圾系统上,那就是用javascript。大多数垃圾机器人只是单纯的模拟http请求,并没有模拟浏览器客户端的行为,因此我们完全可以使用js脚本来达到区分它们的效果。

- 阅读剩余部分 -

学习一门技术有时候需要一个充足的理由

这几天在折腾CoffeeScript有此感想,这门语言(或者说是JS的方言吧),我并不是第一次接触,大概是它刚出来的时候我就开始关注了,这期间有无数次看到有人提到它,每次我就打开它的官网,然后看一看就随手关掉,没有任何下文了

这次想到它是因为公司的翻墙服务最近老是挂掉,我想自己写一个性能好一点的程序替换。显然我所熟悉的PHP是干不了这个的,用JAVA或者Scala来折腾似乎又太重了,听说Node.js比较适合处理io请求,所以我兴冲冲的打开了Node.js的官网开始看手册了(我个人推荐,手册是最好的老师,比第三方网站的介绍靠谱很多)。

嗯,挺简单的。这是我的第一感觉,就是js加上一堆系统库支持。而且大部分都是用来处理网络io的,正合我意,于是我就balabala开始写了。

- 阅读剩余部分 -

谈谈Typecho之二:关乎青春

记忆的指针慢慢拨动,当今天的我踩着弱冠之年的尾巴写下这段文字的时候,心头涌出的不是伤感,也没有遗憾。只是心存感激,感谢上帝安排了这样一段光辉岁月在我的生命中停留。

走上编程之路,为了一个单纯的理由

如果当年我没有那个想法,今天的我绝对会大不相同

时间回到9年前,让我们看看那个在电脑前疯狂按着键盘的男孩吧,当然他可没有写代码,而是在玩着一款叫做《魔兽争霸》的即时战略游戏。他的反应力让他在这款游戏上小有成就,但还达不到傲视群雄的地步,不过这可无法阻止他继续玩下去。

- 阅读剩余部分 -

低成本搭建家庭多媒体中心之硬件篇

先说句题外话,我换域名了!从 70.io 切换到了 l4zy.com,其实就是黑客世界中 lazy 的说法,我觉得这个词比较符合我的气质。。。外加 io 域名的搜索引擎收录一直不好,于是就换过来啦。什么?你问我为什么不用 joyqi.com,是的这个域名也在我手上,但是如果你有兴趣的话访问下 http://joyqi.com/asdf 就马上会看到熟悉的一幕了,我以前在这个域名上明目张胆地放过一些东西,所以你懂的。

好吧,言归正传。很早就想跟大家聊聊家庭多媒体中心的搭建,因为前一阵子自己刚好弄了一套,所以有些心得。我在搭建这套系统时秉承的宗旨就是低成本,所以性价比怎么高我就怎么来。

首先这套系统是基于有线网络的,目前的无线网络稳定性还不足以承载这种高流量的应用场景。所以你得先检查下家里的网线是不是通的,很多家里装修时网线都没有接上,你要自己接好。而且,大部分水晶头都只接了4根线,这种线只能达到100M的速度,要体验千兆的连接,你需要把8根线全部都接上。

- 阅读剩余部分 -

Nginx配置PHP-FPM支持Pathinfo

在 nginx 下用过 php 的同学肯定知道 nginx 对 php 的 pathinfo 支持一直不好,以前我们都会用一些很山寨的方法来达到这一效果,往往最后还要配合 php.ini 里设置 cgi.fix_pathinfo = 1。而且这方面的文档一直是乱七八糟,基本上你找到的每篇文档都有自己的一套做法。

我最近在升级了 nginx 以后发现官方对 php-fpm 的支持有了很大的提高,也许这是很久远的事情了,但是原谅我在 0.8 版本以后就没有怎么认真看过它的配置文件了。

具体说来就是加了 fastcgi_split_path_info 这样一项,这样它的配置就变得非常简单了,删掉你以前 server 里针对 php 的 location 配置,并增加下面的内容

- 阅读剩余部分 -

NameBeta,强大快速的域名注册检索服务

好吧,我承认这是给我自己的小作品打广告,但绝对是有良心的广告。在平常的工作中,我经常需要为新产品注册一些新域名,但是现有的域名注册商要不就是页面繁琐,打开要半天时间,要不然就是支持的后缀有限,我喜欢的后缀不知道去哪里注册最有性价比。

于是我花了几天时间做了一个名为NameBeta的域名查询服务,它非常简单有效,不需要你花多余的时间,总结起来就几点

是的,我在页面设计上做了优化,去掉了一切没必要的元素,你所需要做的就是进去搜索你需要的域名

- 阅读剩余部分 -

个人网站存在的意义

个人网站这个以前很时髦的名词正随着时间慢慢被人忘记,互联网的门槛越来越低,个人网站显然不再成为一个重要的入口。甚至连电脑都已经不是首选的上网平台了。

那么现在还有必要为自己搭建个人网站吗?

不是人人都有料

不可否认的是,个人网站由于其具有一定的专业性,所以搭建它是要付出一定的成本的,不论是金钱上的还是时间上的。有成本付出就会有回报的期望。每个坚持写博的人背后肯定有它的动力在支撑,但是我看到的是越来越多的个人博主荒废了它当初付出成本来打理的网站。

为什么?因为没有人看,一个人写有啥意思,如果只是写写笔记放到本地也可以,速度还更快。你既然选择了放到网上,那么心里肯定还是期望有读者的。但是理想是美好的,现实是残酷的,你写的那些东西就是没人看。

- 阅读剩余部分 -

从Logecho开始您的静态博客

为什么要静态化

相比于各类社交网站的兴起,个人博客这个平台也开始进入更深刻的自我转变过程。由于我个人一直在参与这个过程,所以更能感受到它所带来的影响。

以 Wordpress 为首的系统将越来越趋于 CMS 化,并且不可避免地越来越臃肿。以 Ghost 为首的新平台,却把重心转向了撰写体验地打造上。

在这个过程中出现了一个异类,那就是静态博客系统。网页静态化似乎与现今越来越丰富地媒体展现背道而驰,但它的出现却把自由撰稿者从繁杂的不必要的系统维护中解放出来,让大家更专注于内容本身的精雕细琢,至于内容的分享与传播则可以交给更多的社交平台。

- 阅读剩余部分 -