php 模仿蜘蛛抓取内容并分析

header(“Content-Type:text/html;charset=gbk”);
$message=$_POST[‘message’];
$contents = @file_get_contents(“$message”);
if($contents==”Forbidden”){
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, “$message”);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)”);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$contents = curl_exec($ch);
curl_close($ch);
}
preg_match_all(“/<title(.*?)</title>/is”,$contents,$title);
preg_match_all(“/<meta(.*?)>/is”,$contents,$meta);
preg_match_all(“/<body(.*?)body>/is”,$contents,$body);
echo ‘title:’.strip_tags($title[0][0]).'<br><br>’;
for($i=0;$i<count($meta[0]);$i++){
if(preg_match(“/keywords/i”,$meta[0][$i])){
preg_match_all(“/content=”(.*?)”/is”,$meta[0][$i],$keywords);

}
if(preg_match(“/description/i”,$meta[0][$i])){
preg_match_all(“/content=”(.*?)”/is”,$meta[0][$i],$description);

}
}
echo ‘keywords:’.strip_tags($keywords[1][0]).'<br><br>’;
echo ‘description:’.strip_tags($description[1][0]).'<br><br>’;
echo ‘body:’.strip_tags($body[0][0]);
?>

ThinkPHP 3.2.3 bug 列表(2015-1-15)

下载TP 3.2.3,将本地的TP3.2.2升级。发现一些仍未修复和新的bug(欢迎交流,如需转载,请著名来自 default.fu@foxmail.com):

1)文件 ThinkPHP/Library/Behavior/TokenBuildBehavior.class.php 第47行:

原代码:$tokenValue =  $tokenType(microtime(TRUE)) ;

应改为:$tokenValue = is_callable($tokenType) ? $tokenType(microtime(TRUE)) : md5(microtime(TRUE));

否则会:执行报错!

2)文件:ThinkPHP/Library/Think/Upload/Driver/Bcs/requestcore.class.php 开头:

应该将开头的如下3行 namespace  注释掉,否则会报错重复定义!

  1. use Think\Upload\Driver\Bcs\BCS_RequestCore;  
  2. use Think\Upload\Driver\Bcs\BCS_ResponseCore;  
  3. use THink\Upload\Driver\Bcs\BCS_RequestCore_Exception;  



3)文件:ThinkPHP/Library/Behavior/WriteHtmlCacheBehavior.class.php 应该将 只允HTTP头为 2xx 的时候才保存本地缓存

1筛选条件文件名不为空

2且HTTP头为2xx

应该改为如下:

  1. namespace Behavior;  
  2. use Think\Storage;  
  3. /** 
  4.  * 系统行为扩展:静态缓存写入 
  5.  */  
  6. class WriteHtmlCacheBehavior  
  7. {  
  8.   
  9.     // 行为扩展的执行入口必须是run  
  10.     public function run(&$content)  
  11.     {  
  12.         //2014-11-28 修改 如果有HTTP 4xx 3xx 5xx 头部,禁止存储  
  13.         //2014-12-1 修改 对注入的网址 防止生成,例如 /game/lst/SortType/hot/-e8-90-8c-e5-85-94-e7-88-b1-e6-b6-88-e9-99-a4/-e8-bf-9b-e5-87-bb-e7-9a-84-e9-83-a8-e8-90-bd/-e9-a3-8e-e4-ba-91-e5-a4-a9-e4-b8-8b/index.shtml  
  14.         if (C(‘HTML_CACHE_ON’) && defined(‘HTML_FILE_NAME’)  
  15.             && !preg_match(‘/Status.*[345]{1}\d{2}/i’, implode(‘ ‘, headers_list()))  
  16.             && !preg_match(‘/(-[a-z0-9]{2}){3,}/i’,HTML_FILE_NAME)  
  17.         ) {  
  18.             //静态文件写入  
  19.             Storage::put(HTML_FILE_NAME, $content‘html’);  
  20.         }  
  21.     }  
  22. }  

4)文件:ThinkPHP/Library/Think/Storage/Driver/File.class.php 第45行:

原代码:mkdir($dir,0755,true);

应改为:mkdir($dir,0777,true);

否则会:在部分主机比如WIN VPS下会出现写入权限问题,写入失败。

原创by default.fu@foxmail.com