zoukankan      html  css  js  c++  java
  • php探针文件

    <?php
    /**
     * PHP探针
     * 
     * @author xiaowang <736523132@qq.com>
     * @copyright Copyright (c) 2013 http://qingmvc.com
     * @license http://www.apache.org/licenses/LICENSE-2.0 Apache-2.0
     */
    defined('DS') or define('DS',DIRECTORY_SEPARATOR);
    //#函数
    function color($v,$color='red'){
        return "<b style="color:{$color};">{$v}</b>";
    }
    function color_red($v){
        return color($v,'red');
    }
    function color_green($v){
        return color($v,'green');
    }
    function url_action($ac){
        return '?ac='.$ac;
    }
    function qini_get($key){
        $v=ini_get($key);
        if($v===null || $v===''){
            return '<i>no value</i>';
        }else{
            return $v;
        }
    }
    /**
     * @author xiaowang <736523132@qq.com>
     * @copyright Copyright (c) 2013 http://qingmvc.com
     * @license http://www.apache.org/licenses/LICENSE-2.0 Apache-2.0
     */
    interface TzInterface{
        /**
         * 
         */
        public function tz();
    }
    abstract  class TzBase implements TzInterface{
        /**
         * @param string $title
         * @param array $datas
         */
        public function table($title,array $datas){
            $body="";
            foreach($datas as $k=>$v){
                if($v===null || $v===''){$v='<i>no value</i>';}
                $body.="<tr><td>{$k}</td><td>{$v}</td></tr>";
            }
            $html="<table class="table table-hover">
                   <thead>
                      <tr>
                        <th colspan="2">{$title}</th>
                      </tr>
                   </thead>
                   <tbody>
                   {$body}
                   </tbody>
                   </table>
                    ";
            return $html;       
        }
        /**
         * action="'.url_action($action).'" 
         * 
         * @param string $action
         * @param string $def
         */
        public function form($action,$def=''){
            return '<form target="_blank">
                        <input type="hidden" name="ac" value="'.$action.'"/>
                        <input type="text"      name="value" placeholder="输入..." value="'.$def.'"/>
                        <button type="submit">提交</button>
                    </form>
                    ';
        }
    }
    /**
     * 服务器信息
     * 
     * @author xiaowang <736523132@qq.com>
     * @copyright Copyright (c) 2013 http://qingmvc.com
     * @license http://www.apache.org/licenses/LICENSE-2.0 Apache-2.0
     */
    class TzServerInfo extends TzBase{
        /**
         * 
         */
        public function tz(){
            $info=[];
            $info['主机和端口']    =$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].' / '.$_SERVER['SERVER_ADDR'].':'.$_SERVER['SERVER_PORT'];
            $info['主机名']    =gethostname();
            $info['探针文件']    =$_SERVER['SCRIPT_FILENAME'];
            $info['标识']        =@php_uname();
            $info['操作系统']    =PHP_OS;
            $info['解译引擎']    =$_SERVER['SERVER_SOFTWARE'];
            $info['时间和时区']    =date('Y-m-d H:i:s').' 默认时区:'.date_default_timezone_get();
            //var_dump($info);
            //var_dump($_SERVER);
            echo $this->table('服务器信息',$info);
        }
    }
    /**
     * 服务器信息
     * 
     * @author xiaowang <736523132@qq.com>
     * @copyright Copyright (c) 2013 http://qingmvc.com
     * @license http://www.apache.org/licenses/LICENSE-2.0 Apache-2.0
     */
    class TzPhpInfo extends TzBase{
        /**
         * get_cfg_var
         * ini_get
         * ini_set('memory_limit',0);
         * var_dump(ini_get('memory_limit'));
         * var_dump(get_cfg_var('memory_limit'));
         */
        public function tz(){
            $info=[];
            $info['PHP版本/PHP_VERSION']            =PHP_VERSION;
            $info[color_red('运行模式/SAPI')]        =php_sapi_name();
            $info['脚本占用最大内存/memory_limit']        =ini_get('memory_limit');
            $info['POST最大数据长度/post_max_size']        =ini_get('post_max_size');
            $info['上传文件最大限制/upload_max_filesize']    =ini_get('upload_max_filesize');
            $info['浮点型数据显示的有效位数/precision']        =ini_get('precision');
            $info['脚本超时时间/max_execution_time']    =ini_get('max_execution_time');
            $info['socket超时时间/default_socket_timeout']    =ini_get('default_socket_timeout');
            
            $info['PHP页面根目录/doc_root']            =ini_get('doc_root');
            $info['用户根目录/user_dir']            =ini_get('user_dir');
            $info['显示错误信息/display_errors']    =ini_get('display_errors');
            $info['注册全局变量/register_globals']    =ini_get('register_globals');
            
            $info['短标签模式"&lt;?...?&gt;"/short_open_tag']    =ini_get('short_open_tag');
            $info['报告内存泄漏/report_memleaks']                =ini_get('report_memleaks');
            $info['允许打开远程文件/allow_url_fopen']                =ini_get('allow_url_fopen');
            $info['注册命令行变量argv,argc/register_argc_argv']    =ini_get('register_argc_argv');
            /*
            $info['']    =ini_get('');
            */
            //var_dump($info);
            echo $this->table('PHP信息',$info);
            //
            $this->safe();
            $this->perf();
            $this->phpinfo_imp();
            $this->extensions();
        }
        /**
         * php安全
         */
        public function safe(){
            $info=[];
            $info[color_red('禁用危险函数/disable_functions')]    =ini_get('disable_functions');
            $info['dl()函数/enable_dl']                            =ini_get('enable_dl');
            $info['eval语言结构']                                =color_red('极度危险,不推荐在代码中使用。').'不是函数,不能用disable_functions禁止,需要使用第三方扩展Suhosin等';
            $info['PHP安全模式/safe_mode']                        =ini_get('safe_mode');
            $info['允许访问的文件路径/open_basedir']            =ini_get('open_basedir');
            $info['']                                            ='文件系统安全:限制访问超出open_basedir定义的路径文件,避免敏感文件被访问,passwd/php配置文件/my.ini等';
            //危险函数
            $funcs='system,show_source,shell_exec,exec,proc_open,popen,passthru,dl,assert';
            $html='';
            foreach(explode(',',$funcs) as $func){
                $f=$func;
                if(function_exists($func)){
                    $func=color_green($func.'-存在');
                }else{
                    $func=color_red($func.'-不存在');
                }
                $html.=$func;
            }
            $info[color_red('危险函数是否存在/启用')]="<div class="danger-funcs">{$html}</div>";
            
            echo $this->table('PHP安全',$info);
        }
        /**
         * php性能
         * 
         * @link http://php.net/manual/zh/opcache.configuration.php
         */
        public function perf(){
            $opcache="查看phpinfo()信息的opcache扩展部分";
            $opcache.="
    <br/>是否开启:".qini_get('opcache.enable');
            $opc=[];
            $opc['opcache.enable/启用操作码缓存']=qini_get('opcache.enable');
            $opc['opcache.memory_consumption/共享内存大小']=qini_get('opcache.memory_consumption');
            $opc['opcache.validate_timestamps/定时检查脚本是否更新']=qini_get('opcache.validate_timestamps').' (单位秒)';
            $opc['opcache.save_comments/是否缓存注释内容']=qini_get('opcache.save_comments');
            $opc['opcache.blacklist_filename/不缓存的黑名单']=qini_get('opcache.blacklist_filename');
            $opc['opcache.force_restart_timeout/重启过期时间']=qini_get('opcache.force_restart_timeout');
            $opc['opcache.preferred_memory_model/首选缓存模块']=qini_get('opcache.preferred_memory_model').' (mmap,shm, posix 以及 win32)';
            $opc['opcache.file_cache_only/只用文件缓存还是开启共享内存']=qini_get('opcache.file_cache_only');
            
            $opc=$this->table('查看phpinfo()信息的opcache扩展部分',$opc);
            
            $info=[];
            $info[color_green('opcache/操作码缓存')]=$opc;
            echo $this->table('PHP性能',$info);
        }
        /**
         * 已加载模块
         */
        public function extensions(){
            $exts=get_loaded_extensions();
            $text='<div class="extensions">';
            foreach($exts as $key=>$value){
                $text.="<span>$value</span>";
            }
            $text.='</div>';
            echo $this->table('PHP已加载扩展/get_loaded_extensions',[''=>$text]);
        }
        /**
         * phpinfo的重要字段信息
         */
        public function phpinfo_imp(){
            $info=[];
            $info['源码编译器/Compiler']            ='例如: MSVC14 (Visual C++ 2015)';
            $info['php位数/Architecture']            ='例如: x86 x64';
            $info['运行模式/Server API']            ='例如: Apache 2.0 Handler PHP-FPM FastCGI';
            $info['当前使用的php.ini/Loaded Configuration File']='例如: R:xamppphpphp.ini';
            $info['是否开启操作码缓存/OPcache']        ='例如: ';
            $info[color_green('是否是线程安全的/Thread Safety')]    ='例如: enabled';
            $info[color_green('查看扩展库是否支持')]                ='例如: gd mbstring pdo mysqli redis session';
            $info[color_red('执行phpinfo函数')]='<a href="'.url_action('phpinfo').'" target="_blank" style="color:red;"><b>点击执行</b></a>';
            echo $this->table('phpinfo()函数中的重要信息',$info);
        }
    }
    /**
     * @author xiaowang <736523132@qq.com>
     * @copyright Copyright (c) 2013 http://qingmvc.com
     * @license http://www.apache.org/licenses/LICENSE-2.0 Apache-2.0
     */
    class TzActions extends TzBase{
        /**
         * 
         */
        public function tz(){
            $ac=@$_GET['ac'];
            if($ac>''){
                $method='ac_'.$ac;
                if(method_exists($this,$method)){
                    $this->$method();
                    exit();
                }
            }
        }
        /**
         *
         */
        public function ac_phpinfo(){
            phpinfo();
        }
        /**
         *
         */
        public function ac_functions(){
            $ac=@$_GET['ac'];
            var_dump($ac);exit();
        }
        /**
         *
         */
        public function ac_function_check(){
            $value=@$_GET['value'];
            if(function_exists($value)){
                echo color_green('函数存在:'.$value);
            }else{
                echo color_red('函数不存在:'.$value);
            }
        }
        /**
         *
         */
        public function ac_class_check(){
            $value=@$_GET['value'];
            if(class_exists($value)){
                echo color_green('类存在:'.$value);
            }else{
                echo color_red('类不存在:'.$value);
            }
        }
        /**
         *
         */
        public function ac_ext_check(){
            $value=@$_GET['value'];
            if(extension_loaded($value)){
                echo color_green('扩展已加载:'.$value);
            }else{
                echo color_red('扩展未加载:'.$value);
            }
        }
        /**
         * 数据库检测
         * $dsn='mysql:host=localhost;dbname=test;port=3306';
         */
        public function ac_db_check(){
            $dsn    =@$_GET['dsn'];
            $user    =@$_GET['user'];
            $pwd    =@$_GET['pwd'];
    //         var_dump($_GET);exit();
    //         $dsn='mysql:host=localhost;port=3306';
    //         $user='root';
    //         $pwd ='root';
            echo "dsn: {$dsn}<br/>
    ";
            echo "user: {$user}<br/>
    ";
            echo "pwd: {$pwd}<br/>
    ";
            try{
                $conn=new PDO($dsn,$user,$pwd);
                if($conn){
                    echo color_green('数据库连接成功');
                }else{
                    echo color_red('数据库连接失败');
                }
            }catch(PDOException $e){
                echo color_red('数据库连接失败');
                echo "<br/>
    ";
                echo color_red('异常信息: '.$e->getMessage());
            }
        }
    }
    /**
     * @author xiaowang <736523132@qq.com>
     * @copyright Copyright (c) 2013 http://qingmvc.com
     * @license http://www.apache.org/licenses/LICENSE-2.0 Apache-2.0
     */
    class TzTools extends TzBase{
        /**
         * 
         */
        public function tz(){
            $this->db_check();
            //
            $list=[];
            $list['函数是否存在']=$this->form('function_check','printf').' mysql/mysql_query/mb_substr';
            $list['类是否存在']     =$this->form('class_check','mysqli').' Pdo/Reflection';
            $list['扩展是否已加载']=$this->form('ext_check','redis').' redis/memcache';
            echo $this->table('检测函数/类/扩展',$list);
        }
        /**
         *
         */
        public function db_check(){
            $action='db_check';
            $dns ='mysql:host=localhost;port=3306';
            $user='root';
            $pwd ='root';
            $html='<form target="_blank">
                        <input type="hidden" name="ac" value="'.$action.'" />
                        <input type="text"      name="dsn"     value="'.$dns.'"     style=" 360px;"/>
                        用户名:<input type="text" name="user" value="'.$user.'"     style=" 50px;"/>
                        密码:<input type="text"     name="pwd"     value="'.$pwd.'"     style=" 50px;"/>
                        <button type="submit">提交</button>
                    </form>
                    ';
            $list=[];
            $list[color_red('mysql')]=$html;
            $list['']='如果也要检测数据库: mysql:host=localhost;port=3306;dbname=test';
            echo $this->table(color_red('数据库连接测试'),$list);
        }
    }
    (new TzActions())->tz();
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>探针 | QingMVC</title>
    <style type="text/css">
    body{
        font-family: "Microsoft YaHei","微软雅黑",Arial,"Micro Hei",SimSun,"宋体",Heiti,"黑体",sans-serif;
        font-size: 14px;
        
        width: 960px;
        margin: 0 auto;    
    }
    table {
        width: 100%;
        padding: 0;
        margin-top:28px;
        border-collapse: collapse;
        border-spacing: 0;
        box-shadow: 1px 1px 1px #CCC;
    }
    td,th{
        padding: 5px 10px;
        border: 1px solid #ccc;
        word-break: break-all;
    }
    td>table,
    th>table{
        margin: -5px -10px;
        margin:0;
        box-shadow: none;
    }
    th{
        background: #ddd;
    }
    tr>td:first-child{
        background: #efefef;
    }
    h1{
        font-weight: 100;
        text-align: center;
        padding: 9px 0;
    
        margin-bottom: 10px;
        border-bottom: 1px solid #eee;
        margin: 20px 0 10px 0;
    }
    i{
        color: #ccc;    
    }
    .extensions,
    .danger-funcs
    {
        word-break: break-all;
    }
    .extensions>span,
    .danger-funcs>b
    {
        padding: 0 10px;
        display: inline-block;    
    }
    form{
        display:inline-block;
    }
    </style>
    </head>
    <body>
    <h1>PHP探针</h1>
    <?php
    (new TzServerInfo())->tz();
    (new TzPhpInfo())->tz();
    (new TzTools())->tz();
    ?>
    <br/>
    <br/>
    <br/>
    </body>
    </html>
  • 相关阅读:
    composer在phpstorm中安装代码库
    [C#]WinForm 中 comboBox控件之数据绑定
    【建模+强连通分量】POJ1904 King's Quest
    【构造】UVa 11387 The 3-Regular Graph
    【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士
    【强连通分量+spfa】Bzoj1179 Apio2009 Atm
    【树形dp】Bzoj3391 [Usaco2004 Dec]Tree Cutting网络破坏
    【dfs+连通分量】Bzoj1123 POI2008 BLO
    【强连通分量+概率】Bzoj2438 杀人游戏
    【强连通分量】Bzoj1194 HNOI2006 潘多拉的盒子
  • 原文地址:https://www.cnblogs.com/chenpeng03/p/13373635.html
Copyright © 2011-2022 走看看