Guest User

Untitled

a guest
Apr 3rd, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. <?php
  2. // Script to fix serialized strings directly with DB access
  3.  
  4. $host = '';
  5. $db = '';
  6. $user = '';
  7. $pass = '';
  8.  
  9. $table = '';
  10. $column = '';
  11.  
  12. $collation = 'utf8';
  13.  
  14. // End tunables
  15.  
  16. function serialize_fix_callback($match) {
  17. if (function_exists('mb_strlen')) {
  18. return 's:' . mb_strlen($match[2]);
  19. } else {
  20. return 's:' . strlen($match[2]);
  21. }
  22. }
  23.  
  24. $con = mysqli_connect($host, $user, $pass);
  25. if (!$con){
  26. die('Could not connect: ' . mysqli_error($con));
  27. }
  28. mysqli_select_db($con, $db);
  29. mysqli_query($con, "SET NAMES $collation");
  30.  
  31. $query = "SELECT `$column` FROM `$table`";
  32. $result = mysqli_query($con, $query);
  33.  
  34. while ($row = mysqli_fetch_row($result)) {
  35. // Try single string
  36. $new = preg_replace_callback(
  37. '!^s:(\d+)(?=:"(.*?)";$)!s',
  38. 'serialize_fix_callback',
  39. $row[0]
  40. );
  41. if ($new === $row[0]) {
  42. // Try nested strings
  43. $new = preg_replace_callback(
  44. '!(?<=^|;)s:(\d+)(?=:"(.*?)";(?:}|a:|s:|b:|d:|i:|o:|N;))!s',
  45. 'serialize_fix_callback',
  46. $row[0]
  47. );
  48. }
  49.  
  50. if ($new !== $row[0]) {
  51. if (@unserialize($row[0])) {
  52. // Sanity check, don't clobber if already valid
  53. echo "[Skipping] {$row[0]}\n";
  54. } elseif (@unserialize($new)) {
  55. // New data is valid, save
  56. echo "[Fixing] {$row[0]}\n";
  57. $query = "UPDATE `$table` SET ".
  58. "`$column` = '".mysqli_real_escape_string($con, $new)."' WHERE ".
  59. "`$column` = '".mysqli_real_escape_string($con, $row[0]).
  60. "'";
  61.  
  62. if (!mysqli_query($con, $query)) {
  63. die(mysqli_error($con));
  64. }
  65. } else {
  66. // Neither old nor new data is valid
  67. echo "[Failed] {$row[0]}\n";
  68. }
  69. }
  70. }
  71.  
  72. // vim: sw=3 ts=3 ai et
Add Comment
Please, Sign In to add comment