Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2809
  • 博文数量: 1
  • 博客积分: 32
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-18 12:00
文章分类
文章存档

2012年(1)

我的朋友
最近访客

分类:

2012-06-15 00:04:03

我把公司的一个网站加上了squid做缓存,并写了一个php程序实现了提交一批url进行删除缓存。
但是若是需要删除某个目录下的文件的缓存的话,若是文件数太多,就不好一个个url地填写到php页面里了。
我今天研究了一下squid的cache文件,发现能够从中提取出URL,如下图所示
第一部分(红色)是文件头,我没有研究是什么结构,但是对比了多个文件,发现它是固定长度0x40h个字节
第二部分(蓝色)是URL
第三部分是http响应头部
为此我写了一个程序提取url出来

点击(此处)折叠或打开

  1. <?php
  2.     echo getUrlFromCacheFile("C:/squid/var/cache/00/00/00000000");
  3.     function getUrlFromCacheFile($filename){
  4.         //cache文件头长度
  5.         $headerLen=0x40;
  6.         $handle = fopen($filename, "rb");
  7.         if(!$handle){
  8.             return -1;    
  9.         }
  10.         //读取文件的前1k字节
  11.         $contents = fread($handle, 1024);
  12.         fclose($handle);
  13.         if(strlen($contents)<=$headerLen){
  14.             return -2;    
  15.         }
  16.         //截掉文件头
  17.         $contents=substr($contents,$headerLen);
  18.         
  19.         //cache文件的分隔符为\0
  20.         $pos=strpos($contents, chr(0));
  21.         if($pos===FALSE){
  22.             return -3;    
  23.         }
  24.         //获取分隔符前的字符串
  25.         $contents=substr($contents,0,$pos);
  26.         return $contents;
  27.     }
  28. ?>
阅读(354) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~