PURGE 是一个特殊的HTTP请求方法。它是 Squid 的专有方法,没有在任何RFC 里定义。它让管理员能强制删除缓存对象。既然该方法有些危险,squid 默认拒绝PURGE 请求,除非你定义了ACL 引用了该方法。否则,任何能访问cache 者也许能够删除任意缓存对象。我推荐仅仅允许来自localhost 的PURGE:
acl Purge method PURGE
acl Localhost src 127.0.0.1
http_access allow Purge Localhost
http_access deny Purge (squid.conf摘要)
以下是使用purge删除指定文件的两个函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//发送socket数据 function socket_service($ip, $port=’80′, $out=”") { if(trim($ip)==”")return “Error: without dest host!”; if($out==”) $out=”GET / HTTP/1.1\r\nHost: $ip\r\n\r\n”; $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $sourceips['internal'] = ‘6.4.10.9′; $sourceips['external'] = ‘6.4.10.9′; socket_bind($sock, $sourceips['internal']); socket_connect($sock, $ip, $port); socket_write($sock, $out); $return=socket_read($sock,100000); socket_close($sock); return $return; } //更新url指定的文件cache function purgeFile($url) { $squid_dv=array(”1.5.5.6″,”6.6.8.8″);//两个前端squid $request=”PURGE $url \n”; foreach($squid_dv as $key => $ip) { $result=socket_service($ip,80,$request); } } |
这样只需要在代码里使用 purgeFile(’/xxx.gif’);即可将上述两个服务器中指定的路径文件缓存删除。
原帖:http://hi.baidu.com/farmerluo/blog/item/65194710ca8780f4c2ce794b.html