public static function table_var_dump(&$variable, $wrap_in_td = false, $show_types = false, $level = 0) { $returnstring = ''; if (is_array($variable)) { $returnstring .= $wrap_in_td ? '' : ''; $returnstring .= '<ul class="dump_array dump_level_' . sprintf('%02u', $level) . '">'; foreach ($variable as $key => &$value) { // Assign an extra class representing the (rounded) width in number of characters 'or more': // You can use this as a width approximation in pixels to style (very) wide items. It saves // a long run through all the nodes in JS, just to measure the actual width and correct any // overlap occurring in there. $keylen = strlen($key); $threshold = 10; $overlarge_key_class = ''; while ($keylen >= $threshold) { $overlarge_key_class .= ' overlarger' . sprintf('%04d', $threshold); $threshold *= 1.6; } $returnstring .= '<li><span class="key' . $overlarge_key_class . '">' . $key . '</span>'; $tstring = ''; if ($show_types) { $tstring = '<span class="type">' . gettype($value); if (is_array($value)) { $tstring .= ' (' . count($value) . ')'; } elseif (is_string($value)) { $tstring .= ' (' . strlen($value) . ')'; } $tstring = '</span>'; } switch ((string) $key) { case 'filesize': $returnstring .= '<span class="dump_seconds">' . $tstring . self::fmt_bytecount($value) . ($value >= 1024 ? ' (' . $value . ' bytes)' : '') . '</span></li>'; continue 2; case 'playtime seconds': $returnstring .= '<span class="dump_seconds">' . $tstring . number_format($value, 1) . ' s</span></li>'; continue 2; case 'compression ratio': $returnstring .= '<span class="dump_compression_ratio">' . $tstring . number_format($value * 100, 1) . '%</span></li>'; continue 2; case 'bitrate': case 'bit rate': case 'avg bit rate': case 'max bit rate': case 'max bitrate': case 'sample rate': case 'sample rate2': case 'samples per sec': case 'avg bytes per sec': $returnstring .= '<span class="dump_rate">' . $tstring . self::fmt_bytecount($value) . '/s</span></li>'; continue 2; case 'bytes per minute': $returnstring .= '<span class="dump_rate">' . $tstring . self::fmt_bytecount($value) . '/min</span></li>'; continue 2; } $returnstring .= FileManagerUtility::table_var_dump($value, true, $show_types, $level + 1) . '</li>'; } $returnstring .= '</ul>'; $returnstring .= $wrap_in_td ? '' : ''; } else { if (is_bool($variable)) { $returnstring .= ($wrap_in_td ? '<span class="dump_boolean">' : '') . ($variable ? 'TRUE' : 'FALSE') . ($wrap_in_td ? '</span>' : ''); } else { if (is_int($variable)) { $returnstring .= ($wrap_in_td ? '<span class="dump_integer">' : '') . $variable . ($wrap_in_td ? '</span>' : ''); } else { if (is_float($variable)) { $returnstring .= ($wrap_in_td ? '<span class="dump_double">' : '') . $variable . ($wrap_in_td ? '</span>' : ''); } else { if (is_object($variable) && isset($variable->id3_procsupport_obj)) { if (isset($variable->metadata) && isset($variable->imagedata)) { // an embedded image (MP3 et al) $returnstring .= $wrap_in_td ? '<div class="dump_embedded_image">' : ''; $returnstring .= '<table class="dump_image">'; $returnstring .= '<tr><td><b>type</b></td><td>' . getid3_lib::ImageTypesLookup($variable->metadata[2]) . '</td></tr>'; $returnstring .= '<tr><td><b>width</b></td><td>' . number_format($variable->metadata[0]) . ' px</td></tr>'; $returnstring .= '<tr><td><b>height</b></td><td>' . number_format($variable->metadata[1]) . ' px</td></tr>'; $returnstring .= '<tr><td><b>size</b></td><td>' . number_format(strlen($variable->imagedata)) . ' bytes</td></tr></table>'; $returnstring .= '<img src="data:' . $variable->metadata['mime'] . ';base64,' . base64_encode($variable->imagedata) . '" width="' . $variable->metadata[0] . '" height="' . $variable->metadata[1] . '">'; $returnstring .= $wrap_in_td ? '</div>' : ''; } else { if (isset($variable->binarydata_mode)) { $returnstring .= $wrap_in_td ? '<span class="dump_binary_data">' : ''; if ($variable->binarydata_mode == 'procd') { $returnstring .= '<i>' . self::table_var_dump($variable->binarydata, false, false, $level + 1) . '</i>'; } else { $temp = unpack('H*', $variable->binarydata); $temp = str_split($temp[1], 8); $returnstring .= '<i>' . self::table_var_dump(implode(' ', $temp), false, false, $level + 1) . '</i>'; } $returnstring .= $wrap_in_td ? '</span>' : ''; } else { $returnstring .= ($wrap_in_td ? '<span class="dump_object">' : '') . print_r($variable, true) . ($wrap_in_td ? '</span>' : ''); } } } else { if (is_object($variable)) { $returnstring .= ($wrap_in_td ? '<span class="dump_object">' : '') . print_r($variable, true) . ($wrap_in_td ? '</span>' : ''); } else { if (is_null($variable)) { $returnstring .= ($wrap_in_td ? '<span class="dump_null">' : '') . '(null)' . ($wrap_in_td ? '</span>' : ''); } else { if (is_string($variable)) { $variable = strtr($variable, "", ' '); $varlen = strlen($variable); for ($i = 0; $i < $varlen; $i++) { $returnstring .= htmlentities($variable[$i], ENT_QUOTES, 'UTF-8'); } $returnstring = ($wrap_in_td ? '<span class="dump_string">' : '') . nl2br($returnstring) . ($wrap_in_td ? '</span>' : ''); } else { $returnstring .= ($wrap_in_td ? '<span class="dump_other">' : '') . nl2br(htmlspecialchars(strtr($variable, "", ' '))) . ($wrap_in_td ? '</span>' : ''); } } } } } } } } return $returnstring; }