{"id":1204,"date":"2019-11-08T13:02:26","date_gmt":"2019-11-08T05:02:26","guid":{"rendered":"https:\/\/wyxxt.org.cn\/?p=1204"},"modified":"2023-12-04T16:26:48","modified_gmt":"2023-12-04T08:26:48","slug":"%e8%b0%83%e8%af%95%e7%b1%bb%e5%b0%81%e8%a3%85","status":"publish","type":"post","link":"https:\/\/wyxxt.org.cn\/?p=1204","title":{"rendered":"\u8c03\u8bd5\u7c7b\u5c01\u88c5"},"content":{"rendered":"<pre><code class=\"language-php line-numbers\">&lt;?php\n\/**\n * \u8c03\u8bd5\u65e5\u5fd7\u64cd\u4f5c\u7c7b\n * DEBUG_LEVEL=0\u7684\u65f6\u5019\u4e0d\u4f1a\u5728\u540e\u7aef\u8fd0\u884c\uff0c\n * DEBUG_LEVEL=1\u7684\u65f6\u5019\u4f1a\u8bb0\u5f55\u9519\u8bef\u3001\u8b66\u544a\u4fe1\u606f\u4ee5\u53ca\u8d44\u6e90\u8c03\u7528\u7684\u8017\u65f6\u6c47\u603b\u7edf\u8ba1\uff0c\n * DEBUG_LEVEL=2\u7684\u65f6\u5019\uff0c\u4f1a\u8bb0\u5f55\u5168\u90e8\u7684\u6570\u636e\n * \u5982\u679c\u5728\u53c2\u6570\u5217\u8868\u4e2d\u51fa\u73b0 __DEBUG_LEVEL \uff0c\u5219\u4f1a\u5f3a\u5236\u8986\u76d6 DEBUG_LEVEL \u7684\u503c\n * \u529f\u80fd\u5217\u8868\u5982\u4e0b\uff1a\n * 1 time \u6027\u80fd\u63a2\u9488\uff0c\u8ba1\u7b97\u8fd0\u884c\u7684\u6b65\u9aa4\u4ee5\u53ca\u6bcf\u4e00\u6b65\u7684\u6267\u884c\u6548\u7387\n * 2 log \u65e5\u5fd7\u8bb0\u5f55\uff0c\u628a\u6bcf\u4e00\u4e2a\u65e5\u5fd7\u4fe1\u606f\u8bb0\u5f55\u4e0b\u6765\n * 3 http \u63a5\u53e3\u8c03\u7528\u7684\u8bb0\u5f55\u4ee5\u53ca\u8017\u65f6\u7684\u6c47\u603b\u7edf\u8ba1\n * 4 redis redis\u8c03\u7528\u7684\u8bb0\u5f55\u4ee5\u53ca\u8017\u65f6\u7684\u6c47\u603b\u7edf\u8ba1\n * 5 mysql mysql\u8c03\u7528\u7684\u8bb0\u5f55\u4ee5\u53ca\u8017\u65f6\u7684\u6c47\u603b\u7edf\u8ba1\n * 6 cache memcache\u8c03\u7528\u7684\u8bb0\u5f55\u4ee5\u53ca\u8017\u65f6\u7684\u6c47\u603b\u7edf\u8ba1\n * @author xzw\n *\/\n\nnamespace common;\n\ndefine('DEBUG_LOG_ERROR', 'ERROR');\ndefine('DEBUG_LOG_WARNING', 'WARNING');\ndefine('DEBUG_LOG_INFO', 'INFO');\n\n\nclass DebugLog {\n\n    private $logId;\n    private $timeList;\n    private $logList;\n    private $httpList;\n    private $redisList;\n    private $mysqlList;\n    private $cacheList;\n\n    private static $instance = false;\n    private function __construct() {}\n\n    \/**\n     * \u521d\u59cb\u5316\u8c03\u8bd5\u65e5\u5fd7\u64cd\u4f5c\u7c7b\uff0c\u6ca1\u6709\u7ecf\u8fc7\u521d\u59cb\u5316\u7684\u540e\u7eed\u8c03\u8bd5\u4ee3\u7801\u90fd\u4e0d\u4f1a\u751f\u6548\n     *\/\n    public static function _init() {\n        if (!self::$instance) {\n            self::$instance = new DebugLog();\n            self::$instance-&gt;logId = microtime();\n        }\n    }\n\n    \/**\n     * \u8bb0\u5f55\u65f6\u95f4\uff0c\u65b9\u4fbf\u8c03\u8bd5\u7a0b\u5e8f\u6267\u884c\u903b\u8f91\u548c\u6bcf\u4e00\u6b65\u7684\u6267\u884c\u6548\u7387\n     *\/\n    public static function _time($label, $handler = false) {\n        if (self::$instance === false) {\n            return;\n        }\n        self::$instance-&gt;timeList[] = array($label, microtime(), $handler);\n    }\n\n    \/**\n     * \u8bb0\u5f55\u8fd0\u884c\u65f6\u7684\u8c03\u8bd5\u4fe1\u606f\uff0c\u5206\u4e3a DEBUG_LOG_INFO \u548c DEBUG_LOG_ERROR\uff0cDEBUG_LOG_INFO \u53ea\u6709\u5728\u5168\u91cf\u8f93\u51fa\u8c03\u8bd5\u4fe1\u606f\u7684\u65f6\u5019\u624d\u4f1a\u8f93\u51fa\n     *\/\n    public static function _log($label, $info, $level=DEBUG_LOG_INFO, $handler = false) {\n        if (self::$instance === false || (DEBUG_LEVEL &lt; 2 &amp;&amp; $level == DEBUG_LOG_INFO)) {\n            return;\n        }\n        self::$instance-&gt;logList[] = array($label, $info, $level, $handler);\n    }\n\n    \/**\n     * \u8bb0\u5f55\u8fd0\u884c\u65f6\u7684http\u8bf7\u6c42\n     *\/\n    public static function _http($label, $params, $config, $mtime1, $mtime2, $data = null, $handler = false) {\n        if (self::$instance === false) {\n            return;\n        }\n        if (DEBUG_LEVEL === 1) {\n            self::$instance-&gt;httpList[] = array($label, json_encode($params), json_encode($config), $mtime1, $mtime2, null, $handler);\n        } else {\n            self::$instance-&gt;httpList[] = array($label, json_encode($params), json_encode($config), $mtime1, $mtime2, $data, $handler);\n        }\n    }\n\n    \/**\n     * \u8bb0\u5f55\u8fd0\u884c\u65f6\u7684redis\u8bf7\u6c42\n     *\/\n    public static function _redis($label, $params, $config, $mtime1, $mtime2, $data = null, $handler = false) {\n        if (self::$instance === false) {\n            return;\n        }\n        if (DEBUG_LEVEL === 1) {\n            if ('setex' == $label) {    \/\/ \u8fc7\u6ee4\u6389\u5185\u5bb9\u5757\uff0c\u907f\u514d\u65e5\u5fd7\u592a\u591a\n                $params[2] = null;\n            }\n            self::$instance-&gt;redisList[] = array($label, json_encode($params), json_encode($config), $mtime1, $mtime2, null, $handler);\n        } else {\n            self::$instance-&gt;redisList[] = array($label, json_encode($params), json_encode($config), $mtime1, $mtime2, $data, $handler);\n        }\n    }\n\n    \/**\n     * \u8bb0\u5f55\u8fd0\u884c\u65f6\u7684mysql\u8bf7\u6c42\n     *\/\n    public static function _mysql($label, $params, $config, $mtime1, $mtime2, $data = null, $handler = false) {\n        if (self::$instance === false) {\n            return;\n        }\n        if (DEBUG_LEVEL === 1) {\n            self::$instance-&gt;mysqlList[] = array($label, json_encode($params), json_encode($config), $mtime1, $mtime2, null, $handler);\n        } else {\n            self::$instance-&gt;mysqlList[] = array($label, json_encode($params), json_encode($config), $mtime1, $mtime2, $data, $handler);\n        }\n    }\n\n    \/**\n     * \u8bb0\u5f55\u8fd0\u884c\u65f6\u7684memcache\u8bf7\u6c42\n     *\/\n    public static function _cache($label, $params, $config, $mtime1, $mtime2, $data = null, $handler = false) {\n        if (self::$instance === false) {\n            return;\n        }\n        if (DEBUG_LEVEL === 1) {\n            self::$instance-&gt;cacheList[] = array($label, json_encode($params), json_encode($config), $mtime1, $mtime2, null, $handler);\n        } else {\n            self::$instance-&gt;cacheList[] = array($label, json_encode($params), json_encode($config), $mtime1, $mtime2, $data, $handler);\n        }\n    }\n\n    \/**\n     * \u8f93\u51fa\u65e5\u5fd7\n     *\/\n    public static function _show() {\n        if (self::$instance === false) {\n            return;\n        }\n        if (isset($_SERVER['HTTP_USER_AGENT'])) {\n            \/\/ \u754c\u9762\u4e0a\u53ef\u89c6\u5316\u6a21\u5f0f\u8f93\u51fa\u5185\u5bb9\n            self::$instance-&gt;showViews();\n        } else {\n            self::$instance-&gt;writeLogs();\n        }\n    }\n\n    \/**\n     * \u662f\u5426\u6709\u53ef\u89c6\u5316\u754c\u9762\u8f93\u51fa\uff0cHTML\u4ee3\u7801\u76f4\u63a5\u8fd4\u56de\u5230\u6d4f\u89c8\u5668\n     *\/\n    public static function _is_show_view() {\n        if (self::$instance &amp;&amp; isset($_SERVER['HTTP_USER_AGENT'])) {\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    \/**\n     * \u5c06microtime\u7684\u65f6\u95f4\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3afloat\u578b\u7684\u6beb\u79d2\u65f6\u95f4\n     *\/\n    private function _floatMicrotime($mt) {\n        if (strpos($mt, ' ')) {\n            list($ms, $m) = explode(' ', $mt);\n            return ($m + $ms) * 1000;\n        } else {\n            return floatval($mt) * 1000;\n        }\n    }\n\n    \/**\n     * \u8ba1\u7b97\u4e24\u4e2amicrotime\u65f6\u95f4\u7684\u95f4\u9694\u65f6\u95f4\n     * @param $m1 \u5f00\u59cb\u65f6\u95f4\n     * @param $m2 \u7ed3\u675f\u65f6\u95f4\n     * @param $round \u4fdd\u7559\u5c0f\u6570\u4f4d\n     *\/\n    private function _intervalTime($m1, $m2, $round = 3) {\n        return round(($this-&gt;_floatMicrotime($m2) - $this-&gt;_floatMicrotime($m1)), $round);\n    }\n\n    \/**\n     * \u5c06\u8c03\u8bd5\u4fe1\u606f\u751f\u6210\u53ef\u89c6\u5316\u7684HTML\u4ee3\u7801\n     *\/\n    private function showViews() {\n        $showTime = microtime();\n        $output = array();\n        $output[] = \"\\n\";\n        $output[] = '&lt;ul&gt;';\n        $output[] = '&lt;li&gt;&lt;strong style=\"font-size:18px;\"&gt;DebugLog showViews.total process time is ' . $this-&gt;_intervalTime($this-&gt;logId, $showTime) . 'ms&lt;\/strong&gt;&lt;\/li&gt;';\n        if ($this-&gt;timeList) {\n            $total_num = count($this-&gt;timeList);\n            $output[] = '&lt;li&gt;&lt;strong style=\"font-size:18px;\"&gt;TimeList total count is ' . count($this-&gt;timeList) . ', log time is ' . $this-&gt;_intervalTime($this-&gt;logId, $this-&gt;timeList[$total_num - 1][1]) . '&lt;\/strong&gt;&lt;\/li&gt;';\n            $lasttime = $this-&gt;logId;\n            $output[] = '&lt;li&gt;0.000 : start debug log ' . $lasttime . '&lt;\/li&gt;';\n            foreach ($this-&gt;timeList as $info) {\n                $lasttime2 = $info[1];\n                $output[] = '&lt;li&gt;'. $this-&gt;_intervalTime($lasttime, $lasttime2) . ' : ' . implode(\"\\t\", $info) . '&lt;\/li&gt;';\n                $lasttime = $lasttime2;\n            }\n        }\n        if ($this-&gt;logList) {\n            $output[] = '&lt;li&gt;&lt;strong style=\"font-size:18px;\"&gt;LogList total count is ' . count($this-&gt;logList) . '&lt;\/strong&gt;&lt;\/li&gt;';\n            foreach ($this-&gt;logList as $info) {\n                $output[] = '&lt;li&gt;' . implode(\"\\t\", $info) . '&lt;\/li&gt;';\n            }\n        }\n        if ($this-&gt;httpList) {\n            $current = count($output);\n            $total_time = 0;\n            $output[] = null;\n            $max_num = array();\n            $multi_num = array();\n            foreach ($this-&gt;httpList as $info) {\n                $intval = $this-&gt;_intervalTime($info[3], $info[4]);\n                $multi_flag = @json_decode($info[2],true);\n                if(isset($multi_flag) &amp;&amp; isset($multi_flag['is_multi']) &amp;&amp; $multi_flag['is_multi']==1)\n                {\n                    $multi_str = strval($multi_flag['multi_num']);\n\n                    if($intval &gt; $max_num[$multi_str])\n                    {\n                        $max_num[$multi_str] = $intval;\n\n                        if(!in_array($multi_str, $multi_num))\n                        {\n                            $multi_num[] = $multi_str;\n                        }\n                    }\n                }\n                else\n                {\n                    $total_time += $intval;\n                }\n                if ($info[5] &amp;&amp; is_array($info[5])) {\n                    $info[5] = json_encode($info[5]);\n                }\n\n                $output[] = '&lt;li&gt;'. $intval .' : ' . implode(\"\\t\", $info) . '&lt;\/li&gt;';\n            }\n\n            if(!empty($multi_num ))\n            {\n                foreach($multi_num as $val)\n                {\n                    $total_time += $max_num[$val];\n                }\n            }\n\n            $output[$current] = '&lt;li&gt;&lt;strong style=\"font-size:18px;\"&gt;HttpList total count is ' . count($this-&gt;httpList) . ', total time is ' . $total_time . '&lt;\/strong&gt;&lt;\/li&gt;';\n\n        }\n        if ($this-&gt;redisList) {\n            $current = count($output);\n            $total_time = 0;\n            $output[] = null;\n            foreach ($this-&gt;redisList as $info) {\n                $intval = $this-&gt;_intervalTime($info[3], $info[4]);\n                $total_time += $intval;\n                if ($info[5] &amp;&amp; is_array($info[5])) {\n                    $info[5] = json_encode($info[5]);\n                }\n                $output[] = '&lt;li&gt;'. $intval .' : ' . implode(\"\\t\", $info) . '&lt;\/li&gt;';\n            }\n            $output[$current] = '&lt;li&gt;&lt;strong style=\"font-size:18px;\"&gt;RedisList total count is ' . count($this-&gt;redisList) . ', total time is ' . $total_time . '&lt;\/strong&gt;&lt;\/li&gt;';\n        }\n        if ($this-&gt;mysqlList) {\n            $current = count($output);\n            $total_time = 0;\n            $output[] = null;\n            foreach ($this-&gt;mysqlList as $info) {\n                $intval = $this-&gt;_intervalTime($info[3], $info[4]);\n                $total_time += $intval;\n                if ($info[5] &amp;&amp; is_array($info[5])) {\n                    $info[5] = json_encode($info[5]);\n                } elseif (!$info[5]) {\n                    $info[5] = '';\n                }\n                $output[] = '&lt;li&gt;'. $intval .' : ' . implode(\"\\t\", $info) . '&lt;\/li&gt;';\n            }\n            $output[$current] = '&lt;li&gt;&lt;strong style=\"font-size:18px;\"&gt;MysqlList total count is ' . count($this-&gt;mysqlList) . ', total time is ' . $total_time . '&lt;\/strong&gt;&lt;\/li&gt;';\n        }\n        if ($this-&gt;cacheList) {\n            $current = count($output);\n            $total_time = 0;\n            $output[] = null;\n            foreach ($this-&gt;cacheList as $info) {\n                $intval = $this-&gt;_intervalTime($info[3], $info[4]);\n                $total_time += $intval;\n                if ($info[5] &amp;&amp; is_array($info[5])) {\n                    $info[5] = json_encode($info[5]);\n                }\n                $output[] = '&lt;li&gt;'. $intval .' : ' . implode(\"\\t\", $info) . '&lt;\/li&gt;';\n            }\n            $output[$current] = '&lt;li&gt;&lt;strong style=\"font-size:18px;\"&gt;CacheList total count is ' . count($this-&gt;cacheList) . ', total time is ' . $total_time . '&lt;\/strong&gt;&lt;\/li&gt;';\n        }\n        $output[] =  '&lt;\/ul&gt;';\n        echo implode(\"\\n\", $output);\n    }\n\n    \/**\n     * \u5c06\u8c03\u8bd5\u65e5\u5fd7\u5199\u5165\u5230\u672c\u5730\u6587\u4ef6\u4e2d\uff0c\u4f7f\u7528JSON\u683c\u5f0f\u4fdd\u5b58\u4e3a\u4e00\u884c\n     *\/\n    public function writeLogs() {\n        $showTime = microtime();\n\n         if (!defined('DEBUG_LOG_PATH')) {\n            define('DEBUG_LOG_PATH', '\/var\/log\/');\n        }\n\n        $serverList = array(\n            'SCRIPT_NAME' =&gt; $_SERVER['SCRIPT_NAME'],\n            'REQUEST_URI' =&gt; $_SERVER['REQUEST_URI'],\n            'REMOTE_ADDR:PORT' =&gt; $_SERVER['REMOTE_ADDR'] . ':' . $_SERVER['REMOTE_PORT'],\n        );\n        $datalist = array(\n            'logId'=&gt;$this-&gt;logId,\n            'logTime'=&gt;$showTime,\n            'timeList'=&gt;$this-&gt;timeList,\n            'logList'=&gt;$this-&gt;logList,\n            'httpList'=&gt;$this-&gt;httpList,\n            'redisList'=&gt;$this-&gt;redisList,\n            'mysqlList'=&gt;$this-&gt;mysqlList,\n            'server'=&gt;$serverList,\n            );\n        $str = json_encode($datalist);\n        $str = str_replace(\"\\n\", ' ', $str);\n        $str .= \"\\n\";\n        $file_path = DEBUG_LOG_PATH . 'discuz_debug.log';\n        if($fd = @fopen($file_path, 'a')) {\n            fputs($fd, $str);\n            fclose($fd);\n        }\n    }\n\n    \/**\n     * \u5c06\u6d88\u606f\u8f93\u51fa\u5230\u6307\u5b9a\u7684\u6587\u4ef6\n     * \u9ed8\u8ba4 define('DEBUG_LOG_PATH', '\/home\/qiku\/system\/log\/php\/today\/')\n     * @param $msg \u6d88\u606f\u5185\u5bb9\n     * @param string $file \u65e5\u5fd7\u6587\u4ef6\u540d\u79f0\uff0c\u9ed8\u8ba4\u662f discuz_php.log\n     *\/\n    public static function writeDebugLog($msg, $file='discuz_php.log') {\n        $dtime = date('Y-m-d H:i:s');\n        if (!defined('DEBUG_LOG_PATH')) {\n            $default_path = '\/var\/log\/';\n            if (file_exists($default_path)) {\n                define('DEBUG_LOG_PATH', $default_path);\n            } else {\n                define('DEBUG_LOG_PATH', '');\n            }\n        }\n\/\/        $str_cookie = json_encode($_COOKIE);\n        $str_cookie = 'no cookie';\n        $str_server = json_encode(array($_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_HOST'], $_SERVER['REQUEST_URI']));\n        $str = \"[$dtime]||$msg||$str_cookie||$str_server\\n\";\n        $file_path = DEBUG_LOG_PATH . $file;\n        if($fd = @fopen($file_path, 'a')) {\n            fputs($fd, $str);\n            fclose($fd);\n        }\n    }\n\n    \/**\n     * \u901a\u8fc7PHP\u7684 debug_backtrace \u53ef\u4ee5\u8be6\u7ec6\u7684\u67e5\u770b\u5230\u65b9\u6cd5\u8c03\u7528\u7684\u7ec6\u8282\u60c5\u51b5\n     *\/\n    public static function writeBacktrace($deep=3, $all=false) {\n        $result = array();\n        $trace = debug_backtrace();\n        unset($trace[0]);\n        if ($deep &lt; count($trace)) {\n            for ($i = 1; $i &lt;= $deep; $i++) {\n                $info = $trace[$i];\n                if (isset($info['object']) &amp;&amp; $all === false) {\n                    unset($info['object']);\n                }\n                $result[] = $info;\n            }\n        } elseif ($all === false) {\n            foreach ($trace as $info) {\n                if (isset($info['object'])) {\n                    unset($info['object']);\n                }\n                $result[] = $info;\n            }\n        } else {\n            $result = $trace;\n        }\n        self::writeDebugLog(json_encode($result), 'backtrace.log');\n    }\n\n}\n\n\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>&lt;?php \/** * \u8c03\u8bd5\u65e5\u5fd7\u64cd\u4f5c\u7c7b * DEBUG_LEVEL=0\u7684\u65f6\u5019\u4e0d\u4f1a\u5728\u540e\u7aef\u8fd0\u884c\uff0c * DEB [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[15],"tags":[405],"class_list":["post-1204","post","type-post","status-publish","format-standard","hentry","category-15","tag-php"],"_links":{"self":[{"href":"https:\/\/wyxxt.org.cn\/index.php?rest_route=\/wp\/v2\/posts\/1204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wyxxt.org.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wyxxt.org.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wyxxt.org.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wyxxt.org.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1204"}],"version-history":[{"count":1,"href":"https:\/\/wyxxt.org.cn\/index.php?rest_route=\/wp\/v2\/posts\/1204\/revisions"}],"predecessor-version":[{"id":1205,"href":"https:\/\/wyxxt.org.cn\/index.php?rest_route=\/wp\/v2\/posts\/1204\/revisions\/1205"}],"wp:attachment":[{"href":"https:\/\/wyxxt.org.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wyxxt.org.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wyxxt.org.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}