php 读取google输出到本地

 更新时间:2016年11月25日 16:03  点击:1383
提供一款查询收录时常用的google正则表达式功能哦,我们是取得内容然后再正则出我们想要的内容,再在本地输出。

$TheUrl="http://www.google.cn/search?q=+site:".$q."&num=20&complete=1&hl=zh-CN&lr=&newwindow=1&as_qdr=".$t."&start=".$p."&sa=N";

 $TheThie=GetPage($TheUrl);
}
 $TheBody=GetContent($TheThie,"<div id=res class=med>","<div id=bsf style");
    $TheBody=iconv( "UTF-8", "gb2312//IGNORE" , $TheBody);
 $TheBody=str_replace("<!--z--><p><i>","<!--z--><!--<p><i>",$TheBody);
 $TheBody=str_replace('<br clear="all"/>','<br clear="all"/>',$TheBody);
    $TheBody=preg_replace('<a href="/search?num=20(.+?)amp;as_qdr=(.+?)&amp;q=site:(.+?)&amp;start=(.+?)&amp;sa=N">','a href=?q=$3&t=$2&p=$4>&nbsp;&nbsp;&nbsp;&nbsp;<!--z--',$TheBody);
 $TheBody=str_replace("该网站可能含有恶意软件,有可能会危害您的电脑。","",$TheBody);
 $TheBody=str_replace("/interstitial?url=","",$TheBody);
 $TheBody=str_replace("- <nobr>","",$TheBody);
 $TheBody=str_replace("类似网页","",$TheBody);
        $total=GetContent($TheThie,"</b></div><p>","</b> - <b>");
        $total=iconv( "UTF-8", "gb2312//IGNORE" , $total);
        $total=GetContent($total,"有 <b>","</b> 项");
 $total=str_replace("有 <b>","",$total);
 $total=str_replace(",","",$total);
        $total=intval($total);

下面讲的是用php生成静态html页面方法哦,方法有几种,各位朋友可以根据自己的实际情况来实现。

第一种:利用模板。目前PHP的模板可以说是很多了,有功能强大的smarty,还有简单易用的smarttemplate等。它们每一种模板,都有一个获取输出内容的函数。我们生成静态页面的方法,就是利用了这个函数。用这个方法的优点是,代码比较清晰,可读性好。
这里我用smarty做例子,说明如何生成静态页
require('smarty/Smarty.class.php');
$t = new Smarty;
$t->assign("title","Hello World!");
$content = $t->fetch("templates/index.htm");
//这里的 fetch() 就是获取输出内容的函数,现在$content变量里面,就是要显示的内容了
$fp = fopen("archives/2005/05/19/0001.html", "w");
fwrite($fp, $content);
fclose($fp);
?>
第二种方法:利用ob系列的函数。这里用到的函数主要是 ob_start(), ob_end_flush(), ob_get_content(),其中ob_start()是打开浏览器缓冲区的意思,打开缓冲后,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区,直到你使用了ob_end_flush().而这里最重要的一个函数,就是ob_get_contents(),这个函数的作用是获取缓冲区的内容,相当于上面的那个fetch(),道理一样的。代码:
ob_start();
echo "Hello World!";
$content = ob_get_contents();//取得php页面输出的全部内容
$fp = fopen("archives/2005/05/19/0001.html", "w");
fwrite($fp, $content);
fclose($fp);
?>
我选用的第2种方法 也就是用ob系列的函数
我刚开始看这个的时候有点不太明白 后来才知道ob是output buffering的意思 也就是输出缓存
当你准备输出的时候 所有的数据都保存在ob里面 服务器解析完php以后 把所有要输出到客户端的html代码都存放在ob里面 如果我们要输出html静态页面 只要把缓存取出来写入一个html页面即可
所以原理其实是很简单的
这里用到了几个函数 由于我初学php 很多函数我还不了解 所以这里也说明一下 希望可以帮助大家
ob_start():开始“捕捉”缓存 也就是从这里开始 打开浏览器的缓存
ob_end_flush():关闭浏览器缓存
ob_get_content():读取缓存内容
fopen("文件路径","打开模式")打开文件 97xxoo这个函数的打开模式有好几种 下面介绍几种主要的模式:
'r' 只读方式打开,将文件指针指向文件头。??
'r+' 读写方式打开,将文件指针指向文件头。??
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。??
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。??
fwrite("文件名称","写入内容") 写入文件
fclose() 关闭文件
由于我要转换的html文件非常多 可能有几百个 所以这里不能静态指定fopen的路径 大家可以设置一个路径变量 里面可以保存用户传来的id等信息 方便进行html文件命名 下面是我结合上次php读取xml数据的一个简单例子 程序代码
ob_start();????????????//打开浏览器缓存
?>
//下面是读取xml数据
$parser = xml_parser_create(); //创建一个parser编辑器
xml_set_element_handler($parser, "startElement", "endElement");//设立标签触发时的相应函数 这里分别为startElement和endElenment
xml_set_character_data_handler($parser, "characterData");//设立数据读取时的相应函数
$xml_file="1.xml";//指定所97gan要读取的xml文件,可以是url
$filehandler = fopen($xml_file, "r");//打开文件
while ($data = fread($filehandler, 4096))
{
xml_parse($parser, $data, feof($filehandler));
}//每次取出4096个字节进行处理
fclose($filehandler);
xml_parser_free($parser);//关闭和释放parser解析器
$name=false;
$position=false;
function startElement($parser_instance, $element_name, $attrs) //起始标签事件的函数
{
global $name,$position;??
if($element_name=="NAME")
{
$name=true;
$position=false;
echo "名字:";
}
if($element_name=="POSITION")
{$name=false;
$position=true;
echo "职位:";
}
}
function characterData($parser_instance, $xml_data) //读取数据时的函数
//此教程来源于97xxoo教程网(www.97xxoo.org)
查看完整的教程请点:http://www.97xxoo.org/article/1/2008/20081123423.shtml
{
??global $name,$position;
??if($position)
echo $xml_data."
";
if($name)
echo $xml_data."
";
}
function endElement($parser_instance, $element_name) //结束标签事件的函数
{
global $name,$position;
$name=false;
$position=false;
}
?>
//xml数据读取完毕
$htmlname=$id.".html";??????????????????????????//$id可以自己定义 这里代表用户传来的id
$htmlpath="archives/".$htmlname;?????? //设置路径变量
$content = ob_get_contents();??????????????//取得php页面输出的全部内容
$fp = fopen($htmlpath, "w");
fwrite($fp, $content);
fclose($fp);
?>

提供一款超好的php 文件分页代码 上一页 下一页哦,这一款是dedecms的生成页面时的分页程序代码。

function GetPagebreakDM($totalPage,$nowPage,$aid)
 {
  global $cfg_rewrite;
  if($totalPage==1)
  {
   return "";
  }
  $PageList = "<li><a>共".$totalPage."页: </a></li>";
  $nPage = $nowPage-1;
  $lPage = $nowPage+1;
  if($nowPage==1)
  {
   $PageList.="<li><a href='#'>上一页</a></li>";
  }
  else
  {
   if($nPage==1)
   {
    $PageList.="<li><a href='view.php?aid=$aid'>上一页</a></li>";
    if($cfg_rewrite == 'Y')
    {
     $PageList = preg_replace("/.php?aid=(d+)/i",'-\1-1.html',$PageList);
    }
   }
   else
   {
    $PageList.="<li><a href='view.php?aid=$aid&pageno=$nPage'>上一页</a></li>";
    if($cfg_rewrite == 'Y')
    {
     $PageList = str_replace(".php?aid=","-",$PageList);
     $PageList =  preg_replace("/&pageno=(d+)/i",'-\1.html',$PageList);
    }
   }
  }
  for($i=1;$i<=$totalPage;$i++)
  {
   if($i==1)
   {
    if($nowPage!=1)
    {
     $PageList.="<li><a href='view.php?aid=$aid'>1</a></li>";
     if($cfg_rewrite == 'Y')
     {
      $PageList = preg_replace("/.php?aid=(d+)/i",'-\1-1.html',$PageList);
     }
    }
    else
    {
     $PageList.="<li class="thisclass"><a>1</a></li>";
    }
   }
   else
   {
    $n = $i;
    if($nowPage!=$i)
    {
     $PageList.="<li><a href='view.php?aid=$aid&pageno=$i'>".$n."</a></li>";
     if($cfg_rewrite == 'Y')
     {
      $PageList = str_replace(".php?aid=","-",$PageList);
      $PageList =  preg_replace("/&pageno=(d+)/i",'-\1.html',$PageList);
     }
    }
    else
    {
     $PageList.="<li class="thisclass"><a href='#'>{$n}</a></li>";
    }
   }
  }
  if($lPage <= $totalPage)
  {
   $PageList.="<li><a href='view.php?aid=$aid&pageno=$lPage'>下一页</a></li>";
   if($cfg_rewrite == 'Y')
   {
    $PageList = str_replace(".php?aid=","-",$PageList);
    $PageList =  preg_replace("/&pageno=(d+)/i",'-\1.html',$PageList);
   }
  }
  else
  {
   $PageList.= "<li><a href='#'>下一页</a></li>";
  }
  return $PageList;
 }

下面我们来看看用php生成html静态页面的程序吧,是一个很简单的类哦,好了费话不说多了来看看吧。

class Makehtml{
   public $MbUrl,$OutUrl,$AllHtml,$SouChar,$ObjChar; //变量
   public $row; //游标
   public $Shuzusou,$Shuzuobj; //替换的字符串数组
   //-----------------------初始化-------------------------
    function __construct(){ //初始化
     $this->MbUrl="";
     $this->OutUrl="";
     $this->AllHtml="";
     $this->Sql="";
     $this->SouChar="";
     $this->ObjChar="";
    }
  
  
   //-----------------------------自动按字段替换---------------------------
    function AutoReplace(){
      //------------------自动获取要替换的字符串-------------------
      $tlen=count($row);
      $shuzu1=array();
      $shuzu2=array();
      if($row){
      $i=0;
      foreach($row as $key => $value){     
     $shuzu2[i]="<=$".$key."$>";
     $shuzu1[i]=$value; 
     $i++;
      }
      $this->Replacehtml(shuzu2,shuzu1);
      }
      //------------------自动获取要替换的字符串-------------------
    }
   //-----------------------------自动按字段替换完成------------------------
  
  
   //-----------------------------批量替换数组--------------------------
   function Replacehtml($Shuzusou,$Shuzuobj){  //批量替换数组
    if(count($Shuzusou)!=count($Shuzuobj)){
      exit("替换数组不匹配");
    }
    if($this->AllHtml==""){
      exit("没有要替换的内容");   
    }
    for($i=0;$i<count($Shuzusou);$i++){
     $this->AllHtml=str_replace($Shuzusou[$i],$Shuzuobj[$i],$this->AllHtml);
     //print("<br>".$Shuzusou(i)."=".$Shuzuobj(i)."<br>")
   }
   }
   //-----------------------------批量替换数组完成--------------------------
  
   //-----------------------------读取文件---------------------------------
    function Readfile(){
     $file=fopen($this->MbUrl,"r");
     $fsize=filesize($this->MbUrl);
     $this->AllHtml=fread($file,$fsize);
     fclose($file);
       }  
   //-----------------------------读取文件完成------------------------------
   //-----------------------------保存文件---------------------------------
   function SaveFile(){
    $file=fopen($this->OutUrl,"w");
    fwrite($file,$this->AllHtml);
    fclose($file);
   }
   //-----------------------------保存文件完成------------------------------
}
//------------------------------生成静态的类完成--------------------------------------


 $MyMake=new Makehtml;
     $MyMake->MbUrl="News_Show.shtml";
     $MyMake->Readfile();
     $THTml=$MyMake->AllHtml;
     $shuzu1=array();
     $shuzu2=array();
     $shuzu1[0]="<=$keybord$>";
     $shuzu1[1]="<=$description$>";
     $shuzu1[2]="<=$title$>";
     $shuzu1[3]="<=$Title1$>";
     $shuzu1[4]="<$=Bid$>";
     $shuzu1[5]="<$=Id$>";
     $shuzu1[6]="<=$Contentb$>";
     $shuzu1[7]="<$=BigId$>";
     $shuzu1[8]="<=$Date$>";
     $shuzu1[9]="<=$City$>";
     $shuzu1[10]="<=$SmallId$>";
     $shuzu1[11]="<=$CityId$>";
     $shuzu1[12]="width="100%"";
     $MyMake->OutUrl="News_show_1.shtml";
     $shuzu2[0]="数组0";
     $shuzu2[1]="数组1";
     $shuzu2[2]="数组2";
     $shuzu2[3]="数组3"; 
     $shuzu2[4]="数组4";       
     $shuzu2[5]="数组5";
     $shuzu2[6]="数组6";
     $shuzu2[7]="数组7";
     $shuzu2[8]="数组8";
     $shuzu2[9]="数组9";
     $shuzu2[10]="数组10";
     $shuzu2[11]="数组11";
     $shuzu2[12]="width="95%"";
     $MyMake->Replacehtml($shuzu1,$shuzu2);
     $MyMake->SaveFile();

php判断用户浏览器类型与来自页面

function chkre(){
 global $_SERVER, $r_main;
 if(isset($_SERVER['HTTP_REFERER'])){
  $u=parse_url($_SERVER['HTTP_REFERER']);
  if($u['host']!=$_SERVER['HTTP_HOST'])return false;
 }
 return true;
}

function chkuag($a='MSIE'){
 global $_SERVER;
 if(isset($_SERVER['HTTP_USER_AGENT'])){
  $age=strtoupper($_SERVER['HTTP_USER_AGENT']);
  if(strstr($age, $a))return true;
 }
 return false;
}

[!--infotagslink--]

相关文章

  • 百度网盟和google网盟推广那种效果好

    专做了百度和google的网盟推广以作推广效果的评估比较。百度的周期为6天,google为4天。   从百度的统计数据可以看出这六天的点击次数总共为464,平均点击花费了0.30元...2017-07-06
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • php把读取xml 文档并转换成json数据代码

    在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
  • c# 对CSV文件操作(写入、读取、修改)

    这篇文章主要介绍了c# 如何对CSV文件操作,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下...2020-11-03
  • python读取和保存mat文件的方法

    本文主要介绍了python读取和保存mat文件的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-25
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • perl大文件读取处理的模块介绍

    perl CPAN中有一个Tie-File 模块极大方便了对大文件的操作...2020-06-29
  • 使用MSScriptControl 在 C# 中读取json数据的方法

    下面小编就为大家带来一篇使用MSScriptControl 在 C# 中读取json数据的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#实现appSettings节点读取与修改的方法

    这篇文章主要介绍了C#实现appSettings节点读取与修改的方法,是非常实用的技巧,需要的朋友可以参考下...2020-06-25
  • c#快速写本地日志方法

    下面小编就为大家分享一篇c#快速写本地日志方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • Google会不会取消PR的理由分析

    Google是这样介绍PageRank的:   Google 出类拔萃的地方在于专注开发“完美的搜索引擎”,联合创始人拉里&middot;佩奇将这种搜索引擎定义为可“确解用户...2017-07-06
  • JS实现获取来自百度,Google,soso,sogou关键词的方法

    这篇文章主要介绍了JS实现获取来自百度,Google,soso,sogou关键词的方法,结合实例形式分析了js获取来路页面的方法与相关搜索引擎关键词的处理技巧,需要的朋友可以参考下...2017-01-09
  • C#抓取网络图片保存到本地的实现方法

    下面小编就为大家分享一篇C#抓取网络图片保存到本地的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • golang文件读取-按指定BUFF大小读取方式

    这篇文章主要介绍了golang文件读取-按指定BUFF大小读取方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-22
  • Java读取PDF中的表格的方法示例

    本文主要介绍了Java读取PDF中的表格的方法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-22
  • R语言读取csv文件出错的解决方案

    这篇文章主要介绍了R语言读取csv文件出错的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • php读取本地php文件源代码输出显示

    下在看一个利用fopen,file_get_contents读取本地服务器中.php文件的代码并显示的一些方法总结 如我有两个文件a.php,b.php。 a.php文件中的语句是: 代码如...2016-11-25
  • Windows系统中使用C#读取文本文件内容的小示例

    这篇文章主要介绍了Windows系统中使用C#读取文本文件内容的小示例,包括一次一行地读取文本文件的方法,需要的朋友可以参考下...2020-06-25
  • python 根据excel中颜色区分读取的操作

    这篇文章主要介绍了python 根据excel中颜色区分读取的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-06
  • mybatis-plus读取JSON类型的方法实现

    这篇文章主要介绍了mybatis-plus读取JSON类型的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-25