Changeset 1375 for trunk/libs/Debug.php
- Timestamp:
- 03/21/10 12:48:36 (3 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
libs/Debug.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/1.2 merged: 1314-1324,1327-1373
- Property svn:mergeinfo changed
-
trunk/libs/Debug.php
r1280 r1375 61 61 public function openLog($type = 'debug', $mode = 'a+') 62 62 { 63 $this->log[$type] = CACHE . "debug_logs/" . $type . ".txt"; 64 65 // auto-delete the file after 1 week: 66 /* 67 $last_modified = filemtime($this->log[$type]); 68 $expire = (7 * 24 * 60 * 60); // 1 week 69 if ($last_modified < (time() - $expire)) { unlink ($this->log[$type]); } 70 */ 71 72 // open/create a file: 73 $this->fh[$type] = fopen($this->log[$type], $mode) or die("can't open file"); 63 $this->log[$type] = CACHE . "debug_logs/" . $type . ".php"; 64 65 // delete file if over 500KB 66 if (file_exists($this->log[$type]) && (filesize($this->log[$type]) > 500000)) { 67 unlink($this->log[$type]); 68 } 69 70 // If doesn't exist or rewriting, create a new file with die() at the top 71 if (!file_exists($this->log[$type]) || ($mode != 'a' && $mode != 'a+')) { 72 $this->fh[$type] = fopen($this->log[$type], $mode) or die("Sorry, I can't open cache/debug_logs/" . $type . ".php"); 73 fwrite($this->fh[$type], "<?php die(); ?>\r\n"); 74 } else { 75 // open existing file: 76 $this->fh[$type] = fopen($this->log[$type], $mode) or die("can't open file"); 77 } 74 78 } 75 79 … … 83 87 { 84 88 if ($string) { 85 $string = date('d M Y H:i:s', time()) . " :" . $string . "\n";89 $string = date('d M Y H:i:s', time()) . " " . $string . "\n"; 86 90 fwrite($this->fh[$type], $string); 87 91 } … … 97 101 { 98 102 if (isset($this->fh[$type])) { fclose($this->fh[$type]); } 103 } 104 105 106 /** 107 * Generate a System Report 108 * 109 * @param string $type 'log', 'email' or 'object' 110 */ 111 public function generateReport($h, $type = 'log') 112 { 113 $report = $this->getSystemData($h); 114 115 if ($type == 'object') { return $report; } 116 117 if ($type == 'email') { 118 $to = "admin@hotarucms.org"; // do not change! 119 $subject = "System Report from " . SITE_NAME; 120 $body = $this->logSystemReport($h, $report); 121 $h->email($to, $subject, $body); 122 $h->message = $h->lang['admin_maintenance_system_report_emailed']; 123 $h->messageType = 'green'; 124 return true; 125 } 126 127 $h->openLog('system_report', 'w'); 128 129 // convert object to text 130 $output = $this->logSystemReport($h, $report); 131 if ($output) { 132 $h->writeLog('system_report', $output); 133 $h->closeLog('system_report'); 134 135 $h->message = $h->lang['admin_maintenance_system_report_success']; 136 $h->messageType = 'green'; 137 return true; 138 } else { 139 $h->message = $h->lang['admin_maintenance_system_report_failure']; 140 $h->messageType = 'red'; 141 return false; 142 } 143 } 144 145 /** 146 * Get system data 147 * 148 * @param string $type 'log' or 'object' 149 * @return object 150 */ 151 public function getSystemData($h) 152 { 153 // essentials: 154 155 $report['hotaru_site_name'] = SITE_NAME; 156 $report['hotaru_baseurl'] = BASEURL; 157 158 $report['php_version'] = phpversion(); 159 $report['mysql_version'] = $h->db->get_var("SELECT VERSION() AS VE"); 160 $report['hotaru_version'] = $h->version; 161 $report['php_extensions'] = get_loaded_extensions(); 162 163 $sql = "SELECT miscdata_value FROM " . TABLE_MISCDATA . " WHERE miscdata_key = %s"; 164 $report['hotaru_version_db'] = $h->db->get_var($h->db->prepare($sql, 'hotaru_version')); 165 166 // default permissions 167 168 $sql = "SELECT miscdata_value FROM " . TABLE_MISCDATA . " WHERE miscdata_key = %s"; 169 $report['hotaru_permissions'] = $h->db->get_var($h->db->prepare($sql, 'permissions')); 170 171 // default user settings 172 173 $sql = "SELECT miscdata_value FROM " . TABLE_MISCDATA . " WHERE miscdata_key = %s"; 174 $report['hotaru_user_settings'] = $h->db->get_var($h->db->prepare($sql, 'user_settings')); 175 176 // plugins: folder, enabled, version, order 177 178 $sql = "SELECT plugin_folder, plugin_enabled, plugin_version, plugin_order FROM " . TABLE_PLUGINS . " ORDER BY plugin_order"; 179 $plugins = $h->db->get_results($h->db->prepare($sql)); 180 if ($plugins) { 181 foreach ($plugins as $plugin) { 182 $report['hotaru_plugins'][$plugin->plugin_folder]['enabled'] = $plugin->plugin_enabled; 183 $report['hotaru_plugins'][$plugin->plugin_folder]['version'] = $plugin->plugin_version; 184 $report['hotaru_plugins'][$plugin->plugin_folder]['order'] = $plugin->plugin_order; 185 } 186 } 187 188 // plugin hooks: id, folder, hook name 189 190 $sql = "SELECT phook_id, plugin_folder, plugin_hook FROM " . TABLE_PLUGINHOOKS; 191 $plugins = $h->db->get_results($h->db->prepare($sql)); 192 if ($plugins) { 193 foreach ($plugins as $plugin) { 194 $report['hotaru_plugin_hooks'][$plugin->phook_id]['folder'] = $plugin->plugin_folder; 195 $report['hotaru_plugin_hooks'][$plugin->phook_id]['hook'] = $plugin->plugin_hook; 196 } 197 } 198 199 // plugin settings: folder, setting (can't use value because might include passwords) 200 201 $sql = "SELECT plugin_folder, plugin_setting, plugin_value FROM " . TABLE_PLUGINSETTINGS; 202 $plugins = $h->db->get_results($h->db->prepare($sql)); 203 if ($plugins) { 204 foreach ($plugins as $plugin) { 205 if (is_serialized($plugin->plugin_value)) { $plugin->plugin_value = unserialize($plugin->plugin_value); } 206 $report['hotaru_plugin_settings'][$plugin->plugin_folder][$plugin->plugin_setting] = $this->applyMaskToArrays($h, $plugin->plugin_value); 207 } 208 } 209 210 // Settings: Name, value (excluding SMTP PASSWORD) 211 212 $sql = "SELECT settings_name, settings_value FROM " . TABLE_SETTINGS; 213 $settings = $h->db->get_results($h->db->prepare($sql)); 214 if ($settings) { 215 foreach ($settings as $setting) { 216 // mask sensitive data 217 switch ($setting->settings_name) { 218 case 'SITE_EMAIL': 219 case 'SMTP_HOST': 220 case 'SMTP_PORT': 221 case 'SMTP_USERNAME': 222 case 'SMTP_PASSWORD': 223 $setting->settings_value = preg_replace("/[a-zA-Z0-9]/", "*", $setting->settings_value); 224 break; 225 } 226 $report['hotaru_settings'][$setting->settings_name] = $setting->settings_value; 227 } 228 } 229 230 // Widgets: plugin, function, args 231 232 $sql = "SELECT widget_plugin, widget_function, widget_args FROM " . TABLE_WIDGETS; 233 $widgets = $h->db->get_results($h->db->prepare($sql)); 234 if ($widgets) { 235 foreach ($widgets as $widget) { 236 $report['hotaru_widgets'][$widget->widget_plugin]['function'] = $widget->widget_function; 237 $report['hotaru_widgets'][$widget->widget_plugin]['args'] = $widget->widget_args; 238 } 239 } 240 241 // Counts for all tables 242 243 foreach ( $h->db->get_col("SHOW TABLES",0) as $table_name ) 244 { 245 $report['hotaru_table_count'][$table_name] = $h->db->get_var("SELECT COUNT(*) FROM " . $table_name); 246 } 247 248 return $report; 249 } 250 251 252 /** 253 * Recurse through arrays, applying * mask to all values, but not keys 254 * 255 * @param array $array 256 * @return array 257 */ 258 public function applyMaskToArrays($h, $array) 259 { 260 //echo "<pre>"; print_r($array); echo "</pre>"; exit; 261 if (!is_array($array) && !is_object($array)) { return false; } 262 263 foreach ($array as $key => $value) { 264 if (is_array($value) || is_object($value)) { 265 $array[$key] = $this->applyMaskToArrays($h, $value); 266 } else { 267 $array[$key] = preg_replace("/[a-zA-Z0-9]/", "*", $value); 268 } 269 } 270 return $array; 271 } 272 273 274 /** 275 * Convert report object to text for logging to file 276 * 277 * @param object $report 278 */ 279 public function logSystemReport($h, $report = NULL) 280 { 281 $output = "\n\n"; 282 283 $output .= "Name: " . $report['hotaru_site_name'] . "\n"; 284 $output .= "URL: " . $report['hotaru_baseurl'] . "\n"; 285 $output .= "Hotaru version: " . $report['hotaru_version'] . "\n"; 286 $output .= "Hotaru version in database: " . $report['hotaru_version_db'] . "\n"; 287 $output .= "PHP version: " . $report['php_version'] . "\n"; 288 $output .= "MySQL version: " . $report['mysql_version'] . "\n"; 289 $output .= "PHP extensions: " . implode(', ', $report['php_extensions']) . "\n"; 290 291 $output .= "\n"; 292 293 $output .= "Default site permissions: \n"; 294 $perms = unserialize($report['hotaru_permissions']); 295 unset($perms['options']); // don't need to display these 296 foreach ($perms as $key => $value) { 297 $output .= $key . " => ("; 298 foreach ($value as $k => $v) { 299 $output .= $k . ": " . $v . ", "; 300 } 301 $output = rtrim($output, ", "); 302 $output .= ")\n"; 303 } 304 305 $output .= "\n"; 306 307 $output .= "Default user settings: \n"; 308 $user_settings = unserialize($report['hotaru_user_settings']); 309 foreach ($user_settings as $key => $value) { 310 $output .= $key . " => " . $value . "\n"; 311 } 312 313 $output .= "\n"; 314 315 $output .= "Plugins: \n"; 316 if (isset($report['hotaru_plugins'])) { 317 foreach ($report['hotaru_plugins'] as $key => $value) { 318 $output .= $value['order'] . ". " . $key . " v." . $value['version'] . " "; 319 if ($value['enabled']) { $output .= "[enabled] \n"; } else { $output .= "[disabled] \n"; } 320 } 321 } 322 323 $output .= "\n"; 324 325 $output .= "Plugin Hooks: \n"; 326 if (isset($report['hotaru_plugin_hooks'])) { 327 foreach ($report['hotaru_plugin_hooks'] as $key => $value) { 328 $output .= $key . ". " . $value['folder'] . " => " . $value['hook'] . " \n"; 329 } 330 } 331 332 $output .= "\n"; 333 334 $output .= "Plugin Settings: \n"; 335 if (isset($report['hotaru_plugin_settings'])) { 336 foreach ($report['hotaru_plugin_settings'] as $key => $value) { 337 foreach ($value as $k => $v) { 338 if (!is_array($v)) { 339 $output .= "\nPlugin settings for " . $key . ":\n...." . $k . " = " . $v . " \n"; 340 } else { 341 $output .= "\nPlugin settings for " . $key . ":\n"; 342 $output = $this->outputArrays($h, $v, $output); 343 } 344 } 345 } 346 } 347 348 $output .= "\n"; 349 350 $output .= "Hotaru Settings: \n"; 351 if (isset($report['hotaru_settings'])) { 352 foreach ($report['hotaru_settings'] as $key => $value) { 353 $output .= $key . " => " . $value . " \n"; 354 } 355 } 356 357 $output .= "\n"; 358 359 $output .= "Widgets: \n"; 360 if (isset($report['hotaru_widgets'])) { 361 foreach ($report['hotaru_widgets'] as $key => $value) { 362 $output .= $key . " => " . $value['function']; 363 if ($value['args']) { $output .= " (args: " . $value['args'] . ")"; } 364 $output .= "\n"; 365 } 366 } 367 368 $output .= "\n"; 369 370 $output .= "Number of rows in each table: \n"; 371 if (isset($report['hotaru_table_count'])) { 372 foreach ($report['hotaru_table_count'] as $key => $value) { 373 $output .= $key . " => " . $value . " \n"; 374 } 375 } 376 377 return $output; 378 } 379 380 381 /** 382 * Recurse through arrays, adding them to $output for display 383 * 384 * @param array $array 385 * @return array 386 */ 387 public function outputArrays($h, $array = array(), $output = '') 388 { 389 if (!is_array($array) && !is_object($array)) { return $output; } 390 391 foreach ($array as $key => $value) { 392 if (is_array($value) || is_object($array)) { 393 $output .= "..... " . $key . ":\n"; 394 $output = $this->outputArrays($h, $value, $output); 395 } else { 396 $output .= "..... " . $key . ": " . $value . " \n"; 397 } 398 } 399 return $output; 99 400 } 100 401 }
Note: See TracChangeset
for help on using the changeset viewer.