Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4213054
  • 博文数量: 291
  • 博客积分: 8003
  • 博客等级: 大校
  • 技术积分: 4275
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-30 18:28
文章分类

全部博文(291)

文章存档

2017年(1)

2013年(47)

2012年(115)

2011年(121)

2010年(7)

分类: 系统运维

2012-06-08 22:35:11

我把公司的一个网站加上了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. ?>
阅读(2098) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

xieyunge2012-06-15 00:04:53

挺好,我用在我的squid服务器上了,挺好用的,最好能够提供一个更新整个目录的脚本就好了