Home> php教程> PHP源码> body text

Golang写了一个帮助调试的代理程序,PHP实现了一个类用于输出调试信息

PHP中文网
Release: 2016-05-25 16:59:53
Original
1212 people have browsed it

跳至

$type, "type"=>gettype($arg), "name"=>self::getVarName(), "value"=>$arg ); } else { self::$debugItemCount++; header( 'Proxy_debug_item_'.self::$debugItemCount.': ' .json_encode( ["category"=>$type, "type"=>gettype($arg), "name"=>self::getVarName(), "value"=>$arg] ) ); header('Proxy_debug_item_count: '.self::$debugItemCount); } } public static function __callStatic($name, $args) { $func = ['info'=>'I', 'warn'=>'W', 'error'=>'E']; if (isset($func[$name])) { self::$offset = 0; self::$varNameString = null; foreach ($args as $key => $arg) { self::func($func[$name], $arg); } } else { throw new Exception('Call to undefined method!', 1); } } /** * groupStart * start record a group * * @access public * @static * * @return null */ public static function groupStart() { self::$start = true; self::$debugGroupCount++; } /** * groupEnd * stop record a group * * @access public * @static * * @return null */ public static function groupEnd() { self::$start = false; header( 'Proxy_debug_group_' .self::$debugGroupCount .': '.json_encode(self::$group) ); header('Proxy_debug_group_count: '.self::$debugGroupCount); self::$group = array(); } }
Copy after login

2.[文件]main.go ~ 6KB

//Proxy Debug //This simple program is for helping developers debug through http header. //For more detail, see README.md package main import ( "bufio" "encoding/json" "fmt" "io/ioutil" "log" "net/http" "os" "strconv" "strings" ) //color config var color map[string]interface{} //Parse config file func readConfig() { config, err := os.Open("config.ini") if err != nil { log.Fatalln(err) } buf := bufio.NewReader(config) line, _ := buf.ReadString('\n') var jsonData interface{} err = json.Unmarshal([]byte(line), &jsonData) if err != nil { log.Fatalln(err) } var ok bool color, ok = jsonData.(map[string]interface{}) if ok == false { log.Fatalln("Parse config file error, it must be a json string!") } for _, c := range color { if c.(float64) > 37 || c.(float64) < 30 { log.Fatalln("Config error!The valid value is 30-37.") } } item := [5]string{"url", "varName", "varType", "varValue", "group"} for _, i := range item { _, has := color[i] if has == false { log.Fatalln("Losing configuration:", i) } } } func main() { var port int = 8888 if len(os.Args) == 1 { fmt.Println("Listening in default port:8888") } else if os.Args[1] == "--help" { fmt.Println("usage: proxy [-p port]") return } else if len(os.Args) != 3 || os.Args[1] != "-p" { log.Fatalln("Error arguments!Just support '-p port'.") } else { port, err := strconv.Atoi(os.Args[2]) if err != nil && port > 65535 || port < 1024 { log.Fatalln("Error port, it should be 1024-65535, default is 8888.") } } readConfig() http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r.RequestURI = "" resp, err := http.DefaultClient.Do(r) if err != nil { http.NotFound(w, r) return } defer resp.Body.Close() //Get the debugging information form http header caterory := map[string]int{"I": 34, "W": 33, "E": 31} format := "\t \033[%dm-%s\033[%vm %s\033[%vm%s\033[%vm%s\n" debugItem := make(map[string]map[string]interface{}) debugItemIndex := make([]string, 0, 5) var jsonData interface{} v, okDebugItem := resp.Header["Proxy_debug_item_count"] if okDebugItem { count, _ := strconv.Atoi(v[0]) for i := 1; i <= count; i++ { index := "Proxy_debug_item_" + strconv.Itoa(i) vv, ok := resp.Header[index] if ok { err = json.Unmarshal([]byte(vv[0]), &jsonData) if err != nil { continue } data, ok := jsonData.(map[string]interface{}) if ok == false { continue } debugItemIndex = append(debugItemIndex, index) debugItem[index] = data } } } debugGroup := make(map[string]interface{}) debugGroupIndex := make([]string, 0, 5) v, okDebugGroup := resp.Header["Proxy_debug_group_count"] if okDebugGroup { count, _ := strconv.Atoi(v[0]) for i := 1; i maxLenName { maxLenName = len(v) } v = vm["type"].(string) if len(v) > maxLenType { maxLenType = len(v) } } for _, i := range debugItemIndex { n := debugItem[i]["name"].(string) t := debugItem[i]["type"].(string) c := debugItem[i]["category"].(string) fmt.Printf( format, caterory[c], c, color["varName"], n+strings.Repeat(" ", maxLenName-len(n)+1), color["varType"], t+strings.Repeat(" ", maxLenType-len(t)+1), color["varValue"], strings.Replace(fmt.Sprint(debugItem[i]["value"]), "map", "", 1)) } } if okDebugGroup { if okDebugItem == false { fmt.Printf("\033[%vm%v\n", color["url"], r.URL) } maxLenName := make([]int, len(debugGroupIndex)) maxLenType := make([]int, len(debugGroupIndex)) k := 0 for _, vm := range debugGroup { for _, vv := range vm.([]interface{}) { vk, ok := vv.(map[string]interface{}) if ok == false { continue } v := vk["name"].(string) if len(v) > maxLenName[k] { maxLenName[k] = len(v) } v = vk["type"].(string) if len(v) > maxLenType[k] { maxLenType[k] = len(v) } } k++ } k = 0 for _, i := range debugGroupIndex { fmt.Printf("\t\033[%vm=Group %v=\n", color["group"], k+1) for _, v := range debugGroup[i].([]interface{}) { vk, ok := v.(map[string]interface{}) if ok == false { continue } n := vk["name"].(string) t := vk["type"].(string) c := vk["category"].(string) fmt.Printf( format, caterory[c], c, color["varName"], n+strings.Repeat(" ", maxLenName[k]-len(n)+1), color["varType"], t+strings.Repeat(" ", maxLenType[k]-len(t)+1), color["varValue"], strings.Replace(fmt.Sprint(vk["value"]), "map", "", 1)) } k++ fmt.Printf("\t\033[%vm=GROUP=\n", color["group"]) } } }) http.ListenAndServe(":"+strconv.Itoa(port), nil) }
Copy after login

3.[图片]screenshot.pngGolang写了一个帮助调试的代理程序,PHP实现了一个类用于输出调试信息

Golang写了一个帮助调试的代理程序,PHP实现了一个类用于输出调试信息

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template
    About us Disclaimer Sitemap
    php.cn:Public welfare online PHP training,Help PHP learners grow quickly!