> CentOS > CentOS运维 >

如何用php代码清空squid缓存下的指定文件

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删除指定文件的两个函数:

    //发送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://www.54chen.com/c/490

 

另一个代码

 

 
  1. <?php  
  2. function purge($ip, $url)  
  3. {  
  4.     $errstr = '';  
  5.     $errno = '';  
  6.     $fp = fsockopen ($ip, 80, $errno, $errstr, 2);  
  7.     if (!$fp)  
  8.     {  
  9.          return false;  
  10.     }  
  11.     else  
  12.     {  
  13.         $out = "PURGE $url HTTP/1.1/r/n";  
  14.         $out .= "Host:blog.s135.com/r/n";  
  15.         $out .= "Connection: close/r/n/r/n";  
  16.         fputs ($fp, $out);  
  17.         $out = fgets($fp , 4096);  
  18.         fclose ($fp);  
  19.         return true;  
  20.     }  
  21. }  
  22. purge("192.168.0.4""/index.php");  
  23. ?>  
(责任编辑:IT)