Dec 17, 2007

PHP中远程文件的调用-关于Allow url fopen

关键词:Allow url fopen,php

最近发现blog突然出了点小问题,调试后发现是服务器提供商基于安全理由把Allow url fopen这个选项给关了,而我自己写的有一些代码中就用了相应的功能,所以导致了问题的出现,具体错误特征如下:

URL file-access is disabled in the server configuration

打开Allow url fopen的作用主要是在php程序中可以用http或者ftp方式来调用其他文件。如下面的代码:

<?php include("http://example.com/includes/example_include.php"); ?>

而关闭该选项后,使用上面的代码就会出错,必须换成下面的代码方可。

<?php include($_SERVER['DOCUMENT_ROOT']."/includes/example_include.php"); ?>

这里,系统变量 $_SERVER['DOCUMENT_ROOT']返回的是远程系统根目录。

其实现在很多服务商都把allow url fopen功能给关了,主要原因是防止黑客的注入式进攻,所以强烈建议用第二种方法来写代码。另外,如果还是想用url方式来写代码的话,可以考虑用curl

我用这个功能主要是实现WordPress的首页静态化。我的blog首页使用了我自己hack过的af-extended-live-archive插件,这样的好处就是可以整个站用ajax方式来访问,但是加载速度就比较一般了。所以我首先生成一个静态的页面(比方说叫example.html),然后在用index.php将example.html中的内容读取出来,实现静态化。

这里大家也许会觉得奇怪,那你把首页直接重定向到example.html不就可以了……
这里我的考量主要是两点:
1. php方式可以对example.html的内容进行压缩。
2. 为了更好的SEO,我在index.php进行了判定,如果来访问的是机器人,我会把正常的页面发给它,而不是显示加载了af-extended-live-archive插件的example.html,方便机器人进行爬行抓取。

Tags:   
Post by SUN @ 10:31 pm | 与时俱进 | Comment (0) | Add to del.icio.us | Digg This!
(Required)
(Required, will not be published)