463 lines
14 KiB
PHP
463 lines
14 KiB
PHP
<?php
|
|
class myConn extends myInc{
|
|
var $error_log = [];
|
|
var $query_id;
|
|
var $num_rows;
|
|
function __construct($connname=''){ //初始化操作
|
|
$this->connname=$connname;
|
|
}
|
|
function query($sql){
|
|
$stmt = sqlsrv_query($this->link, $sql);
|
|
if($stmt === false) {
|
|
$this->error_log[] = sqlsrv_errors();
|
|
}else{
|
|
$this->query_id = $stmt;
|
|
}
|
|
}
|
|
function fetch_all($sql){
|
|
$this->query($sql);
|
|
$data = [];
|
|
while($row = @sqlsrv_fetch_array($this->query_id,SQLSRV_FETCH_ASSOC)) {
|
|
$data[] = $row;
|
|
}
|
|
return $data;
|
|
}
|
|
function fetch_one($sql){
|
|
$this->query($sql);
|
|
return sqlsrv_fetch_array($this->query_id,SQLSRV_FETCH_ASSOC);
|
|
}
|
|
function fetch_abc($sql){
|
|
$count=$this->fetch_one($sql);
|
|
return current($count);
|
|
}
|
|
function affectedRows() {
|
|
return ($this->query_id) ? @sqlsrv_fetch_row($this->query_id) : false;
|
|
}
|
|
function update($table,$field,$where,$conn=''){//修改数据库
|
|
if($conn) $this->links($conn);
|
|
if(is_array($field)){
|
|
foreach ($field as $key => $value){
|
|
$sqlud.=$key."='".$value."',";
|
|
}
|
|
$sql="UPDATE $table SET ".substr($sqlud,0,-1)." WHERE $where ";
|
|
}else{
|
|
$sql="UPDATE $table SET $field WHERE $where ";
|
|
}
|
|
return $this->query($sql);
|
|
if($conn) $this->close();
|
|
}
|
|
function insert($table,$field,$date='',$conn=''){//添加数据库 $date 为空, $field为数组添加
|
|
if($conn) $this->links($conn);
|
|
if($date){
|
|
$sql="INSERT INTO $table ($field) VALUES ($date)";
|
|
}else{
|
|
foreach($field as $key => $value){
|
|
$sqlfield.= $key.",";
|
|
$sqlvalue.= "'".$value."',";
|
|
}
|
|
$sql="INSERT INTO $table (".substr($sqlfield,0,-1).") VALUES (".substr($sqlvalue,0,-1).")";
|
|
}
|
|
//echo $sql;
|
|
return $this->query($sql);
|
|
if($conn) $this->close();
|
|
}
|
|
function deldate($table,$where,$conn=''){//删除数据库
|
|
if($conn) $this->links($conn);
|
|
$sql="DELETE FROM ".$table." WHERE ".$where." ";
|
|
$rs=$this->query($sql);
|
|
return sqlsrv_query($rs);
|
|
if($conn) $this->close();
|
|
}
|
|
//分页 注意一定要 order by
|
|
//public function page($sql,$pkey,$table,$order='asc',$pageSize=10,$linkNum=7,$page=1,$conn=''){
|
|
public function page($info){
|
|
if(!$info['sql'] || !$info['key'] || !$info['table']){
|
|
return '';
|
|
}
|
|
if($info['conn']) $this->links($info['conn']);
|
|
$info['page'] = is_numeric($info['page']) ? $info['page'] : 1;
|
|
$info['pageSize'] = is_numeric($info['pageSize']) ? $info['pageSize'] : 10;
|
|
$info['linkNum'] = is_numeric($info['linkNum']) ? $info['linkNum'] : 7;
|
|
if(!$info['count']){
|
|
$info['count'] = "select count(*) from (".str_replace(strrchr($info['sql'],"order"),"",$info['sql']).") tmptable";
|
|
}
|
|
$totalNum = $this->fetch_abc($info['count']);//总数
|
|
$maxPage = (int)ceil($totalNum/$info['pageSize']);//总页码
|
|
$info['page'] = $info['page']>$maxPage ? $maxPage : $info['page'];
|
|
$num = ($info['page']-1)*$info['pageSize'];
|
|
$num = $num<0 ? 0 : $num;
|
|
//echo $info['count']."<br><br><br>".$totalNum."<br>".$num."<br><br>";
|
|
$sql=str_replace("select ","select top ".$info['pageSize']." ",$info['sql']);
|
|
if(strstr($sql,' where ')){
|
|
if(strstr(strtolower($sql),' left join ')){
|
|
$sql=str_replace(" where "," where a.".$info['key']." not in(select top ".$num." ".$info['key']." from ".$info['table']." ".$info['where']." order by ".$info['order'].") and ",$sql);
|
|
}else{
|
|
$sql=str_replace(" where "," where ".$info['key']." not in(select top ".$num." ".$info['key']." from ".$info['table']." ".$info['where.']." order by ".$info['order'].") and ",$sql);
|
|
}
|
|
}else{
|
|
if(strstr(strtolower($sql),' left join ')){
|
|
if(strstr($sql,' group by ')){
|
|
$sql=str_replace(" group by "," where a.".$info['key']." not in(select top ".$num." ".$info['key']." from ".$info['table']." order by ".$info['order'].") group by ",$sql);
|
|
}else{
|
|
$sql=str_replace(" order by "," where a.".$info['key']." not in(select top ".$num." ".$info['key']." from ".$info['table']." order by ".$info['order'].") order by ",$sql);
|
|
}
|
|
}else{
|
|
$sql=str_replace(" order "," where ".$info['key']." not in(select top ".$num." ".$info['key']." from ".$info['table']." order by ".$info['order'].") order ",$sql);
|
|
}
|
|
}
|
|
//echo $sql."<br><br><br>";
|
|
$data = $this->fetch_all($sql);
|
|
return ['data'=>$data,'page'=>[
|
|
"page"=>$info['page'],
|
|
"start"=>($info['page']-round($info['linkNum']/2))>0 ? ($info['page']-round($info['linkNum']/2)) : "1",
|
|
"end"=>($info['page']+round($info['linkNum']/2))<$maxPage ? ($info['page']+round($info['linkNum']/2)) : $maxPage,
|
|
"maxPage"=>$maxPage,
|
|
"pageSize"=>$info['pageSize'], //每页显示
|
|
"linkNum"=>$info['linkNum'], //链接显示数
|
|
"totalNum"=>$totalNum //总数
|
|
]];
|
|
if($conn) $this->close();
|
|
}
|
|
// 字符串截取函数
|
|
function str_substr($start, $end, $str){
|
|
$temp = explode($start, $str, 2);
|
|
$content = explode($end, $temp[1], 2);
|
|
return $content[0];
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getfetch($rs,$rr=''){
|
|
if($rr=='assoc'){
|
|
return @mssql_fetch_assoc($rs);
|
|
}elseif($rr=='row'){
|
|
return @mssql_fetch_row($rs);
|
|
}else{
|
|
return @mssql_fetch_array($rs);
|
|
}
|
|
}
|
|
function rscount($rs){ //获取rs总数
|
|
return mssql_num_rows($rs);
|
|
}
|
|
|
|
function getcount($sql,$hit=0,$conn=''){ //获取总数
|
|
if($conn) $this->links($conn);
|
|
return @mssql_num_rows($this->query($sql))+$hit;
|
|
if($conn) $this->close();
|
|
}
|
|
function getcounts($field,$table,$where,$hit=0,$conn=''){ //获取字段总和数
|
|
if($conn) $this->links($conn);
|
|
$rs=$this->query("select sum($field) from $table where $where");
|
|
$row=$this->getfetch($rs);
|
|
return $row[0]+$hit;
|
|
if($conn) $this->close();
|
|
}
|
|
function getdy($field,$table,$where,$order='',$rr='',$conn=''){//一般调用
|
|
if($conn) $this->links($conn);//连接数据库
|
|
$sql="select $field from $table ";
|
|
if($where){ $sql.="WHERE $where "; }
|
|
if($order){ $sql.=" order by $order "; }
|
|
$rs=$this->query($sql);
|
|
$row=$this->getfetch($rs,$rr);
|
|
if(preg_match('/[,*]/i',$field)){
|
|
return $row;
|
|
}else{
|
|
return $row[0];
|
|
}
|
|
unset($sql,$rs,$row);
|
|
if($conn) $this->close();//关闭数据库
|
|
}
|
|
function getloop($field,$table,$where,$order='',$num=0,$rr='',$conn=''){//一般循环调用
|
|
if($conn) $this->links($conn);
|
|
$sql="select $field from $table ";
|
|
if($where){ $sql.=" WHERE $where "; }
|
|
if($order){ $sql.=" order by $order "; }
|
|
$rs=$this->query($sql);
|
|
$rot=array();
|
|
if(!$num){ $num=$this->rscount($rs);}
|
|
for($p=0;$p<$num;$p++){
|
|
$row=$this->getfetch($rs,$rr);
|
|
if($row) $rot[]=$row;
|
|
}
|
|
return $rot;
|
|
unset($sql,$rs,$row,$rot);
|
|
if($conn) $this->close();
|
|
}
|
|
|
|
function getloops($sql,$conn=''){//一般循环调用
|
|
if($conn) $this->links($conn);
|
|
$rs=$this->query($sql);
|
|
$rot=array();
|
|
if(!$num){ $num=$this->rscount($rs);}
|
|
for($p=0;$p<$num;$p++){
|
|
$row=$this->getfetch($rs,$rr);
|
|
if($row) $rot[]=$row;
|
|
}
|
|
return $rot;
|
|
unset($sql,$rs,$row,$rot);
|
|
if($conn) $this->close();
|
|
}
|
|
function getgl($gg,$str){//数组过滤
|
|
$strs=explode(',',$str);
|
|
foreach($strs as $value){
|
|
unset($gg[$value]);
|
|
}
|
|
return $gg;
|
|
}
|
|
function getxz($str,$x,$d=0){//字符输入限制
|
|
$s = (strlen($str)+mb_strlen($str,'utf8'))/2;
|
|
if($d){
|
|
if($s>=$x && $s<=$d) return $str;
|
|
}else{
|
|
if($s>=$x) return $str;
|
|
}
|
|
}
|
|
//全局函数 $ts 特殊转换 | 0=特殊变量 1=num user az tel mail 2=字符限制小 3字符限制最大 4=1小写2大写 5=1编码 2编码
|
|
//$post=$myConn->getpost($_POST,"a|user,b|0|3|12|2|gbk|utf-8,c|0|0|0|2");
|
|
//当 a 为数组时不起作用 只能1级特殊转换
|
|
function getpost($str,$ts='',$key=''){
|
|
if(is_array($str)){
|
|
foreach($str as $key => $val){
|
|
$str[$key] = $this->getpost($val,$ts,$key);
|
|
}
|
|
}else{
|
|
$str=trim($str);
|
|
if($ts && $key){//解决 $key 二级数组问题
|
|
if(is_array($ts)){
|
|
$i=0;
|
|
foreach($ts as $keys => $vals){
|
|
if($i) $tss.=",";
|
|
$tss.=$keys."|".$vals;
|
|
$i++;
|
|
}
|
|
$ts=$tss;
|
|
}
|
|
$tsa=explode(",",$ts);
|
|
for($i=0;$i<count($tsa);$i++){
|
|
$tsb=explode("|",$tsa[$i]);
|
|
$ts_name=$tsb[0];//需要转换的特殊变量
|
|
if($key==$ts_name){
|
|
$ts_type=$tsb[1];//转换类型 num user az tel mail
|
|
$ts_small=$tsb[2];//最小字符限制
|
|
$ts_big=$tsb[3];//最大字符限制
|
|
$ts_size=$tsb[4];//大小写转换 1 小写 2大写
|
|
$ts_bma=$tsb[5];//编码转换 gbk
|
|
$ts_bmb=$tsb[6];//编码转换 utf-8
|
|
if($ts_bma && $ts_bmb){//编码转换
|
|
$str=iconv($ts_bma,$ts_bmb,$str);
|
|
}
|
|
if($ts_type=='num' || $ts_type==1){//判断是否数字
|
|
if(!preg_match('/^[0-9]+$/i',$str)) $str=0;
|
|
}elseif($ts_type=='user' || $ts_type==2){//用户名判断
|
|
if(!preg_match('/^[0-9a-z_-]+$/i',$str)) $str=0;
|
|
}elseif($ts_type=='tel' || $ts_type==3){//电话判断
|
|
if(!preg_match('/^[0-9+-]+$/i',$str)) $str=0;
|
|
}elseif($ts_type=='mail' || $ts_type==5){//邮箱判断
|
|
if(!preg_match("/^[a-z0-9\._-]{1,}@[a-z0-9-]{1,}\.[a-z\.]{1,}$/i",$str)) $str=0;
|
|
}elseif($ts_type=='az' || $ts_type==4){//字母过滤
|
|
if(!preg_match('/^[a-z]+$/i',$str)) $str=0;
|
|
}else{//文本过滤
|
|
$str=$this->getre($str);
|
|
}
|
|
if($ts_small){//字符限制
|
|
$str=$this->getxz($str,$ts_small,$ts_big);
|
|
}
|
|
if($ts_size==1){//大小写转换
|
|
$str=strtolower($str);
|
|
}elseif($ts_size==2){
|
|
$str=strtoupper($str);
|
|
}
|
|
}
|
|
}
|
|
}else{
|
|
$str=$this->getre($str);
|
|
}
|
|
}
|
|
return $str;
|
|
}
|
|
function getarray($str,$b='|'){//数组转换 $str 为数组 $b=| 为 $str="a|b|c";
|
|
if(is_array($str)){
|
|
$i=0;
|
|
$b=iconv('gbk','utf-8',$b);
|
|
foreach($str as $key=>$val){
|
|
if($i) $string.=$b;
|
|
$string.=$val;
|
|
$i++;
|
|
}
|
|
return $string;
|
|
}else{
|
|
return $str;
|
|
}
|
|
}
|
|
function getre($str){ //提交字符过滤
|
|
$str=str_replace(";", ";", $str);
|
|
$str=str_replace("<", "<", $str);
|
|
$str=str_replace(">", ">", $str);
|
|
$str=str_replace("\"", """, $str);
|
|
$str=str_replace("'", "′", $str);
|
|
$str=str_replace("\\", "", $str);
|
|
return $str;
|
|
}
|
|
function getbm($str,$ba="gbk",$bb="utf-8"){//编码转换
|
|
return iconv($ba,$bb,$str);
|
|
}
|
|
function getip(){ //IP
|
|
static $realip;
|
|
if (isset($_SERVER)){
|
|
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
|
|
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
|
|
}else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
|
|
$realip = $_SERVER["HTTP_CLIENT_IP"];
|
|
}else{
|
|
$realip = $_SERVER["REMOTE_ADDR"];
|
|
}
|
|
} else {
|
|
if(getenv("HTTP_X_FORWARDED_FOR")){
|
|
$realip = getenv("HTTP_X_FORWARDED_FOR");
|
|
}else if (getenv("HTTP_CLIENT_IP")) {
|
|
$realip = getenv("HTTP_CLIENT_IP");
|
|
}else{
|
|
$realip = getenv("REMOTE_ADDR");
|
|
}
|
|
}
|
|
return $realip;
|
|
}
|
|
function treat($original,$history){//当原数组的值为空,历史数据值填补原数组
|
|
foreach($original as $key=>$val){
|
|
if($val || $val=='0'){
|
|
$array[$key]=$val;
|
|
}else{
|
|
$array[$key]=$history[$key];
|
|
}
|
|
}
|
|
return $array;
|
|
}
|
|
function randmm($len){//随机数产生
|
|
$srcstr="0123456789";
|
|
mt_srand();
|
|
$strs="";
|
|
for($i=0;$i<$len;$i++){
|
|
$strs.=$srcstr[mt_rand(0,9)];
|
|
}
|
|
return $strs;
|
|
}
|
|
function randhz($len,$size=0){ //随机混杂生产
|
|
$srcstr="abcdefghijklmnopqrstuvwxyz0123456789";
|
|
mt_srand();
|
|
$strs="";
|
|
for($i=0;$i<$len;$i++){
|
|
$strs.=$srcstr[mt_rand(0,35)];
|
|
}
|
|
if($size){
|
|
return strtoupper($strs);
|
|
}else{
|
|
return $strs;
|
|
}
|
|
}
|
|
function fileHz($a){//获取文件后缀
|
|
$c=strrchr($a,'.');
|
|
if($c){
|
|
return strtolower($c);//转换小写
|
|
}else{
|
|
return '';
|
|
}
|
|
}
|
|
function createFolder($path) {//创建多级文件夹
|
|
if (!file_exists($path)) {
|
|
$this->createFolder(dirname($path));
|
|
mkdir($path, 0777);
|
|
}
|
|
}
|
|
function filesize($size,$s=2,$h=0){
|
|
if($h) $size=$size*$h;
|
|
if($size<=1024) {
|
|
return $size.'B';
|
|
}elseif($size<=(1024*1024)){
|
|
$size=$size/1024;
|
|
return number_format($size,$s).'KB';
|
|
}elseif($size<=(1024*1024*1024)){
|
|
$size=$size/1024/1024;
|
|
return number_format($size,$s).'MB';
|
|
}else{
|
|
$size=$size/1024/1024/1024;
|
|
return number_format($size,$s).'GB';
|
|
}
|
|
}
|
|
function array_sort($arr,$keys,$type='desc'){ //二维数组重新排序
|
|
$keysvalue = $new_array = array();
|
|
foreach ($arr as $k=>$v){
|
|
$keysvalue[$k] = $v[$keys];
|
|
}
|
|
if($type == 'asc'){
|
|
asort($keysvalue);
|
|
}else{
|
|
arsort($keysvalue);
|
|
}
|
|
reset($keysvalue);
|
|
$i=0;
|
|
foreach ($keysvalue as $k=>$v){
|
|
$new_array[$i++] = $arr[$k];
|
|
}
|
|
return $new_array;
|
|
}
|
|
function is_utf8($word){//判断是否UTF8编码文件
|
|
if(preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$word) == true){
|
|
return 'utf-8';
|
|
}else{
|
|
return 'gb2312';
|
|
}
|
|
}
|
|
|
|
function file_get_nr($url){
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($ch, CURLOPT_HEADER, 0);
|
|
return curl_exec($ch);
|
|
curl_close($ch);
|
|
}
|
|
function link_so(){
|
|
$flag = 0;
|
|
$tmp = $_SERVER['HTTP_USER_AGENT'];
|
|
if(strpos($tmp, 'Googlebot') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'Baiduspider') >0){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'Yahoo! Slurp') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'msnbot') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'Sosospider') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'YodaoBot') !== false || strpos($tmp, 'OutfoxBot') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'Sogou web spider') !== false || strpos($tmp, 'Sogou Orion spider') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'fast-webcrawler') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'Gaisbot') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'ia_archiver') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'altavista') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'lycos_spider') !== false){
|
|
$flag = 1;
|
|
} else if(strpos($tmp, 'Inktomi slurp') !== false){
|
|
$flag = 1;
|
|
}
|
|
return $flag;
|
|
}
|
|
|
|
|
|
function close(){
|
|
return sqlsrv_close($this->link);
|
|
}
|
|
function __destruct(){
|
|
}
|
|
}
|
|
?>
|