123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- <?php
- namespace loyalsoft;
- /**
- * 调试辅助脚本,目前主要集中在输出功能.
- * @version
- * 2.0.1 添加检查PHP version和extensions的方法. --gwang 2019年8月16日 15:15:48
- * 1.0.0 Created at 2016-7-1. by --gwang
- * @author gwang (mail@wanggangzero.cn)
- * @copyright © 2016-7-1, SJZ LoyalSoft Corporation & gwang. All rights reserved.
- */
- class DebugHelper {
- /**
- * @return bool 调试输出是否开启
- */
- private static function isDebugging() {
- return defined("GAME_ONLINE") && !GAME_ONLINE; # 线上版屏蔽输出
- }
- /**
- * 浏览器打印调试信息
- * @param mixed $msg 对象或数组将会被序列化为json串
- */
- public static function debug($msg) {
- if (self::isDebugging()) {
- if (is_array($msg) || is_object($msg)) {
- $msg = json_encode($msg);
- }
- echoLine('[' . TimeUtil::dtCurrent() . ']| ' . $msg);
- }
- }
- /**
- * var_dump输出变量,统一入口的话, 上线的时候通过统一变量关闭,防止漏删除的意外输出.
- * @param mixed $obj
- */
- public static function var_dump($obj) {
- if (!self::isDebugging()) {
- return;
- }
- $pos = self::get_call_stack();
- $stack = explode('<br/>', $pos);
- $n = 3 > count($stack) ? count($stack) : 3;
- for ($i = 0; $i < $n; $i++) {
- echoLine($stack[$i]);
- }
- echoLine(); # 换个行
- var_dump($obj);
- }
- /**
- * 浏览器输出调用堆栈
- * @return void
- */
- public static function print_stack_trace() {
- /* * * * *
- * 因为debug_print_backtrace()格式不太易读,自己调整下输出样式
- * * * */
- $html = self::get_call_stack();
- self::debug($html);
- }
- /**
- * 尝试从array中取出一个命名变量, Ps.可以取消5.3中的Notice
- * @param arry $arr
- * @param string $strFieldName
- * @return mixed
- */
- static private function arr_get($arr, $strFieldName) {
- if (isset($arr[$strFieldName])) {
- return $arr[$strFieldName];
- }
- return null;
- }
- /**
- * 获得调用堆栈
- * @param int $levelnum 想要获得的调用层次,default is 3
- * @return string formated string
- */
- static public function get_call_stack($levelnum = 3) {
- $array = debug_backtrace();
- $outHtml = PHP_EOL;
- array_shift($array); # 移除get_call_stack函数自身
- $n = 1;
- foreach ($array as $row) {
- $outHtml .= "\t" . CommUtil::str2UTF8(self::arr_get($row, 'file')) # windows下路径(gb2312)转码
- . ', row: ' . self::arr_get($row, 'line') . ', method: ' # line
- . self::arr_get($row, 'function') . ";<br/>" . PHP_EOL; # func
- if ($levelnum <= $n++) {
- break;
- }
- }
- return $outHtml;
- }
- /**
- * 浏览器弹窗提示
- * @param string $msg
- */
- public static function alert($msg) {
- if (self::isDebugging()) {
- echo "<Script language=\"javascript\">alert(\"" . $msg . "\");</Script>";
- }
- }
- /**
- * 检查模块是否加载
- * @param string[] $arr 要检查的模块名称
- */
- public static function checkModules($arr = array()) {
- $default = array(# # 基础模块
- "curl",
- "mbstring",
- "openssl",
- "pdo_mysql",
- "sockets",
- "zlib",
- );
- $r_modules = array_merge($default, $arr); # 合并指定模块
- $diff = array_diff($r_modules, get_loaded_extensions()); # 判断缺失模块
- if (count($diff)) { # 确实缺失模块
- die("require modules: " . implode(' ,', $diff)); # 直接结束运行
- }
- return true; # 返回true
- }
- /**
- * 检查PHP版本
- * @param string $ver 最低版本字符串类似于7.3.5
- */
- public static function checkkPHPVersion($ver) {
- $default_ver = "5.4.16";
- $r_ver = isset($ver) ? $ver : $default_ver;
- if (version_compare(PHP_VERSION, $r_ver, '<')) {
- die('<font color="red">This code request at least PHP version ' . $r_ver #
- . ', Current version: ' . PHP_VERSION . ".</font><br/>" . PHP_EOL);
- }
- }
- }
|