Skip to content

Commit b38b7d2

Browse files
fratuz610erikdubbelboer
authored andcommitted
Improved export functionality (erikdubbelboer#120)
Added support for filter and transform parameters while exporting bulk databases
1 parent 0344b73 commit b38b7d2

File tree

1 file changed

+48
-13
lines changed

1 file changed

+48
-13
lines changed

export.php

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,30 @@
33
require_once 'includes/common.inc.php';
44

55

6-
7-
86
// Export to redis-cli commands
9-
function export_redis($key) {
7+
function export_redis($key, $filter = false, $transform = false) {
8+
109
global $redis;
1110

1211
$type = $redis->type($key);
1312

14-
13+
// we rename the keys as necessary
14+
if($filter !== false && $transform !== false)
15+
$outputKey = str_replace($filter, $transform, $key);
16+
else
17+
$outputKey = $key;
18+
1519
// String
1620
if ($type == 'string') {
17-
echo 'SET "',addslashes($key),'" "',addslashes($redis->get($key)),'"',PHP_EOL;
21+
echo 'SET "',addslashes($outputKey),'" "',addslashes($redis->get($key)),'"',PHP_EOL;
1822
}
1923

2024
// Hash
2125
else if ($type == 'hash') {
2226
$values = $redis->hGetAll($key);
2327

2428
foreach ($values as $k => $v) {
25-
echo 'HSET "',addslashes($key),'" "',addslashes($k),'" "',addslashes($v),'"',PHP_EOL;
29+
echo 'HSET "',addslashes($outputKey),'" "',addslashes($k),'" "',addslashes($v),'"',PHP_EOL;
2630
}
2731
}
2832

@@ -31,7 +35,7 @@ function export_redis($key) {
3135
$size = $redis->lLen($key);
3236

3337
for ($i = 0; $i < $size; ++$i) {
34-
echo 'RPUSH "',addslashes($key),'" "',addslashes($redis->lIndex($key, $i)),'"',PHP_EOL;
38+
echo 'RPUSH "',addslashes($outputKey),'" "',addslashes($redis->lIndex($key, $i)),'"',PHP_EOL;
3539
}
3640
}
3741

@@ -40,7 +44,7 @@ function export_redis($key) {
4044
$values = $redis->sMembers($key);
4145

4246
foreach ($values as $v) {
43-
echo 'SADD "',addslashes($key),'" "',addslashes($v),'"',PHP_EOL;
47+
echo 'SADD "',addslashes($outputKey),'" "',addslashes($v),'"',PHP_EOL;
4448
}
4549
}
4650

@@ -51,7 +55,7 @@ function export_redis($key) {
5155
foreach ($values as $v) {
5256
$s = $redis->zScore($key, $v);
5357

54-
echo 'ZADD "',addslashes($key),'" ',$s,' "',addslashes($v),'"',PHP_EOL;
58+
echo 'ZADD "',addslashes($outputKey),'" ',$s,' "',addslashes($v),'"',PHP_EOL;
5559
}
5660
}
5761
}
@@ -64,7 +68,6 @@ function export_json($key) {
6468

6569
$type = $redis->type($key);
6670

67-
6871
// String
6972
if ($type == 'string') {
7073
$value = $redis->get($key);
@@ -116,9 +119,12 @@ function export_json($key) {
116119
header('Content-type: '.$ct.'; charset=utf-8');
117120
header('Content-Disposition: inline; filename="export.'.$ext.'"');
118121

122+
$filter = !empty($_POST['filter']) ? trim($_POST['filter']) : false;
123+
$transform = !empty($_POST['transform']) ? trim($_POST['transform']) : false;
119124

120125
// JSON
121126
if ($_POST['type'] == 'json') {
127+
122128
// Single key
123129
if (isset($_GET['key'])) {
124130
echo json_encode(export_json($_GET['key']));
@@ -127,7 +133,18 @@ function export_json($key) {
127133
$vals = array();
128134

129135
foreach ($keys as $key) {
130-
$vals[$key] = export_json($key);
136+
137+
// if we have a filter and no match, nothing to do
138+
if($filter !== false && stripos($key, $filter) === false)
139+
continue;
140+
141+
// we rename the keys as necessary
142+
if($filter !== false && $transform !== false)
143+
$outputKey = str_replace($filter, $transform, $key);
144+
else
145+
$outputKey = $key;
146+
147+
$vals[$outputKey] = export_json($key);
131148
}
132149

133150
echo json_encode($vals);
@@ -136,14 +153,20 @@ function export_json($key) {
136153

137154
// Redis Commands
138155
else {
156+
139157
// Single key
140158
if (isset($_GET['key'])) {
141159
export_redis($_GET['key']);
142160
} else { // All keys
143161
$keys = $redis->keys('*');
144162

145163
foreach ($keys as $key) {
146-
export_redis($key);
164+
165+
// if we have a filter and no match, we skip
166+
if($filter !== false && stripos($key, $filter) === false)
167+
continue;
168+
169+
export_redis($key, $filter, $transform);
147170
}
148171
}
149172
}
@@ -171,7 +194,19 @@ function export_json($key) {
171194
<option value="redis" <?php echo (isset($_GET['type']) && ($_GET['type'] == 'redis')) ? 'selected="selected"' : ''?>>Redis</option>
172195
<option value="json" <?php echo (isset($_GET['type']) && ($_GET['type'] == 'json' )) ? 'selected="selected"' : ''?>>JSON</option>
173196
</select>
174-
</p>
197+
</p>
198+
199+
<?php if (!isset($_GET['key'])): ?>
200+
<p>
201+
<label for="filter">Filter:</label>
202+
<input type="text" name="filter" />
203+
</p>
204+
205+
<p>
206+
<label for="transform">Tranform:</label>
207+
<input type="text" name="transform" />
208+
</p>
209+
<?php endif; ?>
175210

176211
<p>
177212
<input type="submit" class="button" value="Export">

0 commit comments

Comments
 (0)