export.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. require_once 'includes/common.inc.php';
  3. // Export to redis-cli commands
  4. function export_redis($key)
  5. {
  6. global $redis;
  7. $type = $redis->type($key);
  8. // String
  9. if ($type == 'string') {
  10. echo 'SET "', addslashes($key), '" "', addslashes($redis->get($key)), '"', PHP_EOL;
  11. }
  12. // Hash
  13. else if ($type == 'hash') {
  14. $values = $redis->hGetAll($key);
  15. foreach ($values as $k => $v) {
  16. echo 'HSET "', addslashes($key), '" "', addslashes($k), '" "', addslashes($v), '"', PHP_EOL;
  17. }
  18. }
  19. // List
  20. else if ($type == 'list') {
  21. $size = $redis->lLen($key);
  22. for ($i = 0; $i < $size; ++$i) {
  23. echo 'RPUSH "', addslashes($key), '" "', addslashes($redis->lIndex($key, $i)), '"', PHP_EOL;
  24. }
  25. }
  26. // Set
  27. else if ($type == 'set') {
  28. $values = $redis->sMembers($key);
  29. foreach ($values as $v) {
  30. echo 'SADD "', addslashes($key), '" "', addslashes($v), '"', PHP_EOL;
  31. }
  32. }
  33. // ZSet
  34. else if ($type == 'zset') {
  35. $values = $redis->zRange($key, 0, -1);
  36. foreach ($values as $v) {
  37. $s = $redis->zScore($key, $v);
  38. echo 'ZADD "', addslashes($key), '" ', $s, ' "', addslashes($v), '"', PHP_EOL;
  39. }
  40. }
  41. }
  42. // Return the JSON for this key
  43. function export_json($key)
  44. {
  45. global $redis;
  46. $type = $redis->type($key);
  47. // String
  48. if ($type == 'string') {
  49. $value = $redis->get($key);
  50. }
  51. // Hash
  52. else if ($type == 'hash') {
  53. $value = $redis->hGetAll($key);
  54. }
  55. // List
  56. else if ($type == 'list') {
  57. $size = $redis->lLen($key);
  58. $value = array();
  59. for ($i = 0; $i < $size; ++$i) {
  60. $value[] = $redis->lIndex($key, $i);
  61. }
  62. }
  63. // Set
  64. else if ($type == 'set') {
  65. $value = $redis->sMembers($key);
  66. }
  67. // ZSet
  68. else if ($type == 'zset') {
  69. $value = $redis->zRange($key, 0, -1);
  70. }
  71. return $value;
  72. }
  73. // Export
  74. if (isset($_POST['type'])) {
  75. if ($_POST['type'] == 'json') {
  76. $ext = 'js';
  77. $ct = 'application/json';
  78. } else {
  79. $ext = 'redis';
  80. $ct = 'text/plain';
  81. }
  82. header('Content-type: ' . $ct . '; charset=utf-8');
  83. if (isset($_POST['tofile']) && strtolower($_POST['tofile']) == 'on') {
  84. header('Content-Disposition: attachment; filename="export.' . $ext . '"');
  85. } else {
  86. header('Content-Disposition: inline; filename="export.' . $ext . '"');
  87. }
  88. // JSON
  89. if ($_POST['type'] == 'json') {
  90. // Single key
  91. if (isset($_GET['key'])) {
  92. echo json_encode(export_json($_GET['key']));
  93. } else { // All keys
  94. $keys = $redis->keys('*');
  95. $vals = array();
  96. foreach ($keys as $key) {
  97. $vals[$key] = export_json($key);
  98. }
  99. echo json_encode($vals);
  100. }
  101. }
  102. // Redis Commands
  103. else {
  104. // Single key
  105. if (isset($_GET['key'])) {
  106. export_redis($_GET['key']);
  107. } else { // All keys
  108. $keys = $redis->keys('*');
  109. foreach ($keys as $key) {
  110. export_redis($key);
  111. }
  112. }
  113. }
  114. die;
  115. }
  116. $page['css'][] = 'frame';
  117. $page['js'][] = 'frame';
  118. require 'includes/header.inc.php';
  119. ?>
  120. <h2>Export <?php echo isset($_GET['key']) ? format_html($_GET['key']) : '' ?></h2>
  121. <form action="<?php echo format_html($_SERVER['REQUEST_URI']) ?>" method="post">
  122. <p>
  123. <label for="type">Type:</label>
  124. <select name="type" id="type">
  125. <option value="redis" <?php echo (isset($_GET['type']) && ($_GET['type'] == 'redis')) ? 'selected="selected"' : '' ?>>Redis</option>
  126. <option value="json" <?php echo (isset($_GET['type']) && ($_GET['type'] == 'json' )) ? 'selected="selected"' : '' ?>>JSON</option>
  127. </select>
  128. </p>
  129. <p>
  130. <input type="submit" class="button" value="Export"> <input type="checkbox" name="tofile" value="ON" /> to file
  131. </p>
  132. </form>
  133. <?php
  134. require 'includes/footer.inc.php';
  135. ?>