通过伪造Referer来解决外链问题

什么是Referer?
Referer是HTTP Header的一个字段,当浏览器向服务器发送请求的时候一般会包含Referer信息,这一字段保存的是访客的来源URI。
以PHP为例,通过输出$_SERVER变量,你就可以看到HTTP_REFERER信息:
如今很多知名的网络相册(如网易相册、百度相册、51相册等等)都限制了外链,我不知道它们用什么方式实现,但是目前而言大多数防盗链的机制都是基于对Referer的判断来实现的。
比如说,我有一个网站,其中一个页面地址是 http://example.com/test.html,里面需要外链一张猫扑的图片,因此,image.html里面可以这么写:

但是我们会发现这样外链的图片是无法显示出来的。原因在于,当我们访问http://example.com/test.html时,浏览器会向upload3.mop.com也就是猫扑的服务器发送一个请求,这一请求中包含的Referer信息应该就是这样:
http://example.com/test.html
这样,猫扑的服务器就可以判断出这是一个来自外部网站的请求,从而予以拒绝,这样我们就无法显示这张图片了。
那么,应该如何解决这一问题呢? 用火狐浏览器的可能知道,火狐有个插件叫做RefControl,可以用它来伪造Referer,从而正常显示图片。但是如果你是站长,你总不能要求你的访客都使用火狐浏览器对吧?即便你所有的访客都使用火狐浏览器,你也很难保证他们都安装了RefControl这个插件。
这样,我们只能从程序方面入手解决问题:

实际上这就是通过伪造Referer来实现我们想要的效果。
我们把这段程序保存为redirect.php,放到服务器上,例如http://example.com/redirect.php,那么,接下来我们只需要将原来的外链图片地址经由这段程序处理,就可以正常显示。

效果如下:
由此可见,Referer信息不一定可靠,因为它是可以伪造出来的,通过这一手段来防盗链并不是一个完美的办法。
同时,我们也应该尽可能少的外链文件,毕竟大多数服务器都有带宽的限制和成本的考虑,限制外链对它们的生存也是很重要的。

Wordpress常用时间参数

使用Wordpress国外主题的时候常常要改动其中的时间参数,因为老外他们使用的时间格式和我们大不一样,比如说同样是一个日期:2010年1月2日,美国英语里面可能写成 Jan 2nd 2010,英国英语里则是 2nd Jan 2010,而我们汉语里是 2010年1月2日。好在Wordpress提供了很多时间参数,用户可以输出自定义的日期,这一点和PHP里面的date函数有点类似。
下面是一些常用的参数:
* a代表小写的英语的上下午,如am、pm
* A代表大写的英语的上下午,如AM、PM
* d代表英语的日期(小于10仍为两位数写法),如05、12
* D代表中文的星期,如五、七
* F代表中文的月份(包括“月”这个字),如五月、十二月
* g代表英语的小时(小于10为一位数写法),如5、12
* G代表英语的小时(小于10仍为两位数写法),如05、12
* h代表英语的分钟(小于10为一位数写法),如5、12
* H代表英语的分钟(小于10仍为两位数写法),如05、12
* j代表英语的日期(小于10为一位数写法),如08-02-09
* l代表中文的星期(包括“星期”这两个字),如星期五、星期七
* m代表英语的月份(小于10仍为两位数写法),如05、12
* M代表英语的月份(以单词的形式显示),如Jun
* n代表英语的月份(小于10为一位数写法),如5、12
* O代表英语的时区,如+0800
* r代表完整的日期时间,如Tue, 06 Jun 2006 18:37:11 +0800
* S代表日期的序数后缀,如st、th
* T代表英语的时区(以单词的形式显示),如CST
* w代表英语的星期,如5、7
* W代表周数,如23
* y代表两位数年份,如07、08
* Y代表四位数年份,如2007、2008
* z代表天数,如156

在Windows下编译适用于PHP 5.2.12的eAccelerator.dll

最近PHP 5.2.12发布了,修复了多个bug,因此升级到这一版本是非常必要的。
首先说明一下我的一些参数:
操作系统: Windows 7 Ultimate
PHP版本:5.2.11
Web Server:Apache 2.2.14
Visual Studio: 6.0 (别嫌弃它版本老,即便是在Win7下它还是能用的)
什么是eAccelerator?
eaccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。
1.首先下载编译好的PHP二进制包。(稍后会用到) 地址如下:
http://cn.php.net/distributions/php-5.2.12-Win32.zip
2.再下载PHP的源代码,稍后编译eAccelerator的时候会用到。地址如下:
http://cn2.php.net/get/php-5.2.12.tar.bz2/from/a/mirror
3.升级PHP:
这一过程很简单,首先关闭Apache,然后将压缩包里解压出来的所有文件替换掉原来的文件即可。例如你原来的PHP程序文件位于 D:\php,那么请将php-5.2.12-Win32.zip解压到这一路径下覆盖原有文件。
4.启动Apache,我们会收到一条报错信息,Apache无法启动。打开Apache的日志文件(此文件路径为apache\logs\error.log),我们会看到这样的提示信息:
PHP Warning: [eAccelerator] This build of “eAccelerator” was compiled for PHP version 5.2.11.
Rebuild it for your PHP version (5.2.12) or download precompiled binaries.
意思就是当前的eAccelerator是为PHP 5.2.11编译的,不适用于5.2.12。我们应该重新编译一份eAccelerator。
5.下载一份eAccelerator的源码。地址如下:
http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.zip
6.将第2步骤下载到的PHP源码解压到某一目录下,例如 E:\php。然后打开你的PHP程序目录(也就是你的php.exe所在的目录),找到其中dev子目录下的php5ts.lib文件,把它复制到E:\php这一位置。
7.打开E:\php\ext,在这下面创建一个目录命名为eaccelerator,然后将第5步骤下载到的压缩包解压到此目录下。此时的目录结构应该是这样的:
8.打开win32子目录,其中应该有一个名叫eAccelerator.dsw的项目文件,用VS开发环境打开它(比如我用的就是VS6.0),打开”组件”>”配置”,选中 Win32 Release PHP5 这一选项,单击“关闭”。
9.按下F7键(或选择工具条中的编辑按钮)开始编译,稍等片刻,编译成功,你就可以在win32目录下看到生成了一个Release子目录,打开这个子目录,你就会看到已经生成了eAccelerator.dll文件。
将这个文件复制到你的PHP扩展目录下(如D:\php\ext),替换掉原有的文件,然后启动Apache,你就会发现eAccelerator已经成功加载了。

100条超级残暴的英文翻译

1、Do not argue with an idiot. He will drag you down to his level and beat you with experience.
你永远不能战胜一个纯SB,因为他会把你的智商拉到跟他个水平,然后用丰富的经验打败你
2、I asked God for a bike, but I know God doesn’t work that way. So I stole a bike and asked for forgiveness.
开始我直接求上帝赐辆自行车。 后来我琢磨上帝办事儿不是这个路数。 于是老子偷了一辆然后求上帝宽恕。
3、I want to die peacefully in my sleep, like my grandfather.. Not screaming [...]

教程:如何使用CodeIgniter来更新Twitter

这是一篇原创译文,转载请注明出处。
原文作者Drazen Mokic,你可以在 这里 看到原文。
在这个教程里面我们将使用CodeIgniter,通过Twitter API来更新我们的twitter状态。我建议大家一步一步的学习,而不要走马观花式的浏览教程。让我们开始深入学习吧!
教程细节
程序:CodeIgniter框架
版本:1.7.1
难度:高级
预计完成时间:30分钟
1.配置CodeIgniter
首先我们需要对CI的默认配置进行修改。打开 system/application/config/autoload.php 文件,找到下面这行
$autoload['libraries'] = array(”);
修改为
$autoload['libraries'] = array(‘database’);
这样就可以自动加载数据库了。接下来,打开 database.php 并修改其中的数据库连接设置-你的数据库名、用户名以及密码。我们使用的名称是 ci_twitter_api。
现在打开 config.php,并修改 base_url 为你的CI目录路径。我使用的目录叫做 twitter_api,我的 system目录就保存在那个位置,因此我的 base_url 会是
$config['base_url'] = “http://localhost/ci/twitter_api”;
2.填充数据库
因为我们将要用到数据库,所以我们需要填充一些数据。打开 phpMyAdmin 或者其它你喜欢的数据库管理工具,创建一个新的数据库,命名为 ci_twitter_api。现在我们将要使用下面的SQL查询语句来创建一个表,但请注意,使用你自己的twitter用户名和密码。
CREATE TABLE IF NOT EXISTS `accounts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(120) NOT NULL,
`password` varchar(32) NOT [...]

CodeIgniter 中文用户指南 版本 1.7.2 CHM版发布(支持索引和搜索)

上个月制作了CodeIgniter 1.7.2中文手册的CHM版,但由于制作工具的原因,生成的索引和搜索结果出现了乱码,非常无奈,只好取消了CHM文件的索引和搜索功能。
最近经过仔细研究后才发现,原始的HTML文件使用的是UTF-8编码,这是造成乱码的根本原因所在。于是用编码转换工具将所有HTML文件的编码转换为GB2312,再用QuickCHM编译生成CHM文件,完美地解决了搜索和索引的乱码问题。
单击此处立即下载

phpMyAdmin升级到3.2.x版遇到的常见问题

phpMyAdmin是一个用PHP编写的基于Web的MySQL管理工具。从事过PHP+MySQL开发的朋友肯定接触过它,非常方便。最近把电脑上的phpMyAdmin升级到了3.2.2版,遇到了一些问题,在此总结一下。
1. “空密码登录被禁止”  问题
很多时候我们在本机测试时会将root用户密码设置为空。但升级到phpMyAdmin 3.2.2版的时候,会遇到无法以空密码登录root用户的情况。怎么解决呢? 请参照如下步骤:
(1) 找到你的phpMyAdmin程序所在的目录,这个根据你个人的情况有所不同。
(2) 打开 phpMyAdmin\libraries\ 路径下的 config.default.php 这个文件,找到下面这行

$cfg['Servers'][$i]['AllowNoPassword'] = false;

将其修改为

$cfg['Servers'][$i]['AllowNoPassword'] = true;

(3) 重新访问你的phpMyAdmin,你会发现空密码的root用户也可以登录了。
2. “配置文件现在需要一个短语密码” 问题
在登录进去之后可能会看到“配置文件现在需要一个短语密码”这条警告信息。这是因为你没有设置一个用来给Cookie加密的密钥。解决方法还是首先打开上文所说的 config.default.php 文件,并找到下面这行

$cfg['blowfish_secret'] = ”;

将其修改为

$cfg['blowfish_secret'] = ‘你的密钥’;

说明: 这里的“你的密钥”是你所设置的密钥字符串,可以随意设置。
修改保存之后,重新登录phpMyAdmin就可以了。
3. “无法载入mcrypt扩展” 问题
这个问题与phpMyAdmin没有多少关系,是因为你的 PHP 运行环境没有开启mcrypt扩展。以Windows下为例,首先你要确保PHP目录的ext子目录下有 php_mcrypt.dll 这个文件,没有的话去网上下载一个。然后打开你的 php.ini 文件,找到下面这行

;extension=php_mcrypt.dll

去掉这行行首的分号,保存,然后重启Apache就可以开启mcrypt支持了。这个时候重新登陆phpMyAdmin,此问题就已经解决。

升级到Windows 7 Ultimate

昨天闲着无聊,下载了Windows 7 Ultimate的镜像文件,原本是打算今后买了新电脑再安装的。但是突然想起来我现在这台式机也曾安装过Win7的测试版,感觉还行,就是驱动不好找,运行倒是很流畅。我就想试试看正式版的Win7是不是会自带大部分的驱动,对旧硬件的识别是否有所改进,但结果是很伤心的。别的设备很容易被识别,而且Win7自带的那些驱动似乎也可以使它们正常运转,但我的集成显卡就悲剧了,根本就无法被识别出来,最多只能设置到1024×768的分辨率。说明一下,我这机器比较老,用的是Ati RC410芯片组,在当年这集成显卡也还算不错,想不到现在居然面临无驱动可用的地步,甚至用自动更新也不行。
最后,我找到了一份Vista版的驱动,发现居然能用,还能开启Aero效果,真是神了。

CodeIgniter发布1.7.2版

CodeIgniter 发布 1.7.2 版
EllisLab 发布了 CodeIgniter 1.7.2。有什么新内容?主要的更改如下:
兼容 PHP 5.3.0。
新增购物车类库。
改善表单辅助函数。
在公共函数中新增 is_php(),让 PHP 版本比较更方便。
修改 show_error() 以便发送 HTTP 服务器响应码,并且所有内部错误提示都会发送合适的状态码。
修复了很多 BUG。
1.7.2 版已经在 subversion 中存在了很长一段时间了,并且已经于 7 月下旬兼容于 PHP 5.3.0,不过可以理解的是许多用户并没有使用那个开发中的版本。虽然我也希望能有时间为这个版本多增加一些“大改动”的项目,并把版本号变为 1.8,但时间不等人。我们的许多用户都在 Mac 上开发,但 OS X“雪豹”中的 PHP 是 5.3.0,所以与其让用户继续等待不如先推出这个稳定版–毕竟已经 7 个月没有更新了。虽然如此,也还是有一些惊喜和可喜的变化。敬请享用!
以上内容转自http://codeigniter.org.cn/blog。
详细的Change Log:
版本 1.7.2
发布日期:2009年9月11日
SVN 版本: 1737
Libraries
Added a new Cart Class.
Added the ability to pass $config['file_name'] for the File Uploading Class and rename the [...]

Noel Gallagher宣布退出Oasis

今天中午看到一则重大新闻:英国Oasis乐队的吉他手、主要的歌曲创作者以及第二主唱,同时也是乐队的核心,主唱的哥哥,Noel Gallagher (诺埃尔·加勒格)在乐队的官网发布了这样一则声明:
It’s with some sadness and great relief to tell you that I quit Oasis tonight. People will write and say what they like, but I simply could not go on working with Liam a day longer. Apologies to all the people who bought tickets for the shows in Paris, Konstanz, and Milan.
(很遗憾同时也很宽慰地告诉你们,今晚我将退出Oasis。人们怎么说怎么写都可以,但我实在是不能再和Liam共处下去了,一天都不行。对于巴黎、康斯坦斯以及米兰的那些买了票的歌迷,我要说一声抱歉。)
有传闻说此事是因为他的弟弟,也就是乐队的主唱Liam Gallagher在巴黎与他发生了争执,Liam甚至还砸烂了Noel的吉他,于是Noel一气之下宣布离队。但是既然已经在官网发布声明,说明此事应该是正式的而非玩笑。没有了Noel的绿洲还是绿洲么?