云锁报毒,请各位大牛看看

w395779724 2019-06-25 02:19:09
代码如下
<?php

header("Content-type:text/html;charset=utf-8");


/**
* @param $dir string 目录路径
* @return bool
*/
function mkd($dir) {
return is_dir($dir) or mkd(dirname($dir)) and mkdir($dir, 0777);
}
/**
+-----------------------------------------------------------------------------------------
* 删除目录及目录下所有文件或删除指定文件
+-----------------------------------------------------------------------------------------
* @param str $path 待删除目录路径
* @param int $delDir 是否删除目录,1或true删除目录,0或false则只删除文件保留目录(包含子目录)
+-----------------------------------------------------------------------------------------
* @return bool 返回删除状态
+-----------------------------------------------------------------------------------------
*/
function delDirAndFile($path, $delDir = FALSE) {
if (is_array($path)) {
foreach ($path as $subPath)
delDirAndFile($subPath, $delDir);
}
if (is_dir($path)) {
$handle = opendir($path);
if ($handle) {
while (false !== ( $item = readdir($handle) )) {
if ($item != "." && $item != "..")
is_dir("$path/$item") ? delDirAndFile("$path/$item", $delDir) : unlink("$path/$item");
}
closedir($handle);
if ($delDir)
return rmdir($path);
}
} else {
if (file_exists($path)) {
return unlink($path);
} else {
return FALSE;
}
}
clearstatcache();
}

function getFile($url, $save_dir = '', $filename = '', $type = 1) {
if (trim($url) == '') {
return false;
}
if (trim($save_dir) == '') {
$save_dir = './';
}
if (0 !== strrpos($save_dir, '/')) {
$save_dir.= '/';
}
//创建保存目录
if (!file_exists($save_dir) && !mkdir($save_dir, 0777, true)) {
return false;
}
//获取远程文件所采用的方法
if ($type) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$content = curl_exec($ch);
curl_close($ch);
} else {
ob_start();
readfile($url);
$content = ob_get_contents();
ob_end_clean();
}
$size = strlen($content);
//文件大小
$fp2 = @fopen($save_dir . $filename, 'a');
fwrite($fp2, $content);
fclose($fp2);
unset($content, $url);
return array(
'file_name' => $filename,
'save_path' => $save_dir . $filename
);
}



function checkauth(){
}
/**
* @param $path string 文件路径 删除指定文件或者文件夹
*/
function delete($path){
if(is_file($path)){
file_exists($path) && unlink($path);
}elseif(is_dir($path)){
$list = scandir($path);
array_shift($list);
array_shift($list);
foreach ($list as $k => $v){
delete(rtrim($path,'/') . '/' . $v);
}
rmdir($path);
}
}


//加密函数
function encrypt($data, $k = null)
{
$key = $k ? $k : C('OWN_KEY');
$str = '';
$char = '';
$key = md5($key);
$x = 0;
$len = strlen($data);
$l = strlen($key);
for ($i = 0; $i < $len; $i++) {
if ($x == $l) {
$x = 0;
}
$char .= $key{$x};
$x++;
}
for ($i = 0; $i < $len; $i++) {
$str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
}
return base64_encode($str);
}
//解密函数
function decrypt($data, $k = null)
{
$key = $k ? $k : C('OWN_KEY');
$str = '';
$char = '';
$key = md5($key);
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
for ($i = 0; $i < $len; $i++) {
if ($x == $l) {
$x = 0;
}
$char .= substr($key, $x, 1);
$x++;
}
for ($i = 0; $i < $len; $i++) {
if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
} else {
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
}
}
return $str;
}

//自定义token
function getToken()
{
$token = md5(uniqid(rand(), true));
session('token', $token);
return $token;
}

//判断token
function checkToken($token)
{
$t = session('token');
session('token', null);
return $token == $t ? true : false;
}

//传递数据以易于阅读的样式格式化后输出
function p($data)
{
// 定义样式
$str = '<pre style="display: block;padding: 9.5px;margin: 44px 0 0 0;font-size: 13px;line-height: 1.42857;color: #333;word-break: break-all;word-wrap: break-word;background-color: #F5F5F5;border: 1px solid #CCC;border-radius: 4px;">';
// 如果是boolean或者null直接显示文字;否则print
if (is_bool($data)) {
$show_data = $data ? 'true' : 'false';
} elseif (is_null($data)) {
$show_data = 'null';
} else {
$show_data = print_r($data, true);
}
$str .= $show_data;
$str .= '</pre>';
echo $str;
}

/**
* 返回文件格式
* @param string $str 文件名
* @return string 文件格式
*/
function file_format($str)
{
// 取文件后缀名
$str = strtolower(pathinfo($str, PATHINFO_EXTENSION));
// 图片格式
$image = array('webp', 'jpg', 'png', 'ico', 'bmp', 'gif', 'tif', 'pcx', 'tga', 'bmp', 'pxc', 'tiff', 'jpeg', 'exif', 'fpx', 'svg', 'psd', 'cdr', 'pcd', 'dxf', 'ufo', 'eps', 'ai', 'hdri');
// 视频格式
$video = array('mp4', 'avi', '3gp', 'rmvb', 'gif', 'wmv', 'mkv', 'mpg', 'vob', 'mov', 'flv', 'swf', 'mp3', 'ape', 'wma', 'aac', 'mmf', 'amr', 'm4a', 'm4r', 'ogg', 'wav', 'wavpack');
// 压缩格式
$zip = array('rar', 'zip', 'tar', 'cab', 'uue', 'jar', 'iso', 'z', '7-zip', 'ace', 'lzh', 'arj', 'gzip', 'bz2', 'tz');
// 文档格式
$text = array('exe', 'doc', 'ppt', 'xls', 'wps', 'txt', 'lrc', 'wfs', 'torrent', 'html', 'htm', 'java', 'js', 'css', 'less', 'php', 'pdf', 'pps', 'host', 'box', 'docx', 'word', 'perfect', 'dot', 'dsf', 'efe', 'ini', 'json', 'lnk', 'log', 'msi', 'ost', 'pcs', 'tmp', 'xlsb');
// 匹配不同的结果
switch ($str) {
case in_array($str, $image):
return 'image';
break;
case in_array($str, $video):
return 'video';
break;
case in_array($str, $zip):
return 'zip';
break;
case in_array($str, $text):
return 'text';
break;
default:
return 'image';
break;
}
}

/**
* 发送友盟推送消息
* @param integer $uid 用户id
* @param string $title 推送的标题
* @return boolear 是否成功
*/
function umeng_push($uid, $title)
{
// 获取token
$device_tokens = D('OauthUser')->getToken($uid, 2);
// 如果没有token说明移动端没有登录;则不发送通知
if (empty($device_tokens)) {
return false;
}
// 导入友盟
Vendor('Umeng.Umeng');
// 自定义字段 根据实际环境分配;如果不用可以忽略
$status = 1;
// 消息未读总数统计 根据实际环境获取未读的消息总数 此数量会显示在app图标右上角
$count_number = 1;
$data = array(
'key' => 'status',
'value' => "$status",
'count_number' => $count_number
);
// 判断device_token 64位表示为苹果 否则为安卓
if (strlen($device_tokens) == 64) {
$key = C('UMENG_IOS_APP_KEY');
$timestamp = C('UMENG_IOS_SECRET');
$umeng = new \Umeng($key, $timestamp);
$umeng->sendIOSUnicast($data, $title, $device_tokens);
} else {
$key = C('UMENG_ANDROID_APP_KEY');
$timestamp = C('UMENG_ANDROID_SECRET');
$umeng = new \Umeng($key, $timestamp);
$umeng->sendAndroidUnicast($data, $title, $device_tokens);
}
return true;
}


/**
* 返回用户id
* @return integer 用户id
*/
function get_uid()
{
return $_SESSION['user']['id'];
}


/**
* 字符串截取,支持中文和其他编码
* @param string $str 需要转换的字符串
* @param string $start 开始位置
* @param string $length 截取长度
* @param string $suffix 截断显示字符
* @param string $charset 编码格式
* @return string
*/
function re_substr($str, $start = 0, $length, $suffix = true, $charset = "utf-8")
{
if (function_exists("mb_substr"))
$slice = mb_substr($str, $start, $length, $charset);
elseif (function_exists('iconv_substr')) {
$slice = iconv_substr($str, $start, $length, $charset);
} else {
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);
$slice = join("", array_slice($match[0], $start, $length));
}
$omit = mb_strlen($str) >= $length ? '...' : '';
return $suffix ? $slice . $omit : $slice;
}

/**
* 取得根域名
* @param type $domain 域名
* @return string 返回根域名
*/
function get_url_to_domain($domain)
{
$re_domain = '';
$domain_postfix_cn_array = array("com", "net", "org", "gov", "edu", "com.cn", "cn");
$array_domain = explode(".", $domain);
$array_num = count($array_domain) - 1;
if ($array_domain[$array_num] == 'cn') {
if (in_array($array_domain[$array_num - 1], $domain_postfix_cn_array)) {
$re_domain = $array_domain[$array_num - 2] . "." . $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
} else {
$re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
}
} else {
$re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
}
return $re_domain;
}

/**
* 按符号截取字符串的指定部分
* @param string $str 需要截取的字符串
* @param string $sign 需要截取的符号
* @param int $number 如是正数以0为起点从左向右截 负数则从右向左截
* @return string 返回截取的内容
*/
/* 示例
$str='123/456/789';
cut_str($str,'/',0); 返回 123
cut_str($str,'/',-1); 返回 789
cut_str($str,'/',-2); 返回 456
具体参考 http://www.baijunyao.com/index.php/Ho
...全文
104 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
w395779724 2019-06-25
  • 打赏
  • 举报
回复
 header('Cache-Control: max-age=1');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.0
$objwriter = PHPExcel_IOFactory::createWriter($phpexcel, 'Excel5');
$objwriter->save('php://output');
exit;
}

/**
* 数据转csv格式的excle
* @param array $data 需要转的数组
* @param string $header 要生成的excel表头
* @param string $filename 生成的excel文件名
* 示例数组:
* $data = array(
* '1,2,3,4,5',
* '6,7,8,9,0',
* '1,3,5,6,7'
* );
* $header='用户名,密码,头像,性别,手机号';
*/
function create_csv($data, $header = null, $filename = 'simple.csv')
{
// 如果手动设置表头;则放在第一行
if (!is_null($header)) {
array_unshift($data, $header);
}
// 防止没有添加文件后缀
$filename = str_replace('.csv', '', $filename) . '.csv';
ob_clean();
Header("Content-type: application/octet-stream ");
Header("Accept-Ranges: bytes ");
Header("Content-Disposition: attachment; filename=" . $filename);
foreach ($data as $k => $v) {
// 如果是二维数组;转成一维
if (is_array($v)) {
$v = implode(',', $v);
}
// 替换掉换行
$v = preg_replace('/\s*/', '', $v);
// 解决导出的数字会显示成科学计数法的问题
$v = str_replace(',', "\t,", $v);
// 转成gbk以兼容office乱码的问题
echo iconv('UTF-8', 'GBK', $v) . "\t\r\n";
}
}

/**
* 导入excel文件
* @param string $file excel文件路径
* @return array excel文件内容数组
*/
function import_excel($file)
{
// 判断文件是什么格式
$type = pathinfo($file);
$type = strtolower($type["extension"]);
if ($type == 'xlsx') {
$type = 'Excel2007';
} elseif ($type == 'xls') {
$type = 'Excel5';
}
ini_set('max_execution_time', '0');
Vendor('PHPExcel.PHPExcel');
// 判断使用哪种格式
$objReader = PHPExcel_IOFactory::createReader($type);
$objPHPExcel = $objReader->load($file);
$sheet = $objPHPExcel->getSheet(0);
// 取得总行数
$highestRow = $sheet->getHighestRow();
// 取得总列数
$highestColumn = $sheet->getHighestColumn();
//总列数转换成数字
$numHighestColum = PHPExcel_Cell::columnIndexFromString("$highestColumn");
//循环读取excel文件,读取一条,插入一条
$data = array();
//从第一行开始读取数据
for ($j = 1; $j <= $highestRow; $j++) {
//从A列读取数据
for ($k = 0; $k <= $numHighestColum; $k++) {
//数字列转换成字母
$columnIndex = PHPExcel_Cell::stringFromColumnIndex($k);
// 读取单元格
$data[$j][] = $objPHPExcel->getActiveSheet()->getCell("$columnIndex$j")->getValue();
}
}
return $data;
}

/**
* 跳向支付宝付款
* @param array $order 订单数据 必须包含 out_trade_no(订单号)、price(订单金额)、subject(商品名称标题)
*/

/**
* 微信扫码支付
* @param array $order 订单 必须包含支付所需要的参数 body(产品描述)、total_fee(订单金额)、out_trade_no(订单号)、product_id(产品id)
*/
function weixinpay($order)
{
$order['trade_type'] = 'NATIVE';
Vendor('Weixinpay.Weixinpay');
$weixinpay = new \Weixinpay();
$weixinpay->pay($order);
}


/**

获取网站配置

*/
function get_config(){
$data = M('Config')->select();
$config = array();
if($data && is_array($data)){
foreach ($data as $value) {
$config[$value['name']] =$value['value'];
}
}
return $config;
}
/**
* 检测用户是否登录
* @return integer 0-未登录,大于0-当前登录用户ID
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
function is_login(){
$user = session('user_auth');
if (empty($user)) {
//校验cookie

$uid=cookie('userid');
$psd=cookie('password');
$username=cookie('username');
if(empty($uid)){
return 0;

}else{
//校验cookie是否被篡改
$userinfo=M('member')->where(['id'=>$uid,'username'=>$username])->find();
if($userinfo){
if(md5($userinfo['password'])==$psd){
$userinfo['uid']=$userinfo['id'];
unset($userinfo['password']);
session('user_auth', $userinfo);
session('user_auth_sign', data_auth_sign($userinfo));
return $uid;
}else{
return 0;
}
}else{
return 0;
}
}
} else {

return session('user_auth_sign') == data_auth_sign($user) ? $user['uid'] : 0;
}
}
/**
* 数据签名认证
* @param array $data 被认证的数据
* @return string 签名
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
function data_auth_sign($data) {
//数据类型检测
if(!is_array($data)){
$data = (array)$data;
}
ksort($data); //排序
$code = http_build_query($data); //url编码并生成query字符串
$sign = sha1($code); //生成签名
return $sign;
}

//消息模版
function msg($info,$status='0',$name = '',$url=''){
$arr=array('info'=>$info,'status'=>$status,'name'=>$name,'url'=>$url);
echo json_encode($arr);
exit();
}
//获取用户vip剩余时间单位小时
function getviptime($uid=''){
if(!$uid){
$uid = session('user_auth.uid');
}
$userinfo=M('member')->getById($uid);
if($userinfo['isvip_status']==0){
$vip=0;
}else{
$sytime = $userinfo['viptime']-time();
if($sytime>0){
$vip=round($sytime/3600,2);
}else{
$vip=0;
M('member')->where("id={$uid}")->setField('vip_status',0);
}
}
return $vip;
}

//处理用户自动注册逻辑
function userautoreg(){
$ip = get_client_ip();
//获取用户设备信息
$user_agent=md5($_SERVER['HTTP_USER_AGENT'].$ip);
$userinfo=M('member')->getByUseragent($user_agent);
if($userinfo){
$userinfo['uid']=$userinfo['id'];
cookie('userid',$userinfo['id'],92000000);
cookie('password',md5($userinfo['password']),92000000);
cookie('username',$userinfo['username'],92000000);
session('user_auth', $userinfo);
session('user_auth_sign', data_auth_sign($userinfo));
}else{
//生成用户
$adduser=array();
$adduser['username']=get_rand_username();
$adduser['password']=generate_rand_str(6,3);
$adduser['useragent']=$user_agent;
$adduser['pid']=0;
$adduser['register_time']=time();
$adduser['register_ip']=$ip;
$adduser['login_ip']=$ip;
$adduser['last_time']=time();
$adduser['type']=0;
$nn=rand(1, 10);
$adduser['headimage']="/Themes/Home/default/Public/images/headimage/".$nn.".jpg";
$u=M('member')->add($adduser);
$adduser['uid']=$u;
cookie('userid',$adduser['uid'],92000000);
cookie('password',md5($adduser['password']),92000000);
cookie('username',$adduser['username'],9200000);
session('user_auth', $adduser);
session('user_auth_sign', data_auth_sign($adduser));
$pid=cookie('pid');
if($pid){
$pidinfo=M('member')->getById($pid);
if($pidinfo){
$add['pid']=$pid;
$add['id']=$u;
$add['path_id']=$pidinfo['path_id'].$u.',';
M('member')->save($add);
}else{
$add['pid']=0;
$add['id']=$u;
$add['path_id']='0,'.$u.',';
M('member')->save($add);
}
}else{
$add['pid']=0;
$add['id']=$u;
$add['path_id']='0,'.$u.',';
M('member')->save($add);
}

}


}

//获取随机username
function get_rand_username(){
do{
$rand=generate_rand_str(6,1);
$data=M('member')->getByUsername($rand);
}while($data);
return $rand;
}


/**
* 调用新浪接口将长链接转为短链接
* @param string $source 申请应用的AppKey
* @param array|string $url_long 长链接,支持多个转换(需要先执行urlencode)
* @return array
*/
function getSinaShortUrl($source, $url_long){

// 参数检查
if(empty($source) || !$url_long){
return false;
}

// 参数处理,字符串转为数组
if(!is_array($url_long)){
$url_long = array($url_long);
}

// 拼接url_long参数请求格式
$url_param = array_map(function($value){
return '&url_long='.urlencode($value);
}, $url_long);

$url_param = implode('', $url_param);

// 新浪生成短链接接口
$api = 'http://api.t.sina.com.cn/short_url/shorten.json';

// 请求url
$request_url = sprintf($api.'?source=%s%s', $source, $url_param);

$result = array();

// 执行请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $request_url);
$data = curl_exec($ch);
if($error=curl_errno($ch)){
return false;
}
curl_close($ch);

$result = json_decode($data, true);

return $result;

}

if (!function_exists('generate_rand_str')) {
/**
* 生成随机字符串
* @param int $length 生成长度
* @param int $type 生成类型:0-小写字母+数字,1-小写字母,2-大写字母,3-数字,4-小写+大写字母,5-小写+大写+数字
* @author QQ155122361
* @return string
*/
function generate_rand_str($length = 8, $type = 0) {
$a = 'abcdefghijklmnopqrstuvwxyz';
$A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$n = '0123456789';
switch ($type) {
case 1: $chars = $a; break;
case 2: $chars = $A; break;
case 3: $chars = $n; break;
case 4: $chars = $a.$A; break;
case 5: $chars = $a.$A.$n; break;
default: $chars = $a.$n;
}
$str = '';
for ($i = 0; $i < $length; $i++) {
$str .= $chars[ mt_rand(0, strlen($chars) - 1) ];
}
return $str;
}
}


w395779724 2019-06-25
  • 打赏
  • 举报
回复
function cut_str($str, $sign, $number)
{
$array = explode($sign, $str);
$length = count($array);
if ($number < 0) {
$new_array = array_reverse($array);
$abs_number = abs($number);
if ($abs_number > $length) {
return 'error';
} else {
return $new_array[$abs_number - 1];
}
} else {
if ($number >= $length) {
return 'error';
} else {
return $array[$number];
}
}
}

/**
* 获取一定范围内的随机数字
* 跟rand()函数的区别是 位数不足补零 例如
* rand(1,9999)可能会得到 465
* rand_number(1,9999)可能会得到 0465 保证是4位的
* @param integer $min 最小值
* @param integer $max 最大值
* @return string
*/
function rand_number($min = 1, $max = 9999)
{
return sprintf("%0" . strlen($max) . "d", mt_rand($min, $max));
}

/**
* 生成不重复的随机数
* @param int $start 需要生成的数字开始范围
* @param int $end 结束范围
* @param int $length 需要生成的随机数个数
* @return array 生成的随机数
*/
function get_rand_number($start = 1, $end = 10, $length = 4)
{
$connt = 0;
$temp = array();
while ($connt < $length) {
$temp[] = rand($start, $end);
$data = array_unique($temp);
$connt = count($data);
}
sort($data);
return $data;
}
/**
* 使用curl获取远程数据
* @param string $url url连接
* @return string 获取到的数据
*/
function curl_get_contents($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); //设置访问的url地址
// curl_setopt($ch,CURLOPT_HEADER,1); //是否显示头部信息
curl_setopt($ch, CURLOPT_TIMEOUT, 5); //设置超时
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //用户访问代理 User-Agent
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_HOST']); //设置 referer
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //跟踪301
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回结果
$r = curl_exec($ch);
curl_close($ch);
return $r;
}


/**
* 将路径转换加密
* @param string $file_path 路径
* @return string 转换后的路径
*/
function path_encode($file_path)
{
return rawurlencode(base64_encode($file_path));
}

/**
* 将路径解密
* @param string $file_path 加密后的字符串
* @return string 解密后的路径
*/
function path_decode($file_path)
{
return base64_decode(rawurldecode($file_path));
}

/**
* 根据文件后缀的不同返回不同的结果
* @param string $str 需要判断的文件名或者文件的id
* @return integer 1:图片 2:视频 3:压缩文件 4:文档 5:其他
*/
function file_category($str)
{
// 取文件后缀名
$str = strtolower(pathinfo($str, PATHINFO_EXTENSION));
// 图片格式
$images = array('webp', 'jpg', 'png', 'ico', 'bmp', 'gif', 'tif', 'pcx', 'tga', 'bmp', 'pxc', 'tiff', 'jpeg', 'exif', 'fpx', 'svg', 'psd', 'cdr', 'pcd', 'dxf', 'ufo', 'eps', 'ai', 'hdri');
// 视频格式
$video = array('mp4', 'avi', '3gp', 'rmvb', 'gif', 'wmv', 'mkv', 'mpg', 'vob', 'mov', 'flv', 'swf', 'mp3', 'ape', 'wma', 'aac', 'mmf', 'amr', 'm4a', 'm4r', 'ogg', 'wav', 'wavpack');
// 压缩格式
$zip = array('rar', 'zip', 'tar', 'cab', 'uue', 'jar', 'iso', 'z', '7-zip', 'ace', 'lzh', 'arj', 'gzip', 'bz2', 'tz');
// 文档格式
$document = array('exe', 'doc', 'ppt', 'xls', 'wps', 'txt', 'lrc', 'wfs', 'torrent', 'html', 'htm', 'java', 'js', 'css', 'less', 'php', 'pdf', 'pps', 'host', 'box', 'docx', 'word', 'perfect', 'dot', 'dsf', 'efe', 'ini', 'json', 'lnk', 'log', 'msi', 'ost', 'pcs', 'tmp', 'xlsb');
// 匹配不同的结果
switch ($str) {
case in_array($str, $images):
return 1;
break;
case in_array($str, $video):
return 2;
break;
case in_array($str, $zip):
return 3;
break;
case in_array($str, $document):
return 4;
break;
default:
return 5;
break;
}
}

/**
* 生成缩略图
* @param string $image_path 原图path
* @param integer $width 缩略图的宽
* @param integer $height 缩略图的高
* @return string 缩略图path
*/

/**
* 上传文件类型控制 此方法仅限ajax上传使用
* @param string $path 字符串 保存文件路径示例: /Upload/image/
* @param string $format 文件格式限制
* @param integer $maxSize 允许的上传文件最大值 52428800
* @return booler 返回ajax的json格式数据
*/
function ajax_upload($path = 'file', $format = 'empty', $maxSize = '52428800')
{
ini_set('max_execution_time', '0');
// 去除两边的/
$path = trim($path, '/');
// 添加Upload根目录
$path = strtolower(substr($path, 0, 6)) === 'upload' ? ucfirst($path) : 'Upload/' . $path;
// 上传文件类型控制
$ext_arr = array(
'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'),
'photo' => array('jpg', 'jpeg', 'png'),
'flash' => array('swf', 'flv'),
'media' => array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),
'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2', 'pdf')
);
if (!empty($_FILES)) {
// 上传文件配置
$config = array(
'maxSize' => $maxSize, // 上传文件最大为50M
'rootPath' => './', // 文件上传保存的根路径
'savePath' => './' . $path . '/', // 文件上传的保存路径(相对于根路径)
'saveName' => array('uniqid', ''), // 上传文件的保存规则,支持数组和字符串方式定义
'autoSub' => true, // 自动使用子目录保存上传文件 默认为true
'exts' => isset($ext_arr[$format]) ? $ext_arr[$format] : '',
);
// p($_FILES);
// 实例化上传
$upload = new \Think\Upload($config);
// 调用上传方法
$info = $upload->upload();
// p($info);
$data = array();
if (!$info) {
// 返回错误信息
$error = $upload->getError();
$data['error_info'] = $error;
echo json_encode($data);
} else {
// 返回成功信息
foreach ($info as $file) {
$data['name'] = trim($file['savepath'] . $file['savename'], '.');
// p($data);
echo json_encode($data);
}
}
}
}

/**
* 检测webuploader上传是否成功
* @param string $file_path post中的字段
* @return boolear 是否成功
*/
function upload_success($file_path)
{
// 为兼容传进来的有数组;先转成json
$file_path = json_encode($file_path);
// 如果有undefined说明上传失败
if (strpos($file_path, 'undefined') !== false) {
return false;
}
// 如果没有.符号说明上传失败
if (strpos($file_path, '.') === false) {
return false;
}
// 否则上传成功则返回true
return true;
}


/**
* 把用户输入的文本转义(主要针对特殊符号和emoji表情)
*/
function emoji_encode($str)
{
if (!is_string($str)) return $str;
if (!$str || $str == 'undefined') return '';

$text = json_encode($str); //暴露出unicode
$text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i", function ($str) {
return addslashes($str[0]);
}, $text); //将emoji的unicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。
return json_decode($text);
}

/**
* 检测是否是手机访问
*/
function is_mobile()
{
$useragent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
$useragent_commentsblock = preg_match('|\(.*?\)|', $useragent, $matches) > 0 ? $matches[0] : '';
function _is_mobile($substrs, $text)
{
foreach ($substrs as $substr)
if (false !== strpos($text, $substr)) {
return true;
}
return false;
}

$mobile_os_list = array('Google Wireless Transcoder', 'Windows CE', 'WindowsCE', 'Symbian', 'Android', 'armv6l', 'armv5', 'Mobile', 'CentOS', 'mowser', 'AvantGo', 'Opera Mobi', 'J2ME/MIDP', 'Smartphone', 'Go.Web', 'Palm', 'iPAQ');
$mobile_token_list = array('Profile/MIDP', 'Configuration/CLDC-', '160×160', '176×220', '240×240', '240×320', '320×240', 'UP.Browser', 'UP.Link', 'SymbianOS', 'PalmOS', 'PocketPC', 'SonyEricsson', 'Nokia', 'BlackBerry', 'Vodafone', 'BenQ', 'Novarra-Vision', 'Iris', 'NetFront', 'HTC_', 'Xda_', 'SAMSUNG-SGH', 'Wapaka', 'DoCoMo', 'iPhone', 'iPod');

$found_mobile = _is_mobile($mobile_os_list, $useragent_commentsblock) ||
_is_mobile($mobile_token_list, $useragent);
if ($found_mobile) {
return true;
} else {
return false;
}
}

/**
* 获取当前访问的设备类型
* @return integer 1:其他 2:iOS 3:Android
*/
function get_device_type()
{
//全部变成小写字母
$agent = strtolower($_SERVER['HTTP_USER_AGENT']);
$type = 1;
//分别进行判断
if (strpos($agent, 'iphone') !== false || strpos($agent, 'ipad') !== false) {
$type = 2;
}
if (strpos($agent, 'android') !== false) {
$type = 3;
}
return $type;
}

/**
* 生成二维码
* @param string $url url连接
* @param integer $size 尺寸 纯数字
*/
function qrcode($url, $size = 4)
{
Vendor('Phpqrcode.phpqrcode');
QRcode::png($url, false, QR_ECLEVEL_L, $size, 2, false, 0xFFFFFF, 0x000000);
}

/**
* 数组转xls格式的excel文件
* @param array $data 需要生成excel文件的数组
* @param string $filename 生成的excel文件名
* 示例数据:
* $data = array(
* array(NULL, 2010, 2011, 2012),
* array('Q1', 12, 15, 21),
* array('Q2', 56, 73, 86),
* array('Q3', 52, 61, 69),
* array('Q4', 30, 32, 0),
* );
*/
function create_xls($data, $filename = 'simple.xls')
{
ini_set('max_execution_time', '0');
Vendor('PHPExcel.PHPExcel');
$filename = str_replace('.xls', '', $filename) . '.xls';
$phpexcel = new PHPExcel();
$phpexcel->getProperties()
->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
$phpexcel->getActiveSheet()->fromArray($data);
$phpexcel->getActiveSheet()->setTitle('Sheet1');
$phpexcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=$filename");
header('Cache-Control: max-age=0');
header('Cach

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧