note 123793 added to memcached.getallkeys
| From: | harold at snel dot me | Date: | Tue, 23 Apr 2019 08:59:56 +0000 |
| Subject: | note 123793 added to memcached.getallkeys | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-210660@lists.php.net to get a copy of this message | ||
/**
* Get all memcached keys. Special function because getAllKeys() is broken since memcached 1.4.23.
Should only be needed on php 5.6
*
* cleaned up version of code found on Stackoverflow.com by Maduka Jayalath
*
* @return array|int - all retrieved keys (or negative number on error)
*/
public function getMemcachedKeys($host = '127.0.0.1', $port = 11211)
{
$mem = @fsockopen($host, $port);
if ($mem === false)
{
return -1;
}
// retrieve distinct slab
$r = @fwrite($mem, 'stats items' . chr(10));
if ($r === false)
{
return -2;
}
$slab = [];
while (($l = @fgets($mem, 1024)) !== false)
{
// finished?
$l = trim($l);
if ($l == 'END')
{
break;
}
$m = [];
// <STAT items:22:evicted_nonzero 0>
$r = preg_match('/^STAT\sitems\:(\d+)\:/', $l, $m);
if ($r != 1)
{
return -3;
}
$a_slab = $m[1];
if (!array_key_exists($a_slab, $slab))
{
$slab[$a_slab] = [];
}
}
reset($slab);
foreach ($slab as $a_slab_key => &$a_slab)
{
$r = @fwrite($mem, 'stats cachedump ' . $a_slab_key . ' 100' . chr(10));
if ($r === false)
{
return -4;
}
while (($l = @fgets($mem, 1024)) !== false)
{
// finished?
$l = trim($l);
if ($l == 'END')
{
break;
}
$m = [];
// ITEM 42 [118 b; 1354717302 s]
$r = preg_match('/^ITEM\s([^\s]+)\s/', $l, $m);
if ($r != 1)
{
return -5;
}
$a_key = $m[1];
$a_slab[] = $a_key;
}
}
// close the connection
@fclose($mem);
unset($mem);
$keys = [];
reset($slab);
foreach ($slab AS &$a_slab)
{
reset($a_slab);
foreach ($a_slab AS &$a_key)
{
$keys[] = $a_key;
}
}
unset($slab);
return $keys;
}
----
Server IP: 208.43.231.9
Probable Submitter: 185.85.3.195 (proxied: 2001:981:1bc:1:39d5:e607:6d60:f173)
----
Manual Page -- http://php.net/manual/en/memcached.getallkeys.php
Edit -- https://master.php.net/note/edit/123793
Del: integrated -- https://master.php.net/note/delete/123793/integrated
Del: useless -- https://master.php.net/note/delete/123793/useless
Del: bad code -- https://master.php.net/note/delete/123793/bad+code
Del: spam -- https://master.php.net/note/delete/123793/spam
Del: non-english -- https://master.php.net/note/delete/123793/non-english
Del: in docs -- https://master.php.net/note/delete/123793/in+docs
Del: other reasons-- https://master.php.net/note/delete/123793
Reject -- https://master.php.net/note/reject/123793
Search -- https://master.php.net/manage/user-notes.php