Fix var_export() not working for stdClass in PHP < 7.3

This commit is contained in:
Kijin Sung 2018-12-13 15:22:11 +09:00
parent a2c9274681
commit 3f7f802585
8 changed files with 40 additions and 43 deletions

View file

@ -136,7 +136,7 @@ class Config
}
// Save the main config file.
$buff = '<?php' . "\n" . '// Rhymix System Configuration' . "\n" . 'return ' . self::serialize(self::$_config) . ';' . "\n";
$buff = '<?php' . "\n" . '// Rhymix System Configuration' . "\n" . 'return ' . var_export_clean(self::$_config) . ';' . "\n";
$result = Storage::write(\RX_BASEDIR . self::$config_filename, $buff) ? true : false;
// Save XE-compatible config files.
@ -145,40 +145,10 @@ class Config
$db_info_without_ftp = clone $db_info;
unset($db_info_without_ftp->ftp_info);
$warning = '// DO NOT EDIT THIS FILE. CHANGES WILL NOT BE APPLIED.' . "\n" . '// TO CHANGE RHYMIX SYSTEM CONFIGURATION, EDIT config.php INSTEAD.';
$buff = '<?php' . "\n\n" . $warning . "\n\n" . '$db_info = ' . self::serialize($db_info_without_ftp) . ';' . "\n";
$buff = '<?php' . "\n\n" . $warning . "\n\n" . '$db_info = ' . var_export_clean($db_info_without_ftp) . ';' . "\n";
Storage::write(\RX_BASEDIR . self::$old_db_config_filename, $buff);
$buff = '<?php' . "\n\n" . $warning . "\n\n" . '$ftp_info = ' . self::serialize($ftp_info) . ';' . "\n";
$buff = '<?php' . "\n\n" . $warning . "\n\n" . '$ftp_info = ' . var_export_clean($ftp_info) . ';' . "\n";
Storage::write(\RX_BASEDIR . self::$old_ftp_config_filename, $buff);
return $result;
}
/**
* Serialize a value for insertion into a PHP-based configuration file.
*
* @param mixed $value
* @return string
*/
public static function serialize($value)
{
if (is_object($value))
{
return '(object)' . self::serialize((array)$value);
}
elseif (is_array($value))
{
$value = var_export($value, true);
$value = preg_replace('/array \(\n/', "array(\n", $value);
$value = preg_replace('/=>\s+array\(\n/', "=> array(\n", $value);
$value = preg_replace('/array\(\s*\n\s*\)/', 'array()', $value);
$value = preg_replace_callback('/\n(\x20+)/', function($m) {
return "\n" . str_repeat("\t", intval(strlen($m[1]) / 2));
}, $value);
$value = preg_replace('/\n(\t+)[0-9]+ => /', "\n\$1", $value);
return $value;
}
else
{
return var_export($value, true);
}
}
}

View file

@ -274,7 +274,7 @@ class Debug
if (config('debug.write_error_log') === 'all' && self::isEnabledForCurrentUser())
{
$log_entry = str_replace("\0", '', sprintf('Rhymix Debug: %s in %s on line %d',
var_export($message, true), $entry->file, $entry->line));
var_export_clean($message), $entry->file, $entry->line));
error_log($log_entry);
}
}

View file

@ -82,18 +82,18 @@ class LangParser
{
foreach ($subvalue as $subsubkey => $subsubvalue)
{
$buff .= '$lang->' . $key . "['$subkey']['$subsubkey']" . ' = ' . var_export($subsubvalue, true) . ";\n";
$buff .= '$lang->' . $key . "['$subkey']['$subsubkey']" . ' = ' . var_export_clean($subsubvalue) . ";\n";
}
}
else
{
$buff .= '$lang->' . $key . "['$subkey']" . ' = ' . var_export($subvalue, true) . ";\n";
$buff .= '$lang->' . $key . "['$subkey']" . ' = ' . var_export_clean($subvalue) . ";\n";
}
}
}
else
{
$buff .= '$lang->' . $key . ' = ' . var_export($value, true) . ";\n";
$buff .= '$lang->' . $key . ' = ' . var_export_clean($value) . ";\n";
}
}
Storage::write($output_filename, $buff);

View file

@ -337,7 +337,7 @@ class Storage
{
$comment = "/* $comment */\n";
}
return self::write($filename, '<' . '?php ' . $comment . 'return unserialize(' . var_export(serialize($data), true) . ');');
return self::write($filename, '<' . '?php ' . $comment . 'return ' . var_export_clean($data) . ';');
}
/**