📖 File Reader
<?php
declare (strict_types = 1);
namespace app;
use app\api\common\Common_user;
use think\App;
use think\exception\ValidateException;
use think\Validate;
use think\Facade\Db;
use think\facade\Config;
use think\facade\View;
use think\Image;
/**
* 控制器基础类
*/
abstract class BaseController
{
use \liliuwei\think\Jump;
/**
* Request实例
* @var \think\Request
*/
protected $request;
/**
* 应用实例
* @var \think\App
*/
protected $app;
/**
* 是否批量验证
* @var bool
*/
protected $batchValidate = false;
/**
* 控制器中间件
* @var array
*/
protected $middleware = [];
/**
* 构造方法
* @access public
* @param App $app 应用对象
*/
public function __construct(App $app)
{
$this->app = $app;
$this->request = $this->app->request;
// 控制器初始化
$this->initialize();
}
// 初始化
protected function initialize()
{
}
/**
* 验证数据
* @access protected
* @param array $data 数据
* @param string|array $validate 验证器名或者验证规则数组
* @param array $message 提示信息
* @param bool $batch 是否批量验证
* @return array|string|true
* @throws ValidateException
*/
protected function validate(array $data, $validate, array $message = [], bool $batch = false)
{
if (is_array($validate)) {
$v = new Validate();
$v->rule($validate);
} else {
if (strpos($validate, '.')) {
// 支持场景
[$validate, $scene] = explode('.', $validate);
}
$class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
$v = new $class();
if (!empty($scene)) {
$v->scene($scene);
}
}
$v->message($message);
// 是否批量验证
if ($batch || $this->batchValidate) {
$v->batch(true);
}
return $v->failException(true)->check($data);
}
/*返回数据*/
public function tips($arr)
{
header("Content-Type:text/html; charset=utf-8");
print_r(json_encode($arr));
}
/**
* 返回数据成功
* @param $msg 描述
* @param $data 数据展示
* @param $code 返回码
*/
public function succeed_json($msg,$data=[],$code=200)
{
$arr["code"] = $code;
$arr["msg"] = $msg;
$arr["data"] = $data;
print_r(json_encode($arr));
}
/**
* 返回数据失败
* @param $msg 描述
* @param $code 返回码
*/
public function error_json($msg,$code=400)
{
$arr["code"] = $code;
$arr["msg"] = $msg;
print_r(json_encode($arr));
}
/**
* layui 表格数据返回
* @param $count 表格总数量
* @param $data 列表数据
* @param $msg 描述
* @param $code 返回码
*/
public function layui_json($count= 0,$data=[],$msg='ok',$code=200)
{
$arr["code"] = $code;
$arr["msg"] = $msg;
$arr["count"] = $count;
$arr["data"] = $data;
print_r(json_encode($arr));
}
/**
* 记录创建
* @param $describe 记录描述
* @param $type 记录类型
* @param $user_id 会员id
* @param $money 会员余额
* @param $integral 会员积分
* @param $freeze_money 冻结余额
*/
public function record_log($describe,$type,$user_id,$money,$integral,$freeze_money=0)
{
$user_info = db::name("user")->where("user_id = $user_id")->field("money,integral,freeze_money")->find();
//会员金额处理
$info = [
'money'=> $user_info["money"] + $money,
'integral'=> $user_info["integral"] + $integral,
'freeze_money'=>$user_info["freeze_money"] + $freeze_money,
];
/*账户余额检测*/
$user_money = Common_user::user_money($user_id);//会员可用余额
$user_money = $user_money + $money;
$data_error = [];
if ($user_money < 0){$data_error = ['code'=>400,'msg'=>'余额不足'];}
if ($info["integral"] < 0){$data_error = ['code'=>400,'msg'=>'积分不足'];}
if ($info["freeze_money"] < 0){$data_error = ['code'=>400,'msg'=>'冻结余额不足'];}
if (!empty($data_error)){
print_r(json_encode($data_error));
exit;
}
db::name("user")->where("user_id = $user_id")->data($info)->update();
//创建记录
$info2 = [
'user_id'=>$user_id,
'money'=>$money,
'integral'=>$integral,
'freeze_money'=>$freeze_money,
'describe'=>$describe,
'type'=>$type,
'add_time'=>time(),
];
db::name("record_log")->insertGetId($info2);
return 1;
}
/**
* 创建会员级别变动记录
* @param $user_id 会员id
* @param $rank_id 级别id
* @param $primitive_rank_id 原始级别id
*/
public function user_rank_upgrade_log($user_id,$rank_id,$primitive_rank_id)
{
$info = [
'user_id'=>$user_id,
'rank_id'=>$rank_id,
'primitive_rank_id'=>$primitive_rank_id,
'add_time'=>time(),
];
db::name("user_rank_upgrade_log")->insertGetId($info);
return 'ok';
}
/**
* vue分页手写
* @param $count 数量
* @param $limit 每页页数
* @param $page 分页页数
*/
public function vue_page($count,$limit,$page)
{
$page_gong1 = $count / $limit;
$page_gong = intval($page_gong1);//共几页
if ($page_gong1 > $page_gong){
$page_gong += 1;
}
$data["page_home"] = 1;//首页
$data["page_s"] = $page -1;
$data["page"] = $page;
$data["page_x"] = $page +1;
$data["page_weiye"] = $page_gong;//尾页
$data["limit"] = $limit;
return $data;
}
/**
* 获取总页数
* @param $count 总数量
* @param $limit 每页行数
*/
public function vue_pages($count,$limit)
{
$page_gong1 = $count / $limit;
$page_gong = intval($page_gong1);//共几页
if ($page_gong1 > $page_gong){
$page_gong += 1;
}
return $page_gong;
}
/**
* 后台操作日志
* @param int $admin_id 管理员id
* @param string $describe 简单描述
* @param string $field_value 字段详细内容
*/
public function system_admin_log($admin_id=0,$describe='',$field_value='')
{
$request_data = json_encode(input("param."));
$ip = $this->get_client_ip();
//$getCity = $ip != ''?$this->getCityByIP($ip):'';
$getCity = '';
$info = [
'admin_id'=>$admin_id,
'ip'=>$this->get_client_ip(),
'request_url'=>$_SERVER['REQUEST_URI'],
'request_data'=>$request_data,
'describe'=>$describe,
'field_value'=>json_encode($field_value),
'time'=>date("Y-m-d H:i:s",time()),
'time_add'=>time(),
];
if (!empty($getCity)){
$info["address"] = $getCity["country"].','.$getCity["regionName"].','.$getCity["city"];
}
db::name("system_admin_log")->insertGetId($info);
return 'ok';
}
/*获得当前ip*/
private function get_client_ip() {
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
}
/*根据ip获取地址名称*/
private function getCityByIP($ip)
{
$url = "http://ip-api.com/json/" . $ip.'?lang=zh-CN';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
if ($data['status'] == 'success') {
return $data;
} else {
return '';
}
}
/**
* 文件上传(单文件)
* @param $name 字段名称
*/
public function upload($name=''){
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file($name);
// 上传到本地服务器
$fileSize = 1000000*500;//单位MB
if ($file->getSize() > $fileSize) {
$data = [
'code'=>400,
'msg'=>'上传失败,超出了文件限制的大小(上限500MB)!',
];
print_r(json_encode($data));
exit;
}
try {
// 验证文件大小、后缀
validate(['filesize:'.$fileSize.'|fileExt:jpg,jpeg,png,mp3,mp4,xlsx,xls'=>'image'])->check(['image' => $file]);
// 将图片保存至本地
$saveName = \think\facade\Filesystem::putFile($name, $file);
$saveName = str_replace('\\', '/', $saveName);
/*压缩*/
// $path = dirname(dirname(__FILE__))."/public/uploads/".$saveName;
// $getOriginalExtension = $file->getOriginalExtension();
// if($getOriginalExtension == 'jpg' || $getOriginalExtension == 'png' || $getOriginalExtension == 'jpeg'){
// $image = \think\Image::open($path);
// //按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.png
// $image->thumb(1204, 1204)->save($path);
// }
return $saveName;
} catch (\think\exception\ValidateException $e) {
return fail($e->getMessage());
}
}
/**
* [将Base64图片转换为本地图片并保存]
* @E-mial wuliqiang_aa@163.com
* @TIME 2017-04-07
* @WEB http://blog.iinu.com.cn
* @param [Base64] $base64_image_content [要保存的Base64]
* @param [目录] $path [要保存的路径]
*/
public function base64_image_content($base64_image_content, $path)
{
//匹配出图片的格式
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)) {
$type = $result[2];
$new_file = dirname(dirname(__FILE__)).$path . "/" . date('Ymd', time()) . "/";
if (!file_exists($new_file)) {
//检查是否有该文件夹,如果没有就创建,并给予最高权限
mkdir($new_file, 0700);
}
$name = time() . ".{$type}";
$new_file = $new_file .$name;
if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))) {
//return $new_file;
return $path . "/" . date('Ymd', time()) . "/".$name;
} else {
return false;
}
} else {
return false;
}
}
/*数据库关联配置*/
public function config_db(){
//获取现有的数据库配置信息
$config = Config::get('database');
//新增数据库参数配置
$config['connections']['tmp'] = [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '114.55.92.99',
// 数据库名
'database' => "3zzizuozhu",
// 用户名
'username' => "3zzizuozhu",
// 密码
'password' => "fbRbGxLYJ75H7TXE",
// 数据库表前缀
'prefix' => 'ecs_',
// 端口
'hostport' => '3306',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
];
//设置database参数为 修改过的database配置参数
Config::set($config, 'database');
return db::connect('tmp');
}
}