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

Post by SUN @ 10:31 pm 与时俱进 | trackback
Apr 18, 2007

搜索机器人访问控制

关键词:搜索 机器人 Web Spider php

主页在载入速度对浏览者来说是一个比较关键的因素。一般来说,浏览者的容忍极限为5s左右,如果读取时间大于5s,浏览者往往会选择放弃。因此,我采用了现在的Live Archive方式,用 http://blog.znsunimage.com/archives.html 来代替我现在的主页,同时对该页面内的内容进行精简,将内容控制在80k以内,以提高那些新访问者的速度。

但是,相应的问题也来了。Live Archive的结构不利于搜索机器人(Web Spider)爬行,且它调用了不少的javascript内容,搜索机器人(Web Spider)无法跟踪;其次,正常主页上的诸多好友链接也被“精简”,影响了交互。虽然部分问题可以用设定robots.txt的方式来弥补,但是还是有些欠缺。

因此做了如下的处理:

  1. 让用户可以自己设定浏览方式。
    用户可以通过点击左侧“我的网站”中的Live Archive/Normal Mode 来切换浏览主页的方式,同时结果保存在浏览器Cookies中,下次用同一台电脑访问时候,系统会自动根据用户喜好选择不同的浏览方式。比方说我自己就采用正常浏览方式,因为大量的内容已经被缓存在我的浏览器中,对我来说速度已经不是瓶颈问题。
  2. 将搜索机器人(Web Spider)直接引导到正常的主页,使得他们能够收集更详细全面的信息,包括我的诸多好友链接。主要参考了该网页,精简为下面的一段代码:

    $UA=$_SERVER['HTTP_USER_AGENT'];
    if eregi("Googlebot|Yahoo|VoilaBot|Ask Jeeves|SpeedySpider|MSNbot|Yahoobot|Baiduspider|Sohubot|Lycos|Robozilla|Inktomi Slurp|larbin|spider|crawlGoogle AdSense|EchO!|Magpie|InternetSeer|Magpie|Alexa|The World Wide Web Worm|Voyager|robot|Speedy Spider|Motor|AskJeeves|GigaBot|The Python Robot|MSIECrawler|GetBot|SurveyBot|Fish search|Netcraft",$UA) //大小写没有影响
    {$file = "/home/znsunima/public_html/wordpress/index2.html";
    ob_start('ob_gzhandler');
    echo implode(", file($file));
    ob_end_flush();}
    else
    header("Location: http://blog.znsunimage.com/archives.html"); //见注¹

上面代码的原理是利用HTTP_USER_AGENT参数来判断是否为搜索机器人²,如果是,返回压缩过的正常主页;反之,返回Live Archive版本的主页。如果你用的是firefox,可以通过在地址栏输入“about:config”,新增general.useragent.override 字段后设定User_Agent来测试。

注¹. 其实其中的archives.html其实我也用php压缩过了,因为我的服务器不支持html格式的直接压缩
注². 网上的机器人很多,我只列了访问过我网站的和其他一些常见的Spider。

  
Post by SUN @ 12:07 pm 与时俱进, 网站更新 | trackback
Mar 14, 2007

PHP判断浏览器类型和系统语言

因为有些东西不兼容M$的恶霸IE7,所以用到下面的函数.
判断浏览器类型:

<?php echo $_SERVER["HTTP_USER_AGENT"]; ?>

判断浏览器语言:

<?php echo $_SERVER["HTTP_ACCEPT_LANGUAGE"]; ?>

写成程序的化如下:

<?php
if(stripos($_SERVER["HTTP_USER_AGENT"],"MSIE 7.0"))
echo "IE 7.0";
else {if(stripos($_SERVER["HTTP_USER_AGENT"],"MSIE 6.0"))
echo "IE6.0";
else echo "firefox or others";
}
?>

这是根据上面的代码做出来的一个小程序:
www.znsunimage.com/Download/test.php

Post by SUN @ 12:44 am 与时俱进 | trackback