function purge_urls in Purge 6
Same name and namespace in other branches
- 7.2 includes/purge.inc \purge_urls()
- 7 purge.inc \purge_urls()
Purges urls from reverse proxy caches
Parameters
$purge_urls: Array of urls to remove from the proxy cache using the http purge method.
Return value
Array of urls and their http status codes after purging.
1 call to purge_urls()
- purge_expire_cache in ./
purge.module - Implementation of hook_expire_cache().
File
- ./
purge.inc, line 17 - Contains the main purging functionality and error handling
Code
function purge_urls($purge_urls) {
// Get settings
$proxy_urls = explode(' ', variable_get('purge_proxy_urls', 'http://localhost:80'));
$purge_requests = array();
$current_purge_request = 0;
// Find out the url parts we need from the urls to be purged
foreach ($purge_urls as $purge_url) {
$purge_url_parts = parse_url($purge_url);
// Determine the host
$purge_url_host = $purge_url_parts['host'];
// Add portnames to the host if any are set
if (array_key_exists('port', $purge_url_parts)) {
$purge_url_host = $purge_url_host . ":" . $purge_url_parts['port'];
}
// Process all urls for each proxy
foreach ($proxy_urls as $proxy_url) {
// Add url and proxy url to the array for later processing
$purge_requests[$current_purge_request]['purge_url'] = $purge_url;
$purge_requests[$current_purge_request]['proxy_url'] = $proxy_url;
// Select which method to use
$proxy_url_parts = parse_url($proxy_url);
if (array_key_exists('query', $proxy_url_parts)) {
if (strstr($proxy_url_parts['query'], 'purge_method=get')) {
$method = 'get';
}
}
else {
$method = 'purge';
}
// Construct a new url
$proxy_url_base = $proxy_url_parts['scheme'] . "://" . $proxy_url_parts['host'];
if (array_key_exists('port', $proxy_url_parts)) {
$proxy_url_base = $proxy_url_base . ":" . $proxy_url_parts['port'];
}
// Construct a new path retaining the proxy url path (needed for nginx/get methods)
if (array_key_exists('path', $proxy_url_parts)) {
$purge_path = '/' . trim($proxy_url_parts['path'], '/') . '/' . ltrim($purge_url_parts['path'], '/');
}
else {
$purge_path = $purge_url_parts['path'];
}
// Check for a query and add it
if (array_key_exists('query', $purge_url_parts)) {
$purge_path = $purge_path . '?' . $purge_url_parts['query'];
}
$purge_requests[$current_purge_request]['purge_url'] = $proxy_url_base . $purge_path;
// The default PURGE method. Native to Squid and configurable in Varnish and Nginx
if ($method == 'purge') {
// Make it a PURGE request (not GET or POST)
$purge_requests[$current_purge_request]['request_method'] = 'PURGE';
// Set the host header to the sites hostname
$purge_requests[$current_purge_request]['headers'] = array(
"Host: " . $purge_url_host,
);
}
elseif ($method == 'get') {
$purge_requests[$current_purge_request]['request_method'] = 'GET';
// Set the host header to the sites hostname
$purge_requests[$current_purge_request]['headers'] = array(
"Host: " . $purge_url_host,
);
}
$current_purge_request++;
}
}
// Issue the requests using curl (for now)
$purge_request_results = purge_issue_requests_curl($purge_requests);
return $purge_request_results;
}