Guest User

Untitled

a guest
Dec 24th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. <?php
  2.  
  3. $host = "localhost";
  4. $user = "_";
  5. $password = "_";
  6. $database = "_";
  7.  
  8. $red = "\033[0;31m";
  9. $green = "\033[0;32m";
  10. $nc = "\033[0m";
  11.  
  12. $db = new mysqli($host, $user, $password, $database);
  13.  
  14. if ($db->connect_errno) {
  15. exit("ERROR can't connect to DB: (" . $db->connect_errno . ") " . $db->connect_error . "\n");
  16. }
  17.  
  18. $db_version = 0;
  19.  
  20. $db_version_key = "db-version";
  21. $check_version_sql = "select o_val from options where o_key='$db_version_key'";
  22.  
  23. $result = $db->query($check_version_sql);
  24.  
  25. if ($result->num_rows === 0) {
  26. echo "Initializing db-version option...\n\n";
  27. $insert_default_version_sql = "insert into options (o_key, o_val) values ('$db_version_key', '0')";
  28. if (!$db->query($insert_default_version_sql)) {
  29. exit("ERROR: can't initialize db-version option\n");
  30. }
  31. }
  32. elseif ($result->num_rows === 1) {
  33. $row = $result->fetch_assoc();
  34. $db_version = intval($row['o_val']);
  35. echo "DB version: $db_version\n";
  36. }
  37. else {
  38. exit("ERROR: db-version option is duplicated");
  39. }
  40.  
  41. $result->free();
  42.  
  43. $scripts = explode("\n", `ls updates`);
  44. $count = 0;
  45. $new_version = $db_version;
  46.  
  47. function filter_output($msg) {
  48. $w = "mysql: [Warning] Using a password";
  49. $length = strlen($w);
  50. return (substr($msg, 0, $length) !== $w);
  51. }
  52.  
  53. foreach ($scripts as $script) {
  54. $parts = explode(".", $script);
  55. if (count($parts) > 2 && end($parts) == "sql") {
  56. $script_version = intval($parts[0]);
  57. if ($script_version > 0 && $script_version > $db_version){
  58. echo "{$green}executing script $script ...$nc \n";
  59.  
  60. $cmd = "mysql --user=$user --password=$password $database < updates/$script 2>&1";
  61. $output = array();
  62. $error_code = 0;
  63. exec($cmd, $output, $error_code);
  64. echo join("\n", array_filter($output, "filter_output")) . "\n\n";
  65. if ($error_code != 0) {
  66. exit("{$red}Something went wrong during script $script execution...\nFix the script and run DB update again.\n");
  67. }
  68.  
  69. $update_version_sql = "update options set o_val = $script_version where o_key='$db_version_key'";
  70. if(!$db->query($update_version_sql)) {
  71. exit("ERROR: can't set new version in options\n");
  72. };
  73. $count++;
  74. $new_version = $script_version;
  75. }
  76. }
  77. }
  78.  
  79. echo $count === 0 ?
  80. "{$green}Well... nothing to do here...{$nc}\n" :
  81. "{$green}$count updates applied\nDB $database was upgraded to version: $new_version{$nc}\n";
  82.  
  83. $db->close();
  84.  
  85. ?>
Add Comment
Please, Sign In to add comment