無標題文檔

突破基于 HTTP_REFERER 的防盗链措施

比较郁闷就是某些「小气」的网站,会加上防盗链的功能(特别本人在看 Google Reader 时)。其实防盗链这个技术并不复杂,目前基本就是在服务器端判断 HTTP_REFERER 的位置,如果不是来自本站自身,则拒绝输出( 详细 )。

那么如果考虑突破防盗链的措施,就需要考虑在 HTTP_REFERER 上面做手脚了。PHP 脚本中对应的变量是 $_SERVER['HTTP_REFERER'] ,它存储了 HTTP_REFERER 的值。

由于直接访问目标 URL 资源已经被上述防盗链的措施给屏蔽,所以我们需要个类似网关的玩意去获取。说白了就是编写已经包装过的 HTTP 头的 PHP 脚本。

下面是简单的函数实现:

function getRemoteFile($url, $refer = '') {
    $option = array(
            'http' => array(
                'header' => "Referer:$refer")
            );
    $context = stream_context_create($option);
    return file_get_contents($url, false, $context);
}

这是个比较简单的函数,其功能就是伪造 Referer (使用 stream_context_create 函数 )然后获取对方的数据(使用 file_get_contents,需要开启 allow_url_fopen )。

如果想「复杂」一点,可以使用 sockets 扩展 ,这不在这里的讨论范围以内。

另外,再提供个获取主机名的正则函数

function getHost($url) {
    $result = preg_match('/^http:\/\/([\d|\w|\.]+)\//', $url, $matches);
    if (sizeof($matches) >= 2)  {
        return $matches[1];
    } else {
        return null;
    }
}

再进一步的扩展,可以封装成脚本,然后譬如调用

http://127.0.0.1/proxy.php?url=http://i.am/img

就可以获取那些开启防盗链措施的链接了(再发挥下,使用 Javascript 将图片链接全部替换)。

怎样才算 PHP 入门?

译言上有篇 「40 个迹象表明你还是 PHP 菜鸟」 ,里面的内容非常不错,但部分观点不完全苟同。

PHP 入门的确很简单,但这并不说明它不复杂。在从事 前端开发 之前,本人也作为 PHP 程序员混了一段时间,在这里根据此文的部分观点说下我的个人看法。

不使用 MVC

MVC 这玩意 几乎成了后台开发的「Web 标准」。很多程序员在没有真正弄清楚项目需求和规模前,就大喊「我们要些遵循 MVC 的代码」。

MVC 固然有众多的好处,但是退一步讲,其出发点也是为了提高效率的。在并不复杂的项目中刻意使用 MVC ,这好比将一个脚本分成三份,我想谁都不会这样做的。

不使用 autoload

PHP5 中加入的 autoload 特性 意在容许给编码人员二次出错的机会。有时候这个特性非常的棒(本人也经常在使用,这样可以省去不少的 inlcude/require 代码)。

这里要说明和提醒的就是,不要滥用这个特性 -- 比如你明知道这个类在某个文件中,何必劳神让 autoload 再去寻找?特别在些注重高效率的场合,必须面对这一点。

对集成开发环境(IDE)视而不见

好的 IDE 是能提交效率,但坦白的说,本人没有使用 IDE 的习惯。

在大学期间学习 Linux 系统开发(c 语言)的那会,已经习惯用 Vim 编辑代码 、使用 make 和 autoconf 组织代码、使用 gcc 编译,如果碰到需要调式,还可以让 Vim 和 gdb 配合。

本人的观点就是「好的软件只做一件事情」,我敢保证 IDE 中的编辑器没有 Vim 好,断点调试也没有类似 gdb、xdebug 要来的方便(至少熟悉)。

所以,本人觉得作为工具的工具,没有孰优孰劣的说法。

-- Split --

总之,文中的很多观点本人甚为同意,除了技术上的些细节,看得出很多都包含了「思想」这一范畴。比如良好的代码风格和开发方式、使用 OOP (不过和 MVC 一样,经常会被玩概念)、还有很多脚本基本安全方面的的意识(比如输入过滤)等等。

在我看来,好的 PHP 程序员不仅仅需要过硬的技术,重要的还是思想--团队意识、责任感、兴趣、激情、还有敬业等等(再这样说下去直接去学 六脉神剑 去算了)。

说到这里就不仅仅是 PHP 程序员的范畴了,希望广大的技术人员都能共勉。

转换图片至网页的工具

用 PHP 写的个小玩意,主要功能就是将图片(目前支持 PNG、JPG 以及 GIF 格式)转换成 HTML 页面(使用 TABLE 排版)。

https://friable.rocks/_/2009_11_05/492255aae85a.jpg

在这里要说明一下的是,PHP 脚本的本身也许不是性能的问题。但如果图片太大,生成的页面用浏览器打开可能会比较慢,所以尽量不要使用太大的图片(控制在 500px 左右)。

废话不多说,链接地址如下,欢迎大家使用、测试:

http://friable.rocks/pixel_image/CSS 批量压缩工具 还有个 微型的 PHP 文件管理器 等等。

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章