本文整理汇总了PHP中SquidUpdate::HTCPPurge方法的典型用法代码示例。如果您正苦于以下问题:PHP SquidUpdate::HTCPPurge方法的具体用法?PHP SquidUpdate::HTCPPurge怎么用?PHP SquidUpdate::HTCPPurge使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SquidUpdate
的用法示例。
在下文中一共展示了SquidUpdate::HTCPPurge方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: purge
static function purge($urlArr)
{
global $wgSquidServers, $wgHTCPMulticastAddress, $wgHTCPPort;
/*if ( (@$wgSquidServers[0]) == 'echo' ) {
echo implode("<br />\n", $urlArr) . "<br />\n";
return;
}*/
if (!$urlArr) {
return;
}
if ($wgHTCPMulticastAddress && $wgHTCPPort) {
return SquidUpdate::HTCPPurge($urlArr);
}
wfProfileIn(__METHOD__);
$maxSocketsPerSquid = 8;
// socket cap per Squid
$urlsPerSocket = 400;
// 400 seems to be a good tradeoff, opening a socket takes a while
$socketsPerSquid = ceil(count($urlArr) / $urlsPerSocket);
if ($socketsPerSquid > $maxSocketsPerSquid) {
$socketsPerSquid = $maxSocketsPerSquid;
}
$pool = new SquidPurgeClientPool();
$chunks = array_chunk($urlArr, ceil(count($urlArr) / $socketsPerSquid));
foreach ($wgSquidServers as $server) {
foreach ($chunks as $chunk) {
$client = new SquidPurgeClient($server);
foreach ($chunk as $url) {
$client->queuePurge($url);
}
$pool->addClient($client);
}
}
$pool->run();
wfProfileOut(__METHOD__);
}
示例2: purge
/**
* Purges a list of Squids defined in $wgSquidServers.
* $urlArr should contain the full URLs to purge as values
* (example: $urlArr[] = 'http://my.host/something')
* XXX report broken Squids per mail or log
*
* @param $urlArr array
* @return void
*/
static function purge($urlArr)
{
global $wgSquidServers, $wgHTCPMulticastRouting;
if (!$urlArr) {
return;
}
wfDebug("Squid purge: " . implode(' ', $urlArr) . "\n");
if ($wgHTCPMulticastRouting) {
SquidUpdate::HTCPPurge($urlArr);
}
wfProfileIn(__METHOD__);
$urlArr = array_unique($urlArr);
// Remove duplicates
$maxSocketsPerSquid = 8;
// socket cap per Squid
$urlsPerSocket = 400;
// 400 seems to be a good tradeoff, opening a socket takes a while
$socketsPerSquid = ceil(count($urlArr) / $urlsPerSocket);
if ($socketsPerSquid > $maxSocketsPerSquid) {
$socketsPerSquid = $maxSocketsPerSquid;
}
$pool = new SquidPurgeClientPool();
$chunks = array_chunk($urlArr, ceil(count($urlArr) / $socketsPerSquid));
foreach ($wgSquidServers as $server) {
foreach ($chunks as $chunk) {
$client = new SquidPurgeClient($server);
foreach ($chunk as $url) {
$client->queuePurge($url);
}
$pool->addClient($client);
}
}
$pool->run();
wfProfileOut(__METHOD__);
}
示例3: purge
static function purge($urlArr)
{
global $wgSquidServers, $wgHTCPMulticastAddress, $wgHTCPPort;
/*if ( (@$wgSquidServers[0]) == 'echo' ) {
echo implode("<br />\n", $urlArr) . "<br />\n";
return;
}*/
if (empty($urlArr)) {
return;
}
if ($wgHTCPMulticastAddress && $wgHTCPPort) {
return SquidUpdate::HTCPPurge($urlArr);
}
$fname = 'SquidUpdate::purge';
wfProfileIn($fname);
$maxsocketspersquid = 8;
// socket cap per Squid
$urlspersocket = 400;
// 400 seems to be a good tradeoff, opening a socket takes a while
$firsturl = SquidUpdate::expand($urlArr[0]);
unset($urlArr[0]);
$urlArr = array_values($urlArr);
$sockspersq = max(ceil(count($urlArr) / $urlspersocket), 1);
if ($sockspersq == 1) {
/* the most common case */
$urlspersocket = count($urlArr);
} else {
if ($sockspersq > $maxsocketspersquid) {
$urlspersocket = ceil(count($urlArr) / $maxsocketspersquid);
$sockspersq = $maxsocketspersquid;
}
}
$totalsockets = count($wgSquidServers) * $sockspersq;
$sockets = array();
/* this sets up the sockets and tests the first socket for each server. */
for ($ss = 0; $ss < count($wgSquidServers); $ss++) {
$failed = false;
$so = 0;
while ($so < $sockspersq && !$failed) {
if ($so == 0) {
/* first socket for this server, do the tests */
@(list($server, $port) = explode(':', $wgSquidServers[$ss]));
if (!isset($port)) {
$port = 80;
}
#$this->debug("Opening socket to $server:$port");
$error = $errstr = false;
$socket = @fsockopen($server, $port, $error, $errstr, 3);
#$this->debug("\n");
if (!$socket) {
$failed = true;
$totalsockets -= $sockspersq;
} else {
$msg = 'PURGE ' . $firsturl . " HTTP/1.0\r\n" . "Connection: Keep-Alive\r\n\r\n";
#$this->debug($msg);
@fputs($socket, $msg);
#$this->debug("...");
$res = @fread($socket, 512);
#$this->debug("\n");
/* Squid only returns http headers with 200 or 404 status,
if there's more returned something's wrong */
if (strlen($res) > 250) {
fclose($socket);
$failed = true;
$totalsockets -= $sockspersq;
} else {
@stream_set_blocking($socket, false);
$sockets[] = $socket;
}
}
} else {
/* open the remaining sockets for this server */
list($server, $port) = explode(':', $wgSquidServers[$ss]);
if (!isset($port)) {
$port = 80;
}
$sockets[$so + 1] = @fsockopen($server, $port, $error, $errstr, 2);
@stream_set_blocking($sockets[$so + 1], false);
}
$so++;
}
}
if ($urlspersocket > 0) {
/* now do the heavy lifting. The fread() relies on Squid returning only the headers */
for ($r = 0; $r < $urlspersocket; $r++) {
for ($s = 0; $s < $totalsockets; $s++) {
if ($r != 0) {
$res = '';
$esc = 0;
while (strlen($res) < 100 && $esc < 200) {
$res .= @fread($sockets[$s], 512);
$esc++;
usleep(20);
}
}
$urindex = $r + $urlspersocket * ($s - $sockspersq * floor($s / $sockspersq));
$url = SquidUpdate::expand($urlArr[$urindex]);
$msg = 'PURGE ' . $url . " HTTP/1.0\r\n" . "Connection: Keep-Alive\r\n\r\n";
#$this->debug($msg);
@fputs($sockets[$s], $msg);
//.........这里部分代码省略.........
示例4: purge
static function purge($urlArr)
{
global $wgSquidServers, $wgHTCPMulticastAddress, $wgHTCPPort;
self::logit('urls: ' . preg_replace('@\\s+@', ' ', print_r($urlArr, true)));
/*if ( (@$wgSquidServers[0]) == 'echo' ) {
echo implode("<br />\n", $urlArr) . "<br />\n";
return;
}*/
if (empty($urlArr)) {
return;
}
// hack - ignore the stupid user kudos pages that take up so much time!
$good = array();
foreach ($urlArr as $u) {
if (!preg_match("@User_kudos@", $u)) {
$good[] = $u;
}
}
$urlArr = $good;
// end hack
if ($wgHTCPMulticastAddress && $wgHTCPPort) {
return SquidUpdate::HTCPPurge($urlArr);
}
$fname = 'SquidUpdate::purge';
wfProfileIn($fname);
//wfDebug(date("r") . wfBacktrace());
wfDebug(date("r") . " PURGE starting " . print_r($urlArr, true) . "\n");
$maxsocketspersquid = 8;
// socket cap per Squid
$urlspersocket = 400;
// 400 seems to be a good tradeoff, opening a socket takes a while
$firsturl = SquidUpdate::expand($urlArr[0]);
unset($urlArr[0]);
$urlArr = array_values($urlArr);
$sockspersq = max(ceil(count($urlArr) / $urlspersocket), 1);
if ($sockspersq == 1) {
/* the most common case */
$urlspersocket = count($urlArr);
wfDebug(date("r") . " PURGE setting urlspersocket to the count of urlArr\n");
} elseif ($sockspersq > $maxsocketspersquid) {
$urlspersocket = ceil(count($urlArr) / $maxsocketspersquid);
$sockspersq = $maxsocketspersquid;
wfDebug(date("r") . " PURGE setting urlspersocket to the ceil " . count($urlArr) . " and {$maxsocketspersquid}\n");
}
$totalsockets = count($wgSquidServers) * $sockspersq;
$sockets = array();
$isFastlyPurge = array();
/* this sets up the sockets and tests the first socket for each server. */
for ($ss = 0; $ss < count($wgSquidServers); $ss++) {
$failed = false;
$so = 0;
while ($so < $sockspersq && !$failed) {
if ($so == 0) {
/* first socket for this server, do the tests */
@(list($server, $port) = explode(':', $wgSquidServers[$ss]));
if (!isset($port)) {
$port = 80;
}
$isFastly = $server == WH_FASTLY_API_SERVER;
#$this->debug("Opening socket to $server:$port");
$error = $errstr = false;
$socket = @fsockopen($server, $port, $error, $errstr, 3);
#$this->debug("\n");
if (!$socket) {
$failed = true;
$totalsockets -= $sockspersq;
} else {
// tmp testing by reuben -- june 7 2013. see purge below too. this may
// become permanent
if (false || !preg_match('@^https?://([^/]+)(/.*)$@', $firsturl, $m)) {
$msg = "PURGE {$firsturl} HTTP/1.0\r\n" . "Connection: Keep-Alive\r\n\r\n";
} else {
$host = $m[1];
$loc = $m[2];
$msg = "PURGE {$loc} HTTP/1.0\r\n" . "Host: {$host}\r\n" . "Accept: */*\r\n" . "Connection: Keep-Alive\r\n\r\n";
}
self::logit('req (' . $wgSquidServers[$ss] . ', ' . $ss . ') : ' . preg_replace('@\\s+@m', ' ', $msg));
wfDebug(date('r') . " PURGE -- first request {$firsturl}\n");
wfDebug(date('r') . " req headers: " . $msg);
@fputs($socket, $msg);
#$this->debug("...");
$res = @fread($socket, 512);
#$this->debug("\n");
/* Squid only returns http headers with 200 or 404 status,
if there's more returned something's wrong
Check separately for Varnish and Fastly responses
b/c each is different.
*/
wfDebug(date('r') . " PURGE result: " . print_r($res, true) . "\n");
$isVarnishOK = strpos($res, '200 Purged') !== false;
$isFastlyOK = strpos($res, '"status": "ok"') !== false;
if (!$isVarnishOK && !$isFastlyOK) {
fclose($socket);
$failed = true;
$totalsockets -= $sockspersq;
} else {
@stream_set_blocking($socket, false);
$sockets[] = $socket;
$isFastlyPurge[] = $isFastly;
}
//.........这里部分代码省略.........