金沙贵宾会官网|金沙贵宾会登录-官网

【A】金沙贵宾会官网超高的返奖率为娱乐者提供资金保障,所以金沙贵宾会登录官网更加的方便了你的娱乐,申请88元彩金,因为在当中不仅仅只有游戏。

PHP页面缓存实现的方法总结,PHP小偷程序的设计

日期:2019-09-26编辑作者:网络安全

 代码如下

        $durl=parse_url($this->url); 
        $durl=explode("&",$durl[query]); 
        foreach($durl as $surl) 
        { 
          $gurl=explode("=",$surl); 
          $eurl[]=$gurl[1]; 
        } 
        return join("_",$eurl); 
    } 

// 取得缓存中的所有文件
public function list_file()
{
$path=$this->cache_folder;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if($file!="." && $file!="..") {
$path1=$path."/".$file;
if(file_exists($path1))
{
$result[]=$file;
}
}
}
closedir($handle);
}
return $result;
}

上面这个是HTML页面获取IMG的连接地址的过程。

        $this->createdir(); 

//删除缓存中的所有文件
public function del_file()
{
$path=$this->cache_folder;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if($file!="." && $file!="..") {
$path1=$path."/".$file;
if(file_exists($path1))
{
unlink($path1);
}
}
}
closedir($handle);
}
return true;
}

而且为什么要分开,是因为simplehtmldom对象是很庞大的,而且拆开进行这样对流程更加清楚。

        case 'nametime': 
        $this->name=$this->dir.'/'.$this->geturlname().'-'.$this->time.'.htm'; 
        break; 

?>

第一种:用游览器跑程序(多半会卡死,设置超时和内存大小就OK,你之间比较难等)

    function html($nametype='name',$dirtype='year',$rootdir='html') 
    { 
        $this->setvar($nametype,$dirtype,$rootdir); 
    } 

  • @author 何名慧
  • @copyright 2009-3-13
  • @param string $cache_folder 缓文件夹
  • @param int $cache_create_time 文件缓存时间
  • @example $cache=new Esj_Cache('./_cache',100)
  • @example $cache->read_cache() 读取缓存并输出
  • @example $cache->creatre_cache() 创建缓存文件(放在文件未尾)
  • @example $cache->list_file() 返回所有缓存文件列表
  • @example $cache->del_file() 删除所有缓存文件
    */

再通过保存函数包HTML页面保存到本地。

        if (!is_dir($this->dir)) 
        { 
            $temp = explode('/',$this->dir); 
            $cur_dir = ''; 
            for($i=0;$i<count($temp);$i++) 
            { 
                $cur_dir .= $temp[$i].'/'; 
                if (!is_dir($cur_dir)) 
                { 
                @mkdir($cur_dir,0777); 
                } 
            } 
        } 
    } 

//读取缓存文件
private function get_cache()
{
$file_name=self::get_filename();
if (file_exists($file_name)&&((filemtime($file_name)+$this->cacher_create_time) > time()))
{
$content=file_get_contents($file_name);
if($content)
{
echo $content;
ob_end_flush();
exit;
}else
{
echo "文件读取失败";
exit;

获取到目标网站的HTML页面+解析HTML页面获取到图片存储的连接+用二进制方式读取并且保存在本地+重命名  == 流程OK

您可能感兴趣的文章:

  • 比较详细PHP生成静态页面教程
  • 用php的ob_start来生成静态页面的方法分析
  • PHP定时自动生成静态HTML的实现代码
  • php将数据库中所有内容生成静态html文档的代码
  • 通用PHP动态生成静态HTML网页的代码
  • php 生成静态页面的办法与实现代码详细版
  • 谈PHP生成静态页面分析 模板+缓存+写文件
  • php2html php生成静态页函数
  • 用PHP实现的生成静态HTML速度快类库
  • PHP生成静态页面详解
  • PHP生成静态页
  • PHP生成静态页面详解
  • php生成静态文件的多种方法分享

<?php
page_init();//页面缓存初始化
ob_start();//开启缓存

2.PHP的目录迭代器

        switch($this->dirtype) 
        { 
        case 'name': 
        if(empty($this->dirname)) 
           $this->dir=$this->rootdir; 
        else 
           $this->dir=$this->rootdir.'/'.$this->dirname; 
        break; 
        case 'year': 
        $this->dir=$this->rootdir.'/'.date("Y",$this->time); 
        break; 

page_cache(60);//一般是最后一行

/

    function deletehtml($url='',$time=0,$dirname='') 
    { 
        $this->url=$url?$url:$this->url; 
        $this->time=$time?$time:$this->time; 

class Esj_Cache{
private $cache_folder=null;//cacher文件夹
private $wroot_dir=null;//站点目录
private $cacher_create_time=null;//cacher文件的建立时间

理解这两个东西了。这个分析类就没难点了。

<?php 
class html 

    var $dir;        //dir for the htmls(without/) 
    var $rootdir;    //root of html files(without/):html 
    var $name;       //html文件存放路径 
    var $dirname;    //指定的文件夹名称 
    var $url;        //获取html文件信息的来源网页地址 
    var $time;       //html文件信息填加时的时间 
    var $dirtype;    //目录存放方式:year,month,,,, 
    var $nametype;   //html文件命名方式:name 

function cache_end($dir)
{
$cachefile = $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html';
$fp = fopen($cachefile, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush();
}

其实跟上面的原理的是一样的。主要获取页面的URL,然后通过CURL去读取页面,返回一个HTML字符串,

        return $this->dir; 
    } 

//建立缓存文件
public function create_cache()
{
$filename=self::get_filename();
if($filename!="")
{
try{
file_put_contents($filename,ob_get_contents());
return true;
}catch (Exception $e)
{
echo "写缓存失败:".$e;
exit();
}
return true;
}
}

**
     *HTML解析类
     *author:Summer
     *date:2014-08-22
 **/
 
 class Analytical{
 
    public function __construct()
    {
          require_once('Class/SimpleHtmlDom.class.php');
          $this->_getDir();
    }
 
    private function _getDir()
    {
        $dir = "../TMP/HTML/Results/1";
        $imgBIG  = "../TMP/IMG/JPG/BIG";
        $it = new DirectoryIterator($dir."/");
        foreach($it as $file) {
         //用isDot ()方法分别过滤掉“.”和“..”目录
         if (!$it->isDot()) {
             $dirs = $dir."/".$file ;
             $tmp = explode(".",$file);
             $html = file_get_html($dirs);
                              $ulArr = $html->find('img');
                              foreach($ulArr as $key=>$value)
             {
                                 if ($value->class == "u")
                 {
                 $url = " ".$value->src;
                 $infomation = file_get_contents($url);
                 $result = $this->saveHtml($infomation, $imgBIG, $tmp['0'].".jpg");
                 if($result)
                    {
                       echo $file."OKn";
                    }
                 }
 
             }
         }
     }
    }
 
     private function saveHtml($infomation,$filedir,$filename)
     {
 
         if(!$this->mkdirs($filedir))
         {
             return 0;
         }
 
         $sf =  $filedir."/".$filename;
         $fp=fopen($sf,"w"); //写方式打开文件
         return fwrite($fp,$infomation); //存入内容
         fclose($fp); //关闭文件
     }
 
      //创建目录
     private function mkdirs($dir)
     {
         if(!is_dir($dir))
         {
             if(!$this->mkdirs(dirname($dir))){
                 return false;
             }
             if(!mkdir($dir,0777)){
                 return false;
             }
         }
         return true;
     }
 
 }
 
new Analytical();

        case 'namequery': 
        $this->name=$this->dir.'/'.$this->geturlname().'-'.$this->geturlquery().'.htm'; 
        break; 

...//代码段

你现在用两种方式来运行程序:

        case 'day': 
        $this->dir=$this->rootdir.'/'.date("Y-m-d",$this->time); 
        break; 
        } 

用此三个php函数,就可以实现强大的功能。如果数据库查询量较大,可以用cache来解决这个问题。

我这里是因为要采集页面里面的图片(为了防止别人防盗链),所以设计的比较复杂。

        $filename=basename($this->url); 
        $filename=explode(".",$filename); 
        return $filename[0]; 
    } 

public function __construct($cache_foldername,$cacher_time=100)
{
ob_start();
$this->wroot_dir=$_SERVER['DOCUMENT_ROOT'];
$this->cache_folder=$cache_foldername;
$this->cacher_create_time=$cacher_time;
}

另一种:用命令行启动PHP(不存在PHP超时的问题)

        case 'month': 
        $this->dir=$this->rootdir.'/'.date("Y-m",$this->time); 
        break; 

<?php
$_time =10;
$dir="D:php";

实自己一直想做一个内涵图片的网站,以前的想法是做一个CMS,然后自己上传一些图片。。

        switch($this->nametype) 
        { 
        case 'name': 
        $filename=$this->geturlname().'.htm'; 
        $this->name=$this->dir.'/'.$filename; 
        break; 

在php页面缓存主要用到的是ob系列函数:

用PHP盗图,就好比:穿着袜子穿凉鞋一样。虽然没问题,但看着确实蛋疼。

  
        $content=join("",$content); 
        $fp=@fopen($this->name,"w") or die("Failed to open the file ".$this->name." !"); 
        if(@fwrite($fp,$content)) 
        return true; 
        else 
        return false; 
        fclose($fp); 
    } 
/////////////////以name为名字生成html 

//返回文件的名字
private function get_filename()
{
$filename=$file_name=$this->wroot_dir.'/'.$this->cache_folder.'/'.md5($_SERVER['QUERY_STRING']).".html";
return $filename;
}

开始真这么做的,没什么动力。之后就放弃了,后来研究了一个CURL。反正还是把这个想法实现比较好。

    function createdir($dir='') 
    { 
        $this->dir=$dir?$dir:$this->dir; 

function cache_start($_time, $dir)
{
$cachefile = $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html';
$cachetime = $_time;
ob_start();
if(file_exists($cachefile) && (time()-filemtime($cachefile) < $cachetime))
{
include($cachefile);
ob_end_flush();
exit;
}
}

1.PHP的DOM解析扩展simplehtmldom

    /** 
     * function::deletedir() 
     * 删除目录 
     * @param $file 目录名(不带/) 
     * @return 
     */ 
     function deletedir($file) 
     { 
        if(file_exists($file)) 
        { 
            if(is_dir($file)) 
            { 
                $handle =opendir($file); 
                while(false!==($filename=readdir($handle))) 
                { 
                    if($filename!="."&&$filename!="..") 
                      $this->deletedir($file."/".$filename); 
                } 
                closedir($handle); 
                rmdir($file); 
                return true; 
            }else{ 
                unlink($file); 
            } 
        } 
    } 

1.初始化函数,一般是设置页面缓存路径、缓存文件命名格式等,可按个人喜好自定义。这里用到的识别ID是经加密的$_SERVER[REQUEST_URI]参数。这个函数中最后还有一个if判断:若未过缓存期,则加载缓存文件,否则加载源文件。

在说说如果获取需要解析的页面呢?

    function geturlquery($url='') 
    { 
        $this->url=$url?$url:$this->url; 

2.页面缓存函数,这里使用到一个技巧:在缓存文件的内容中加上一个头部信息--过期时间,所以每次只需要对头部中的过期时间和当前时间进行比较(在page_init()函数中进行)就能判断缓存是否过期了。

用到了两个比较重要的东西:


?>

}catch(Exception $e){
echo $e;
return false;
}
}

肯定有人会说,那为什么不用正则去匹配就跳过了HTML保存到本地的环节了,BINGO!我只能懒得写正则而已

    function setvar($nametype='name',$dirtype='year',$rootdir='html') 
    { 
      $this->rootdir=$rootdir; 
      $this->dirtype=$dirtype; 
      $this->nametype=$nametype; 
    } 

PHP页面缓存实现的方法总结

我先说一下我对PHP小偷程序的设计,PHP不支持多线程,这样就只能分先后顺序来做了

        if(@unlink($this->name)) 
        return true; 
        else 
        return false; 
    } 

public function read_cache()
{
try {
if(self::create_folder($this->cache_folder))
{
self::get_cache();//输出缓存文件信息
}else
{
echo "缓存文件夹创建失败!";
return false;
}

复制代码 代码如下:

function page_init()
{
$url = $SERVER['REQUEST_URI'];//子url,该参数一般是唯一的
$pageid = md5($url);
$dir = str_replace('/','
',substr($_SERVER['SCRIPT_NAME'],1,-4));
//目录命名方式,如exp_index
if(!file_exists($pd = PAGE_PATH.$dir.'/'))@mkdir($pd,0777) or die("$pd目录创建失败");
//如cache/page/exp_index/
define('PAGE_FILE',$pd.$pageid.'.html');
//如cache/page/exp_index/cc8ef22b405566745ed21305dd248f0e.html
$contents = file_get_contents(PAGE_FILE);//读出

    function getdir($dirname='',$time=0) 
    { 
        $this->time=$time?$time:$this->time; 
        $this->dirname=$dirname?$dirname:$this->dirname; 

//建立一个新的文件夹
private function create_folder($foler)
{
if(!self::exist_folder($foler))
{
try{
mkdir($this->wroot_dir."/".$foler,0777);
chmod($this->wroot_dir."/".$foler,0777);
return true;
}catch (Exception $e)
{
self::get_cache();//输出缓存
return false;
}
return false;
}
else
{
return true;
}
}

        } 
        return $this->name; 
    } 

ob_start():页面缓存开始的标志,此函数一下的内容直至ob_end_flush()或者ob_end_clean()都保存在页面缓存中;
ob_get_contents():用来获取页面缓存中的内容,获取到以后呢,我们就可以想怎么处理这些内容都行了,过滤字段啦,匹配内容啦,都可以~~~ :)
ob_end_flush():表示页面缓存结束。并且经我验证,缓存的内容将输出到当前页面上,也就是可以显示缓存内容。

        $this->getname(); 

下面是编码部分。

        $this->getdir(); 

        case 'query': 
        $this->name=$this->dir.'/'.$this->geturlquery().'.htm'; 
        break; 

<?php
ob_start();
/**

    function getname($url='',$time=0,$dirname='') 
    { 
        $this->url=$url?$url:$this->url; 
        $this->dirname=$dirname?$dirname:$this->dirname; 
        $this->time=$time?$time:$this->time; 

利用生成文件做缓存

        $content=file($this->url) or die("Failed to open the url ".$this->url." !");; 

?>

    function geturlname($url='') 
    { 
        $this->url=$url?$url:$this->url; 

function page_cache($ttl = 0)
{
$ttl = $ttl ? $ttl : PAGE_TTL;//缓存时间,默认3600s
$contents = ob_get_contents();//从缓存中获取内容
$contents = "n".$contents;
//加上自定义头部:过期时间=生成时间+缓存时间
file_put_contents(PAGE_FILE, $contents);//写入缓存文件中
ob_end_flush();//释放缓存
}

    function createhtml($url='',$time=0,$dirname='',$htmlname='') 
    { 
        $this->url=$url?$url:$this->url; 
        $this->dirname=$dirname?$dirname:$this->dirname; 
        $this->time=$time?$time:$this->time; 
      //上面保证不重复地把变量赋予该类成员 
        if(empty($htmlname)) 
            $this->getname(); 
        else 
            $this->name=$dirname.'/'.$htmlname;  //得到name 

}

///////////////关键步---用file读取$this->url 

if($contents && substr($contents, 13, 10) > time() )//对应page_cache()函数中加上的自定义头部
{
echo substr($contents, 27);
exit(0);
}
return true;
}

        case 'time': 
        $this->name=$this->dir.'/'.$this->time.'.htm'; 
        break; 

cache_start($_time, $dir);
//以下是输出的内容,放在cache_start和cache_end两个方法之间
for ($i=0;$i<5;$i++)
{
echo $i;
sleep(1);
}
cache_end($dir);
?>

例2

//测试缓存文件夹是否存在
private function exist_folder($foler)
{
if(file_exists($this->wroot_dir."/".$foler)){
return true;
}else {
return false;
}
}

}

3.函数使用,注意这两个函数有先后执行顺序,还有别忘了ob_start()

}
}

下面做个示例来说明PHP页面缓存技术:
代码如下 复制代码

本文由金沙贵宾会官网发布于网络安全,转载请注明出处:PHP页面缓存实现的方法总结,PHP小偷程序的设计

关键词:

php管理nginx设想主机shell脚本

使用php作为shell脚本是一件很方便的事情。理所当然,我们可以使用php脚本来管理nginx虚拟主机,下面是笔者的 脚本文...

详细>>

php比较操作符安全问题,比较运算符

$b="10"; echo $a === $b;    //$a===$b吗?    10==="10" 重回空   false 比较两数额,不但相比数据值还会有相比较数据类型...

详细>>

PHP中使用数组指针函数操作数组示例,数组的声

组的内部指针是数组内部的组织机制,指向一个数组中的某个元素。默认是指向数组中第一个元素通过移动或改变指...

详细>>

return之间的区别,var_dump用法介绍

php教程 echo printprint_r三者区别分析 PHP中echo(),print(),print_r(),return的区别? 一、echo 定义和用法 PHP echo() 函数输出一个或...

详细>>