diff --git a/.gitignore b/.gitignore
index daf3eea..5c46148 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
config.inc.php
*.phar
vendor
+tags
+cscope*
diff --git a/css/index.css b/css/index.css
index 6fa6dda..00ed86c 100644
--- a/css/index.css
+++ b/css/index.css
@@ -9,6 +9,9 @@ padding-left: 1em;
border-right: 1px solid #000;
overflow: hidden;
}
+#filter_input_form {
+width: 24em;
+}
#sidebar a, #sidebar a:visited {
color: #000;
diff --git a/delete.php b/delete.php
index ec7e20e..63b437c 100644
--- a/delete.php
+++ b/delete.php
@@ -46,7 +46,7 @@
}
- die('?view&s='.$server['id'].'&key='.urlencode($_GET['key']));
+ die('?view&s='.$server['id'].'&key='.$_GET['key']);
}
@@ -57,7 +57,7 @@
$redis->del($key);
}
- die('?&s='.$server['id']);
+ die(substr($_SERVER['HTTP_REFERER'], strpos($_SERVER['HTTP_REFERER'], '?') ));
}
?>
diff --git a/edit.php b/edit.php
index 357a368..fbda5e4 100644
--- a/edit.php
+++ b/edit.php
@@ -88,7 +88,7 @@
?>
Key:
- >
+ >
Hash key:
- >
+ >
diff --git a/export.php b/export.php
index 69c15c4..351c7da 100644
--- a/export.php
+++ b/export.php
@@ -7,7 +7,7 @@
// Export to redis-cli commands
function export_redis($key) {
- global $redis;
+ global $redis, $server;
$type = $redis->type($key);
@@ -123,7 +123,7 @@ function export_json($key) {
if (isset($_GET['key'])) {
echo json_encode(export_json($_GET['key']));
} else { // All keys
- $keys = $redis->keys('*');
+ $keys = $server['debug'] == true ? $redis->keys('*') : array();
$vals = array();
foreach ($keys as $key) {
@@ -140,7 +140,7 @@ function export_json($key) {
if (isset($_GET['key'])) {
export_redis($_GET['key']);
} else { // All keys
- $keys = $redis->keys('*');
+ $keys = $server['debug'] == true ? $redis->keys('*') : array();
foreach ($keys as $key) {
export_redis($key);
diff --git a/flush.php b/flush.php
index 4e74489..427d5b0 100644
--- a/flush.php
+++ b/flush.php
@@ -8,6 +8,10 @@
require_once 'includes/common.inc.php';
+if ($server['debug'] == true) {
+ $redis->flushdb();
+else {
+ die ("Forbidden operation!");
+}
-$redis->flushdb();
diff --git a/includes/config.sample.inc.php b/includes/config.sample.inc.php
index 4fc63d7..a175137 100644
--- a/includes/config.sample.inc.php
+++ b/includes/config.sample.inc.php
@@ -8,7 +8,8 @@
'host' => '127.0.0.1',
'port' => 6379,
'filter' => '*',
-
+ //Slow queries such as `keys` are allowed only in debug mode. If you are operate an online redis, please set it to false.
+ 'debug' => true,
// Optional Redis authentication.
//'auth' => 'redispasswordhere' // Warning: The password is sent in plain-text to the Redis server.
),
diff --git a/index.php b/index.php
index b768ecb..6c0ce8e 100644
--- a/index.php
+++ b/index.php
@@ -4,7 +4,13 @@
if($redis) {
- $keys = $redis->keys($server['filter']);
+ if ($server['debug'] == true) {
+ $keys = $redis->keys($server['filter']);
+ } else {
+ $keys = strlen($server['filter']) > 1
+ ? array(substr($server['filter'], 0, -1))
+ : array();
+ }
sort($keys);
@@ -17,7 +23,9 @@
continue;
}
- $key = explode($server['seperator'], $key);
+ $key = $server['debug'] == true
+ ? explode($server['seperator'], $key)
+ : array($key);
// $d will be a reference to the current namespace.
$d = &$namespaces;
@@ -83,7 +91,7 @@ function print_namespace($item, $name, $fullkey, $islast) {
?>
>
- ()
+ ()
()
-
+
+Tips:
+
You can use URL parameter `from` & `to` to custermize page range in case of List and zSet.
+We even support zRangeByScore now,Just assing URL parameter `cursor=score&from=123&to=456` .
+If you specify `cursor` to 'datetime' , `from` & `to` could even assigned as datetime format.
-
-
+ $server) {
diff --git a/rename.php b/rename.php
index a542576..df6034e 100644
--- a/rename.php
+++ b/rename.php
@@ -18,7 +18,7 @@
?>
expire($_POST['key'], $_POST['ttl']);
}
- header('Location: view.php?key='.urlencode($_POST['key']));
+ header('Location: view.php?key='.$_POST['key']);
die;
}
diff --git a/view.php b/view.php
index 8d86371..4c42d47 100644
--- a/view.php
+++ b/view.php
@@ -18,23 +18,39 @@
die;
}
+$key = $_GET['key'];
-
-$type = $redis->type($_GET['key']);
-$exists = $redis->exists($_GET['key']);
+$type = $redis->type($key);
+$exists = $redis->exists($key);
$count_elements_page = isset($config['count_elements_page']) ? $config['count_elements_page'] : false;
-$page_num_request = isset($_GET['page']) ? (int)$_GET['page'] : 1;
-$page_num_request = $page_num_request === 0 ? 1 : $page_num_request;
-
+$page_num_request = isset($_GET['page']) && $_GET['page'] > 0 ? (int)$_GET['page'] : 1;
+
+//parameters `from` and `to` have higher priority than `page`
+//
+$cursors = array('index', 'score', 'datetime');
+$cursorType = isset ($_GET['cursor']) && in_array($_GET['cursor'], $cursors) ? $_GET['cursor'] : 'index';
+if (isset ($_GET['from'])) {
+ if ($cursorType == 'datetime') {
+ $start = strtotime($_GET['from']);
+ $end = isset ($_GET['to']) ? strtotime($_GET['to']) : '+inf';
+ $page_num_request = $start / $count_elements_page +1;
+ } else {
+ $start = $_GET['from'];
+ $end = isset ($_GET['to']) ? $_GET['to'] : $count_elements_page -1;
+ }
+} else {
+ $start = ($page_num_request-1) * $count_elements_page;
+ $end = $start + $count_elements_page -1;
+}
?>
-
+
-
-
-
+
+
+
ttl($_GET['key']);
+$ttl = $redis->ttl($key);
try {
- $encoding = $redis->object('encoding', $_GET['key']);
+ $encoding = $redis->object('encoding', $key);
} catch (Exception $e) {
$encoding = null;
}
switch ($type) {
- case 'string':
- $value = $redis->get($_GET['key']);
+case 'string':
+ $value = $redis->get($key);
$size = strlen($value);
break;
- case 'hash':
- $values = $redis->hGetAll($_GET['key']);
+case 'hash':
+ $values = $redis->hGetAll($key);
$size = count($values);
break;
case 'list':
- $size = $redis->lLen($_GET['key']);
+ $size = $redis->lLen($key);
+ $values = $redis->lRange($key, $start, $end);
+ $count = count($values);
break;
case 'set':
- $values = $redis->sMembers($_GET['key']);
+ $values = $redis->sMembers($key);
$size = count($values);
break;
case 'zset':
- $values = $redis->zRange($_GET['key'], 0, -1);
- $size = count($values);
+ $size = $redis->zCard($key);
+ if ($cursorType == 'index') {
+ $values = $redis->zRange($key, $start, $end, 'WITHSCORES');
+ } else {
+ $values = $redis->zRangeByScore($key, $start, $end,
+ array('WITHSCORES' =>true,'LIMIT'=>array(0, $count_elements_page))
+ );
+ }
+ $count = count($values);
break;
}
-
-if (isset($values) && ($count_elements_page !== false)) {
- $values = array_slice($values, $count_elements_page * ($page_num_request - 1), $count_elements_page,true);
-}
+
?>
Type:
-
+
Encoding:
Size:
+
+Returns:
+
@@ -128,19 +153,25 @@
}
-if (isset($pagination)) {
+if (isset($pagination) && strlen($pagination) < 2048) {
echo $pagination;
}
// String
-if ($type == 'string') { ?>
+if ($type == 'string') {
+ $value_unsrlzd = @unserialize($value);
+ if ($value_unsrlzd != null) { // unserialize success!
+ $value_export = var_export($value_unsrlzd, true);
+ $value = $value_export;
+ }
+?>
@@ -154,11 +185,17 @@
Key
Value
- $value) { ?>
+ $value) {
+ $value_unsrlzd = @unserialize($value);
+ if ($value_unsrlzd != null) { // unserialize success!
+ $value_export = var_export($value_unsrlzd, true);
+ $value = $value_export;
+ }
+?>
>
-
+
-
+
@@ -172,21 +209,12 @@
Index
Value
$count_elements_page)) {
- $start = 0;
- $end = $size;
- } else {
- $start = $count_elements_page * ($page_num_request - 1);
- $end = min($start + $count_elements_page, $size);
- }
-
- for ($i = $start; $i < $end; ++$i) {
- $value = $redis->lIndex($_GET['key'], $i);
+foreach ($values as $i => $value) {
?>
>
-
+
-
+
@@ -202,12 +230,12 @@
Value
exists($value) ? ''.nl2br(format_html($value, $server['charset'])).' ' : nl2br(format_html($value, $server['charset']));
+ $display_value = $redis->exists($value) ? ''.nl2br(format_html($value, $server['charset'])).' ' : nl2br(format_html($value, $server['charset']));
?>
>
-
+
-
+
@@ -219,15 +247,19 @@
else if ($type == 'zset') { ?>
-Score
Value
+Score
Value
Parse score as date
-zScore($_GET['key'], $value);
- $display_value = $redis->exists($value) ? ''.nl2br(format_html($value, $server['charset'])).' ' : nl2br(format_html($value, $server['charset']));
+ $score) {
+ $score_parsed = $score > 1300000000 ? @date('Y-m-d H:i:s', (int)$score) : 0;
+ $value_unsrlzd = @unserialize($value);
+ if ($value_unsrlzd != null){ // unserialize success!
+ $value = var_export($value_unsrlzd, true);
+ }
+ $display_value = $redis->exists($value) ? ''.nl2br(format_html($value, $server['charset'])).' ' : nl2br(format_html($value, $server['charset']));
?>
- >
-
-
+
>
+
+
@@ -237,7 +269,7 @@
- Add another value
+ Add another value