Пример #1
0
 public function crashDump()
 {
     if ($this->isRunning === false) {
         return;
     }
     if ($this->sendUsageTicker > 0) {
         $this->sendUsage(SendUsageTask::TYPE_CLOSE);
     }
     $this->hasStopped = false;
     ini_set("error_reporting", 0);
     ini_set("memory_limit", -1);
     //Fix error dump not dumped on memory problems
     $this->logger->emergency($this->getLanguage()->translateString("pocketmine.crash.create"));
     try {
         $dump = new CrashDump($this);
     } catch (\Exception $e) {
         $this->logger->critical($this->getLanguage()->translateString("pocketmine.crash.error", $e->getMessage()));
         return;
     }
     $this->logger->emergency($this->getLanguage()->translateString("pocketmine.crash.submit", [$dump->getPath()]));
     if ($this->getProperty("auto-report.enabled", true) !== false) {
         $report = true;
         $plugin = $dump->getData()["plugin"];
         if (is_string($plugin)) {
             $p = $this->pluginManager->getPlugin($plugin);
             if ($p instanceof Plugin and !$p->getPluginLoader() instanceof PharPluginLoader) {
                 $report = false;
             }
         } elseif (\Phar::running(true) == "") {
             $report = false;
         }
         if ($dump->getData()["error"]["type"] === "E_PARSE" or $dump->getData()["error"]["type"] === "E_COMPILE_ERROR") {
             $report = false;
         }
         if ($report) {
             $reply = Utils::postURL("http://" . $this->getProperty("auto-report.host", "crash.pocketmine.net") . "/submit/api", ["report" => "yes", "name" => $this->getName() . " " . $this->getPocketMineVersion(), "email" => "*****@*****.**", "reportPaste" => base64_encode($dump->getEncodedData())]);
             if (($data = json_decode($reply)) !== false and isset($data->crashId)) {
                 $reportId = $data->crashId;
                 $reportUrl = $data->crashUrl;
                 $this->logger->emergency($this->getLanguage()->translateString("pocketmine.crash.archive", [$reportUrl, $reportId]));
             }
         }
     }
     //$this->checkMemory();
     //$dump .= "Memory Usage Tracking: \r\n" . chunk_split(base64_encode(gzdeflate(implode(";", $this->memoryStats), 9))) . "\r\n";
     $this->forceShutdown();
     $this->isRunning = false;
     @kill(getmypid());
     exit(1);
 }
Пример #2
0
 public function crashDump()
 {
     if ($this->isRunning === false) {
         return;
     }
     $this->isRunning = false;
     $this->hasStopped = false;
     ini_set("error_reporting", 0);
     ini_set("memory_limit", -1);
     //Fix error dump not dumped on memory problems
     $this->logger->emergency("An unrecoverable error has occurred and the server has crashed. Creating a crash dump");
     try {
         $dump = new CrashDump($this);
     } catch (\Exception $e) {
         $this->logger->critical("Could not create Crash Dump: " . $e->getMessage());
         return;
     }
     $this->logger->emergency("Please submit the \"" . $dump->getPath() . "\" file to the Bug Reporting page. Give as much info as you can.");
     if ($this->getProperty("auto-report.enabled", true) !== false) {
         $report = true;
         $plugin = $dump->getData()["plugin"];
         if (is_string($plugin)) {
             $p = $this->pluginManager->getPlugin($plugin);
             if ($p instanceof Plugin and !$p->getPluginLoader() instanceof PharPluginLoader) {
                 $report = false;
             }
         } elseif (\Phar::running(true) == "") {
             $report = false;
         }
         if ($dump->getData()["error"]["type"] === "E_PARSE" or $dump->getData()["error"]["type"] === "E_COMPILE_ERROR") {
             $report = false;
         }
         if ($report) {
             $reply = Utils::postURL("http://" . $this->getProperty("auto-report.host", "crash.pocketmine.net") . "/submit/api", ["report" => "yes", "name" => $this->getName() . " " . $this->getPocketMineVersion(), "email" => "*****@*****.**", "reportPaste" => base64_encode($dump->getEncodedData())]);
             if (($data = json_decode($reply)) !== false and isset($data->crashId)) {
                 $reportId = $data->crashId;
                 $reportUrl = $data->crashUrl;
                 $this->logger->emergency("The crash dump has been automatically submitted to the Crash Archive. You can view it on {$reportUrl} or use the ID #{$reportId}.");
             }
         }
     }
     //$this->checkMemory();
     //$dump .= "Memory Usage Tracking: \r\n" . chunk_split(base64_encode(gzdeflate(implode(";", $this->memoryStats), 9))) . "\r\n";
     $this->forceShutdown();
     @kill(getmypid());
     exit(1);
 }