コード例 #1
0
 public function dumpError()
 {
     if ($this->stop === true) {
         return;
     }
     console("[SEVERE] An unrecovereable has ocurred and the server has crashed. Creating an error dump");
     $dump = "```\r\n# PocketMine-MP Error Dump " . date("D M j H:i:s T Y") . "\r\n";
     $er = error_get_last();
     $errorConversion = array(E_ERROR => "E_ERROR", E_WARNING => "E_WARNING", E_PARSE => "E_PARSE", E_NOTICE => "E_NOTICE", E_CORE_ERROR => "E_CORE_ERROR", E_CORE_WARNING => "E_CORE_WARNING", E_COMPILE_ERROR => "E_COMPILE_ERROR", E_COMPILE_WARNING => "E_COMPILE_WARNING", E_USER_ERROR => "E_USER_ERROR", E_USER_WARNING => "E_USER_WARNING", E_USER_NOTICE => "E_USER_NOTICE", E_STRICT => "E_STRICT", E_RECOVERABLE_ERROR => "E_RECOVERABLE_ERROR", E_DEPRECATED => "E_DEPRECATED", E_USER_DEPRECATED => "E_USER_DEPRECATED");
     $er["type"] = isset($errorConversion[$er["type"]]) ? $errorConversion[$er["type"]] : $er["type"];
     $dump .= "Error: " . var_export($er, true) . "\r\n\r\n";
     if (stripos($er["file"], "plugin") !== false) {
         $dump .= "THIS ERROR WAS CAUSED BY A PLUGIN. REPORT IT TO THE PLUGIN DEVELOPER.\r\n";
     }
     $dump .= "Code: \r\n";
     $file = @file($er["file"], FILE_IGNORE_NEW_LINES);
     for ($l = max(0, $er["line"] - 10); $l < $er["line"] + 10; ++$l) {
         $dump .= "[" . ($l + 1) . "] " . @$file[$l] . "\r\n";
     }
     $dump .= "\r\n\r\n";
     $version = new VersionString();
     $dump .= "PocketMine-MP version: " . $version . " #" . $version->getNumber() . " [Protocol " . ProtocolInfo::CURRENT_PROTOCOL . "; API " . CURRENT_API_VERSION . "]\r\n";
     $dump .= "Git commit: " . GIT_COMMIT . "\r\n";
     $dump .= "Source SHA1 sum: " . SOURCE_SHA1SUM . "\r\n";
     $dump .= "uname -a: " . php_uname("a") . "\r\n";
     $dump .= "PHP Version: " . phpversion() . "\r\n";
     $dump .= "Zend version: " . zend_version() . "\r\n";
     $dump .= "OS : " . PHP_OS . ", " . Utils::getOS() . "\r\n";
     $dump .= "Debug Info: " . var_export($this->debugInfo(false), true) . "\r\n\r\n\r\n";
     global $arguments;
     $dump .= "Parameters: " . var_export($arguments, true) . "\r\n\r\n\r\n";
     $p = $this->api->getProperties();
     if ($p["rcon.password"] != "") {
         $p["rcon.password"] = "******";
     }
     $dump .= "server.properties: " . var_export($p, true) . "\r\n\r\n\r\n";
     if ($this->api->plugin instanceof PluginAPI) {
         $plist = $this->api->plugin->getList();
         $dump .= "Loaded plugins:\r\n";
         foreach ($plist as $p) {
             $dump .= $p["name"] . " " . $p["version"] . " by " . $p["author"] . "\r\n";
         }
         $dump .= "\r\n\r\n";
     }
     $extensions = array();
     foreach (get_loaded_extensions() as $ext) {
         $extensions[$ext] = phpversion($ext);
     }
     $dump .= "Loaded Modules: " . var_export($extensions, true) . "\r\n";
     $dump .= "Memory Usage Tracking: \r\n" . chunk_split(base64_encode(gzdeflate(implode(";", $this->memoryStats), 9))) . "\r\n";
     ob_start();
     phpinfo();
     $dump .= "\r\nphpinfo(): \r\n" . chunk_split(base64_encode(gzdeflate(ob_get_contents(), 9))) . "\r\n";
     ob_end_clean();
     $dump .= "\r\n```";
     $name = "Error_Dump_" . date("D_M_j-H.i.s-T_Y");
     logg($dump, $name, true, 0, true);
     console("[SEVERE] Please submit the \"{$name}.log\" file to the Bug Reporting page. Give as much info as you can.", true, true, 0);
 }