PHP中清除清漆的shell_exec替代方案

PHP中清除清漆的shell_exec替代方案,php,varnish,Php,Varnish,我继承了一个脚本,它使用shell_exec清除服务器上的varnish缓存 我从来都不太喜欢使用shell_exec,但我不知道直接从PHP网页清除缓存的另一种方法 还有其他方法吗?他们可以休息一下。除了Varnish的管理控制台(付费软件)之外,Varnish还有vcl方法来清除或禁止缓存中的对象,但是您需要在当前的vcl配置中添加一些逻辑[1][2] 最好的方法取决于你想要实现什么,清除单个对象,执行站点的完全清理 支持完全主机清理的逻辑: acl purgers { "127.0

我继承了一个脚本,它使用shell_exec清除服务器上的varnish缓存

我从来都不太喜欢使用shell_exec,但我不知道直接从PHP网页清除缓存的另一种方法


还有其他方法吗?

他们可以休息一下。除了Varnish的管理控制台(付费软件)之外,Varnish还有vcl方法来清除或禁止缓存中的对象,但是您需要在当前的vcl配置中添加一些逻辑[1][2]

最好的方法取决于你想要实现什么,清除单个对象,执行站点的完全清理

支持完全主机清理的逻辑:

acl purgers {
    "127.0.0.1";
    "192.168.0.0"/24;
}

sub vcl_recv {
    if (req.request == "BAN") {
        if (!client.ip ~ purgers) {
           error 405 "Method not allowed";
        }
        else {
           ban("obj.http.x-url ~ "/" && obj.http.x-host ~ " + req.http.host);
           error 200 "Banned";
        }
    }
}
acl purgers {
    "127.0.0.1";
    "192.168.0.0"/24;
}

sub vcl_recv {
    if (req.request == "PURGE") {
            if (!client.ip ~ purgers) {
                    error 405 "Method not allowed";
            }
            return (lookup);
    }
}

sub vcl_hit {
    if (req.request == "PURGE") {
            purge;
            error 200 "Purged";
    }
}
sub vcl_miss {
    if (req.request == "PURGE") {
            purge;
            error 404 "Not in cache";
    }
}
sub vcl_pass {
    if (req.request == "PURGE") {
            error 502 "PURGE on a passed object";
    }
}
支持单对象清除的逻辑(来自Varnish Book):

acl purgers {
    "127.0.0.1";
    "192.168.0.0"/24;
}

sub vcl_recv {
    if (req.request == "BAN") {
        if (!client.ip ~ purgers) {
           error 405 "Method not allowed";
        }
        else {
           ban("obj.http.x-url ~ "/" && obj.http.x-host ~ " + req.http.host);
           error 200 "Banned";
        }
    }
}
acl purgers {
    "127.0.0.1";
    "192.168.0.0"/24;
}

sub vcl_recv {
    if (req.request == "PURGE") {
            if (!client.ip ~ purgers) {
                    error 405 "Method not allowed";
            }
            return (lookup);
    }
}

sub vcl_hit {
    if (req.request == "PURGE") {
            purge;
            error 200 "Purged";
    }
}
sub vcl_miss {
    if (req.request == "PURGE") {
            purge;
            error 404 "Not in cache";
    }
}
sub vcl_pass {
    if (req.request == "PURGE") {
            error 502 "PURGE on a passed object";
    }
}
[1]


[2]

为什么您不喜欢使用
shell\u exec()
?你还希望以什么方式存在?为什么特别需要从脚本中清除缓存?我同意@Brad。只要您没有将输入从客户端传递到shell_exec,使用它就没有问题。