function clearVarnish($ip,$url,$host=null){ $errstr = ''; - $errno = '';
- $varnist_arr = isset($host) ? $host : C('VARNISH_LIST');
- foreach ($varnist_arr as $v){
- $fp = fsockopen ($ip, 2000, $errno, $errstr, 2);
- if (!$fp) {
- return false;
- } else {
- $out = "purge.url $url \r\n";
- fputs ($fp, $out);
- $out = fgets($fp , 4096);
- fclose ($fp);
- return $out;
- }
- }
- }
- ?>
复制代码注意,传入进来的 url是不能带参数的,例如:www.baidu.com/?tn=sougou
因为 purge.url 后清空的是 正则表达式 可以改成 www.baidu.com/(.?)sougou 即可。
当一台varnish 缓存多个站点内容需要清除指定站点URL 或单纯清除 站点首页时,需使用purge 而不是purge.url。
2、代码:
- function varnish_purge($ip, $host='', $url) {
- $errstr = '';
- $errno = '';
- $fp = fsockopen ($ip, 2000, $errno, $errstr, 2);
- if (!$fp) {
- return $errno;
- }else {
- if(!empty($host)){
- $out = "purge req.http.host == {$host} && req.url ~ ^/$ \r\n";
- }else{
- $out = " purge.url {$url} \r\n";
- }
- fputs ($fp, $out);
- $out = fgets($fp , 4096);
- fclose ($fp);
- return $out;
- }
- }
复制代码 |