Skip to content

Instantly share code, notes, and snippets.

@rogersguedes
Created October 10, 2017 23:53
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rogersguedes/2795072232164d0fe7b994086c0824f6 to your computer and use it in GitHub Desktop.
Save rogersguedes/2795072232164d0fe7b994086c0824f6 to your computer and use it in GitHub Desktop.
PHP reverse var_dump function
<?php
/*
* thanks to
* - https://stackoverflow.com/questions/3531857/convert-var-dump-of-array-back-to-array-variable
* - https://stackoverflow.com/questions/2853454/php-unserialize-fails-with-non-encoded-characters
*/
function unvar_dump($str) {
if (strpos($str, "\n") === false) {
//Add new lines:
$regex = array(
'#(\\[.*?\\]=>)#',
'#(string\\(|int\\(|float\\(|array\\(|NULL|object\\(|})#',
);
$str = preg_replace($regex, "\n\\1", $str);
$str = trim($str);
}
$regex = array(
'#^\\040*NULL\\040*$#m',
'#^\\s*array\\((.*?)\\)\\s*{\\s*$#m',
'#^\\s*string\\((.*?)\\)\\s*(.*?)$#m',
'#^\\s*int\\((.*?)\\)\\s*$#m',
'#^\\s*bool\\(true\\)\\s*$#m',
'#^\\s*bool\\(false\\)\\s*$#m',
'#^\\s*float\\((.*?)\\)\\s*$#m',
'#^\\s*\[(\\d+)\\]\\s*=>\\s*$#m',
'#\\s*?\\r?\\n\\s*#m',
);
$replace = array(
'N',
'a:\\1:{',
's:\\1:\\2',
'i:\\1',
'b:1',
'b:0',
'd:\\1',
'i:\\1',
';'
);
$serialized = preg_replace($regex, $replace, $str);
$func = create_function(
'$match',
'return "s:".strlen($match[1]).":\\"".$match[1]."\\"";'
);
$serialized = preg_replace_callback(
'#\\s*\\["(.*?)"\\]\\s*=>#',
$func,
$serialized
);
$func = create_function(
'$match',
'return "O:".strlen($match[1]).":\\"".$match[1]."\\":".$match[2].":{";'
);
$serialized = preg_replace_callback(
'#object\\((.*?)\\).*?\\((\\d+)\\)\\s*{\\s*;#',
$func,
$serialized
);
$serialized = preg_replace(
array('#};#', '#{;#'),
array('}', '{'),
$serialized
);
$serialized = preg_replace_callback('!s:(\d+):"(.*?)";!s', function ($matches) {
return 's:'.strlen($matches[2]).':"'.$matches[2].'";';
}, $serialized);
return unserialize($serialized);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment