我把公司的一个网站加上了squid做缓存,并写了一个php程序实现了提交一批url进行删除缓存。
但是若是需要删除某个目录下的文件的缓存的话,若是文件数太多,就不好一个个url地填写到php页面里了。
我今天研究了一下squid的cache文件,发现能够从中提取出URL,如下图所示
第一部分(红色)是文件头,我没有研究是什么结构,但是对比了多个文件,发现它是固定长度0x40h个字节
第二部分(蓝色)是URL
第三部分是http响应头部
为此我写了一个程序提取url出来
- <?php
- echo getUrlFromCacheFile("C:/squid/var/cache/00/00/00000000");
- function getUrlFromCacheFile($filename){
- //cache文件头长度
- $headerLen=0x40;
- $handle = fopen($filename, "rb");
- if(!$handle){
- return -1;
- }
- //读取文件的前1k字节
- $contents = fread($handle, 1024);
- fclose($handle);
- if(strlen($contents)<=$headerLen){
- return -2;
- }
- //截掉文件头
- $contents=substr($contents,$headerLen);
-
- //cache文件的分隔符为\0
- $pos=strpos($contents, chr(0));
- if($pos===FALSE){
- return -3;
- }
- //获取分隔符前的字符串
- $contents=substr($contents,0,$pos);
- return $contents;
- }
- ?>
阅读(2098) | 评论(1) | 转发(1) |