59 if(count($args) !== 1){
60 $sender->sendMessage(
new TranslationContainer(
"commands.generic.usage", [$this->usageMessage]));
65 $mode = strtolower($args[0]);
68 $sender->getServer()->getPluginManager()->setUseTimings(
true);
70 $sender->sendMessage(
new TranslationContainer(
"pocketmine.command.timings.enable"));
73 }elseif($mode ===
"off"){
74 $sender->getServer()->getPluginManager()->setUseTimings(
false);
75 $sender->sendMessage(
new TranslationContainer(
"pocketmine.command.timings.disable"));
79 if(!$sender->getServer()->getPluginManager()->useTimings()){
80 $sender->sendMessage(
new TranslationContainer(
"pocketmine.command.timings.timingsDisabled"));
85 $paste = $mode ===
"paste";
87 if($mode ===
"reset"){
89 $sender->sendMessage(
new TranslationContainer(
"pocketmine.command.timings.reset"));
90 }elseif($mode ===
"merged" or $mode ===
"report" or $paste){
92 $sampleTime = microtime(
true) - self::$timingStart;
94 $timingFolder = $sender->getServer()->getDataPath() .
"timings/";
96 if(!file_exists($timingFolder)){
97 mkdir($timingFolder, 0777);
99 $timings = $timingFolder .
"timings.txt";
101 $timings = $timingFolder .
"timings" . (++$index) .
".txt";
104 $fileTimings = $paste ? fopen(
"php://temp",
"r+b") : fopen(
$timings,
"a+b");
108 fwrite($fileTimings,
"Sample time " . round($sampleTime * 1000000000) .
" (" . $sampleTime .
"s)" . PHP_EOL);
111 fseek($fileTimings, 0);
114 "poster" => $sender->getServer()->getName(),
115 "content" => stream_get_contents($fileTimings)
118 $ch = curl_init(
"http://paste.ubuntu.com/");
119 curl_setopt($ch, CURLOPT_POST, 1);
120 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,
false);
121 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
122 curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
123 curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
124 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
125 curl_setopt($ch, CURLOPT_AUTOREFERER,
false);
126 curl_setopt($ch, CURLOPT_FOLLOWLOCATION,
false);
127 curl_setopt($ch, CURLOPT_HEADER,
true);
128 curl_setopt($ch, CURLOPT_HTTPHEADER, [
"User-Agent: " . $this->
getName() .
" " . $sender->getServer()->getPocketMineVersion()]);
129 curl_setopt($ch, CURLOPT_RETURNTRANSFER,
true);
130 $data = curl_exec($ch);
132 if(preg_match(
'#^Location: http://paste\\.ubuntu\\.com/([0-9]{1,})/#m', $data, $matches) == 0){
133 $sender->sendMessage(
new TranslationContainer(
"pocketmine.command.timings.pasteError"));
139 $sender->sendMessage(
new TranslationContainer(
"pocketmine.command.timings.timingsUpload", [
"http://paste.ubuntu.com/" . $matches[1] .
"/"]));
140 $sender->sendMessage(
new TranslationContainer(
"pocketmine.command.timings.timingsRead", [
"http://" . $sender->getServer()->getProperty(
"timings.host",
"timings.pmmp.io") .
"/?url=" . $matches[1]]));
141 fclose($fileTimings);
143 fclose($fileTimings);
144 $sender->sendMessage(
new TranslationContainer(
"pocketmine.command.timings.timingsWrite", [
$timings]));