首页
关于
归档
朋友
壁纸
留言
API平台
告白墙
更多
休闲游戏
留言板
练字贴
Layui手册
Search
1
【PHP】PHPoffice/PHPSpreadsheet读取和写入Excel
1,340 阅读
2
【Git】No tracked branch configured for branch master or the branch doesn't exist.
1,039 阅读
3
【Layui】控制页面元素展示隐藏
860 阅读
4
【composer】composer常用命令
787 阅读
5
【PHP】PHP实现JWT生成和验证
769 阅读
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
登录
Search
标签搜索
PHP
函数
方法
类
MySQL
ThinkPHP
OOP
JavaScript
Layui
Web
Linux
Array
设计模式
Git
PHPSpreadsheet
PHPoffice
排序算法
基础
面试题
Windows
小破孩
山水一程,三生有幸
累计撰写
223
篇文章
累计收到
33
条评论
首页
栏目
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
页面
关于
归档
朋友
壁纸
留言
API平台
告白墙
休闲游戏
留言板
练字贴
Layui手册
搜索到
53
篇与
的结果
2022-06-23
【PHP】简单实现无限级分类
/** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/8/20 17:43 * @param $arr * @return array * @Description:数据树,无限级分类 */ public function getTreeByDate($arr) { $items = []; foreach($arr as $v){ $items[$v['id']] = $v; } $tree = []; foreach($items as $k => $item){ if(isset($items[$item['pid']])){ $items[$item['pid']]['child'][] = &$items[$k]; }else{ $tree[] = &$items[$k]; } } return $tree; }
2022年06月23日
149 阅读
0 评论
0 点赞
2022-06-23
【PHP】 使用PHPoffice实现普通的导出功能(二)
第二版 使用PHPoffice实现普通的导出功能<?php namespace app\index\controller; use app\index\controller\Comm; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use think\Exception; use think\Request; class Importsheet extends comm{ private $sheet_filename; private $sheet_name; private $sheet_firstline = []; private $sheet_info = []; private $imgSwitch; private $switch; private $path = "uploads/excel/"; /** * Importsheet constructor. * @param $filename 文件名 * @param $name sheet名 * @param $firstline 表头 * @param $info 表内容 * @param $imgSwitch 图片开关 * @param $switch 返回下载地址还是直接返回文件 */ public function __construct($filename='Default',$name='sheet1',$firstline = [],$info = [],$imgSwitch = false, $switch = false) { parent::__construct(); $this->sheet_filename = $filename; $this->sheet_name = $name; $this->sheet_firstline = $firstline; $this->sheet_info = $info; $this->imgSwitch = $imgSwitch; $this->switch = $switch; } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2020/12/23 16:08 * @param int $column_num * @return mixed * @Description:获取表格列数的字母 */ public function getMaxColumn(int $column_num) { try{ if(empty($column_num)){ throw new Exception('column_num:列数为空~'); } if(!is_int($column_num)){ throw new Exception('column_num:参数类型错误~'); } if($column_num > 26*26 || $column_num < 0){ throw new Exception('最大列数:676列,最小列数:1列'); } $column_word = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; //生成循环次数 $num = ceil($column_num/26); for($c = 0; $c < $num; $c++) { $first_word = $column_word[$c-1]; foreach($column_word as $key => $val){ if($c >= 1){ $word = $first_word.$column_word[$key]; }else{ $word = $column_word[$key]; } $column[] = $word; } } for($a = 0; $a < $column_num; $a++){ $new_column[] = $column[$a]; } return $new_column; }catch (Exception $e){ returnResponse(100,$e->getMessage()); } } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2020/12/23 17:54 * @Description:输出表 */ public function outputSheet() { try{ $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); //设置sheet的名字 $sheet->setTitle($this->sheet_name); //默认表头第一行 $k = 1; //生成列的个数,根据表头个数来定 $column_num = count($this->sheet_firstline); $info_field_num = count($this->sheet_info[0]); if($column_num != $info_field_num){ if($column_num > $info_field_num){ $better_column_info = '表头多'; }else{ $better_column_info = '数据列多'; } throw new Exception('结果集列数和表头列数不一致~'.$better_column_info); } //生成表头上方的字母(最大676,最小1) $column_word = $this->getMaxColumn($column_num); //设置表头 for($i=0;$i<$column_num;$i++){ $sheet->setCellValue($column_word[$i].$k, $this->sheet_firstline[$i]); } //第二行开始插入数据 $k = 2; //插入表格数据 foreach ($this->sheet_info as $key => $value) { $b = 0; for($a = 0; $a < $column_num; $a++){ $getvalbykey = array_values($value); if($this->imgSwitch){ /*写入图片*/ $files_arr = explode('.', $getvalbykey[$b]); if(!empty($files_arr)){ $file_suffix = array_pop($files_arr); strtolower($file_suffix); $suffix = ['jpg', 'jpeg', 'gif', 'bmp', 'png','pdf','doc','docx','xlsx','xls']; if(in_array($file_suffix,$suffix)){ $str_thumb = str_replace($this->request->domain(),'',$getvalbykey[$b]); $thumb = '/home/wwwroot/xphbk/public'.$str_thumb; if($thumb){ $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $drawing ->setName('图片'); $drawing ->setDescription('图片'); $drawing ->setPath($thumb); $drawing ->setWidth(80); $drawing ->setHeight(80); $drawing ->setCoordinates($column_word[$a].$k); $drawing ->setOffsetX(0); $drawing ->setOffsetY(0); $drawing ->setWorksheet($spreadsheet->getActiveSheet()); } }else{ $sheet->setCellValue($column_word[$a].$k, $getvalbykey[$b]); } $b++; } }else{ $sheet->setCellValue($column_word[$a].$k, $getvalbykey[$b]); $b++; } } $k++; } //文件名 $file_name = date('Y-m-d H:i:s', time()).'-'.rand(1000, 9999).'_'. $this->sheet_filename . ".xlsx"; //下载 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$file_name.'"'); header('Cache-Control: max-age=0'); $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); if($this->switch == false){ $path = self::createPath($this->path); $writer->save($path.$file_name); // $url = 'http://'.$_SERVER['SERVER_NAME'].'/public/'.$path.$filename; $url = 'http://'.$_SERVER['SERVER_NAME'].'/'.$path.$file_name; }else{ return $writer->save('php://output'); } return $url; }catch (Exception $e){ returnResponse(100,$e->getMessage()); } } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/4/12 13:36 * @param $path * @Description:设置路径判断是否存在,不存在创建 */ private function createPath($path){ $Month = date('Ym',time()); $Day = date('d',time()); $path = $this->path.$Month.'/'.$Day.'/'; if(!is_dir($path)){ header("Content-type:text/html;charset=utf-8"); $res = mkdir(iconv("UTF-8", "GBK", $path),0777,true); if(!$res){ throw new Exception("创建目录失败"); } } return $path; } }使用图片导出的时候注意限制条数,图片导出比较费时间,在我自己的项目中,每次导出大概有五百条数据,是没有问题,具体的还要各位使用者再测使用方法:复制粘贴+稍微改改,就能用了
2022年06月23日
187 阅读
0 评论
0 点赞
2022-06-23
【PHP】使用PHPoffice实现普通的导入功能
解决普通导入的问题,暂不能解决导入图片相关问题,后续遇到相关业务在处理<?php namespace app\index\lib\xlsx; use app\index\lib\xlsx\import as aaa; use think\Controller; use think\Exception; use think\exception\ErrorException; use think\Log; class import extends Controller { /** * 注意事项: * 1. $fileSize已经转换成字节,无需再次转换,所以单位(M),默认5M; * 2. 如果需要更 文件路径,扩展名,记录表名,在公共定义的地方修改即可; * 3. 导入记录默认开启,如果关闭,将不再有数据表的记录任何信息(不包含相关日志); * 4. 关闭导入记录 将true改为false; * 5. 使用前需要引入phpoffice扩展; * 6. 如果需要重新处理表格数据, * 6-1. 将$dealData 传值 true; * 6-2. 需要重新调用批量添加的方法$this->insertAllData($data); * * 使用方法: * 1. 实例化当前类 * 2. 同时传参(*:必须;-:非必须): *表名 *表字段 *上传文件接收的名字 -是否需要返回表格数据 -文件限制大小 * 3. 调用upload方法即可 * * * 示例: * namespace app\index\controller; * use think\Controller; * use app\index\lib\xlsx\import as aaa; * class A extends Controller * { * public function aa(){ * $tableFile = ['a','b','c','d','e','f','g','h']; * $imports = new aaa('test',$tableFile,'file'); * if($this->request->file('file')){ * return $imports->upload(); * }else{ * return "<form action='/public/index.php/index/a/aa' enctype='multipart/form-data' method='post'> * <input type='file' name='file' /> <br> * <input type='submit' value='上传' /> * </form> "; * } * } * } */ public $fileSize; //文件大小 注意:已经转换成字节,所以单位(M) public $fileName; //接受文件的名字 public $filePath = 'uploads/importxlsx'; //文件路径 public $suffix; //文件后缀 public $suffixArr = ['xlsx', 'xls', 'Xlsx', 'Xls']; //文件后缀范围 public $tableName; //数据表名 public $tableField; //数据表字段 public $switchLog = true; //导入记录 public $logTableName = 'xlsximportlog'; //记录表名称 public $dealData; //是否返回数据重新处理 /** * import constructor. 实例化自动执行 * @param string $tableName 表名 * @param array $tableField 数据库字段 * @param string $fileName 上传文件的名字 * @param string $fileSize 长传文件的大小 注意:已经转换成字节,所以单位(M) */ public function __construct($tableName = '', $tableField = [], $fileName = '', $dealData = false, $fileSize = '5') { parent::__construct(); $this->tableName = $tableName; $this->tableField = $tableField; $this->fileName = $fileName; $this->dealData = $dealData; $this->fileSize = $fileSize*1024*1024; } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/8/2 15:07 * @Description:单文件上传 * 成功上传后 获取上传信息 *print_r($file->getInfo()); *[ * ['name'] => '2021-07-31 15_50_18-5822_商务部在办企业进度及时限表.xlsx', * ['type'] => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', * ['tmp_name'] => 'C:\Users\EDZ\AppData\Local\Temp\phpEAA4.tmp', * ['error'] => '0', * ['size'] => '132892' *]; *echo $info->getExtension(); //输出 jpg *echo $info->getSaveName(); //输出 20160820/42a79759f284b767dfcb2a0197904287.jpg *echo $info->getFilename(); //输出 42a79759f284b767dfcb2a0197904287.jpg */ public function upload(){ $file = request()->file($this->fileName); $path = ROOT_PATH . 'public' . DS . $this->filePath; $info = $file->validate(['size'=>$this->fileSize,'ext' => $this->suffixArr])->move($path); if($info){ $this->path = $path.'/'.$info->getSaveName(); $this->suffix = $info->getExtension(); $res = self::import($file->getInfo()); if($this->switchLog){ self::importLog($this->path,count($res),$file->getInfo['name'],$file->getInfo['size'],$file->getInfo['type']); } if($this->dealData){ return $res; } $result = $this->insertAllData($res); if($result){ return $result; } throw new Exception('添加失败'); }else{ // 上传失败获取错误信息 throw new Exception($file->getError()); } } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/8/3 18:05 * @throws \PhpOffice\PhpSpreadsheet\Exception * @throws \PhpOffice\PhpSpreadsheet\Reader\Exception * @Description:导入逻辑 */ private function import($fileInfo = []){ $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader(ucfirst($this->suffix)); $reader->setReadDataOnly(TRUE); $spreadsheet = $reader->load($this->path); //载入excel表格 $worksheet = $spreadsheet->getActiveSheet(); $highestRow = $worksheet->getHighestRow(); // 总行数 $highestColumn = $worksheet->getHighestColumn(); // 总列数 $highestColumnNum = self::getColumnArrByMaxCol($highestColumn); //列值 if(count($highestColumnNum) != count($this->tableField)) throw new Exception("表格的列数和表字段个数不相同,请确认后再试~"); $lines = $highestRow - 1;//减掉表的第一行(通常第一行是表头,不需要导入,导入时无需删除第一行) if ($lines <= 0) throw new Exception($fileInfo['name']."Excel表格中没有数据~"); $b = 0; for ($i = 2; $i <= $highestRow; $i++){ for($a = 0; $a <= count($highestColumnNum); $a++){ $data[$b][$this->tableField[$a]] = $worksheet->getCellByColumnAndRow($a+1,$i)->getValue(); } array_pop($data[$b]); $b++; } return $data; } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/8/4 14:35 * @param string $col * @throws Exception * @Description:根据列数的最大值返回最大范围内的列值 */ public function getColumnArrByMaxCol($col = ''){ if(empty($col)) throw new Exception("不能为空~"); if(strlen($col) > 2) throw new Exception("导入列数超出最大值~"); strtoupper($col); $column_word = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; $colArr = []; if(in_array($col,$column_word)){ for ($i=0;$i<=25;$i++){ if($column_word[$i] == $col) { array_push($colArr,$column_word[$i]); return $colArr; } array_push($colArr,$column_word[$i]); } } $firstColumn = substr($col,0,1); $twoColumn = substr($col,1,1); if(!in_array($firstColumn,$column_word)) throw new Exception("错误的参数"); if(!in_array($twoColumn,$column_word)) throw new Exception("错误的参数"); $firstColumnNum = array_keys($column_word,$firstColumn); // $twoColumnNum = array_keys($column_word,$twoColumn); $colArr = $column_word; for($a = 0; $a <= $firstColumnNum[0]; $a++){ for($b = 0; $b <= 25; $b++){ if($twoColumn == $column_word[$b] && $firstColumnNum[0] == $a){ array_push($colArr,$column_word[$a].$column_word[$b]); return $colArr; } array_push($colArr,$column_word[$a].$column_word[$b]); } } } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/8/3 17:26 * @param $data * @return $this * @Description:添加全部数据 */ public function insertAllData($data = ''){ if(empty($data) || !is_array($data)) throw new Exception("导入的数据是空的"); $res = Db($this->tableName)->insertAll($data); if($res){ return $this; } throw new Exception("添加失败"); } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/8/3 16:53 * @param string $url * @param string $totalRow * @param string $totalInsert * @return string * @Description:日志记录 */ public function importLog($url = '', $totalRow = '', $name = '', $size = '', $type = ''){ if(!$this->switchLog){ return 'Method ERROR:The switchLog function must be enabled'; } if(!self::createTable()) throw new Exception("记录日志失败"); $data = [ 'create_time' => time(), 'url' => $url, 'name' => $name, 'size' => $size, 'type' => $type, 'num' => $totalRow, ]; $res = Db($this->logTableName)->insert($data); if($res){ return $this; } return "Error Message:Log recording failure"; } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/8/3 11:59 * @param $xlsxTableName * @return bool|string * @throws \think\db\exception\BindParamException * @throws \think\exception\PDOException * @Description:创建数据表 */ private function createTable(){ $xlsxTableName = config('database.prefix').$this->logTableName; $isTable=db()->query('SHOW TABLES LIKE '."'". $xlsxTableName ."'"); if($isTable){ return $this; } $database = config('database.database'); $sql = "CREATE TABLE `". $database ."`.`". $xlsxTableName ."` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键自增', `url` varchar(255) NULL COMMENT 'url地址', `name` varchar(255) NULL COMMENT '源文件名名称', `size` varchar(40) NULL COMMENT '源文件大小', `type` varchar(255) NULL COMMENT '源文件类型', `num` int(11) NULL COMMENT '总数量', `create_time` bigint(20) NULL COMMENT '创建时间', PRIMARY KEY (`id`) ) COMMENT = '导入xlsx表格记录表'"; $res = db()->query($sql); if($res){ return $this; } return "Query Message:Error creating data table"; } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/8/3 17:18 * @param string $page * @param string $limit * @param string $sort * @return bool|false|\PDOStatement|string|\think\Collection * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @Description:获取日志列表 */ public function getLogList($page = '1', $limit = '20', $sort = 'desc'){ $res = Db($this->logTableName)->page($page,$limit)->order('id',$sort)->select(); return $res; } }
2022年06月23日
515 阅读
3 评论
0 点赞
2022-06-23
【PHP】获取每个月的开始和结束的时间戳
/** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/6/9 10:21 * @param $year * @Description:获取任意一年的每个月的开始和结束的时间戳 */ public function getMonthBetweenTimestampByYear($year = ''){ if(empty($year)){ $year = date('Y',time()); } $month = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']; foreach($month as $key => $val){ $month_start = strtotime($year.'-'.$val);//指定月份月初时间戳 $month_end = mktime(23, 59, 59, $val+1, 00,$year);//指定月份月末时间戳 $month_s_e[] = ['start' => $month_start, 'end' => $month_end]; } return $month_s_e; }
2022年06月23日
166 阅读
0 评论
0 点赞
2022-06-23
【PHP】PHP实现创建文件目录
/** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/4/12 13:36 * @param $path * @Description:设置路径判断是否存在,不存在创建 */ public function createPath($path){ $Month = date('Ym',time()); $Day = date('d',time()); $path = $this->path.$Month.'/'.$Day.'/'; if(!is_dir($path)){ header("Content-type:text/html;charset=utf-8"); $res = mkdir(iconv("UTF-8", "GBK", $path),0777,true); if(!$res){ $this->createPath(); } } return $path; }
2022年06月23日
111 阅读
0 评论
0 点赞
2022-06-23
【PHP】PHP日志调试方法
/** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/4/2 18:01 * @param string $param 参数 * @param string $res 结果 * @param string $status 状态 false失败,true成功 * @Description:记录日志 */ public function superLog($param = '',$res = '',$status = false){ $logController = $this->request->controller(); $logName = $this->request->action(); $status = $status == true ? '成功'.PHP_EOL : '失败'.PHP_EOL; $dateTime = date('Y-m-d H:i:s',time()); $dateDay = substr($dateTime,0,10); //路径处理 $pathlog = "./fastlog/".$dateDay."/".$logController."/"; if(!is_dir($pathlog)){ header("Content-type:text/html;charset=utf-8"); $res = mkdir(iconv("UTF-8", "GBK", $pathlog),0777,true); if(!$res){ self::superLog(); } } //参数处理 if(is_array($param)){ $param = json_encode($param,JSON_UNESCAPED_UNICODE); } if(is_array($res)){ $res = json_encode($res,JSON_UNESCAPED_UNICODE); } error_log($dateTime.'=>'.$logName."\n"."参数:".$param."\n"."结果:".$res."\n".$status,3,$pathlog.$logName.'.txt'); } **便捷使用:** error_log(date('Y-m-d H:i:s',time())."=>aaa\n".print_r($data,true)."\n",3,"./aaa_log.txt");
2022年06月23日
184 阅读
0 评论
0 点赞
2022-06-23
【PHP】通过CURL获取结果集
在PHP调用别人的接口,需要用到curl相关操作,本文章集成了多个操作方法,并在今后的工作中不断完善 /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/4/1 10:39 * @param string $url url地址 * @param bool $params 参数 * @param int $ispost 是否是post请求,默认get * @param int $https 是否是https,默认http * @param int $flbg 返回值是否转成数组,默认不转 * @param int $header 是否传递header值,默认不传,header值格式:$header = ['CLIENT-IP:127.0.0.1','X-FORWARDED-FOR:127.0.0.1']; * @param int $headercontent 是否获取请求的header值内容,默认不获取 * @param int $local 是否使用本地ip进行请求,默认不使用 * @return array|bool|mixed|string * @Description:curl请求 */ public function curl($url, $params = false, $ispost = 0, $https = 0, $flbg = 0, $header = 0,$headercontent = 0,$local = 0){ // $httpInfo = []; $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'); // curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); if($header){ curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); } if($headercontent){ curl_setopt($ch, CURLOPT_HEADER, 1); } if($local){ $header = [ 'CLIENT-IP:127.0.0.1', 'X-FORWARDED-FOR:127.0.0.1' ]; curl_setopt($ch, CURLOPT_HTTPHEADER, $header); } if($https){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在 } if($ispost){ curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_URL, $url); }else{ if($params){ if (is_array($params)) { $params = http_build_query($params); } curl_setopt($ch, CURLOPT_URL, $url . '?' . $params); }else{ curl_setopt($ch, CURLOPT_URL, $url); } } $response = curl_exec($ch); // if($response === FALSE){ // echo "CURL Error: " . curl_error($ch); // return false; // } // $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // $httpInfo = array_merge($httpInfo, curl_getinfo($ch)); if($headercontent){ //对返回的结果进行字符串处理 if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') { $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $headerSize); $body = substr($response, $headerSize); return [$headers,$body]; //body内容是图片 } } curl_close($ch); if ($flbg) { $response = json_decode($response, true); } return $response; } 上面的用本地请求的场景是,被curl请求接口做了IP限制,如果本地不可以用,可以使用下面的方法需要一个有效的代理ip和端口号,有的还需要用户名密码,代码如下:curl_setopt($ch, CURLOPT_PROXY, "http://39.156.69.79:8080");窍门:一般情况下是不需要代理,但是伪造的ip不能用,就ping一下你扒取接口的网址,然后用这个网址的ip做伪造。百分百成功。如遇类似问题不能解决,欢迎留言讨论。
2022年06月23日
107 阅读
0 评论
0 点赞
2022-06-23
【PHP】$_SERVER详解
## $_SERVER详解 ## > 以 "http://local.sdd.com/public/index.php/fast" 这个地址为例; $_SERVER['SCRIPT_NAME']; //当前脚本的路径 /public/index.php dirname($_SERVER['SCRIPT_NAME']); //dirname() 返回路径中的目录部分 /public $_SERVER['SCRIPT_FILENAME']; //当前脚本执行的绝对路径 D:/phpstudy_pro/WWW/sdd/public/index.php $_SERVER['HTTP_HOST']; //获取当前域名 local.sdd.com $_SERVER['SERVER_NAME']; //输出配置文件httpd.conf中的ServerName,一般情况下与HTTP_HOST值相同 local.sdd.com $_SERVER['SystemRoot']; //当前服务器的操作系统的目录 C:\WINDOWS $_SERVER['SERVER_SOFTWARE']; //服务器软件配置信息 Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02 $_SERVER['SERVER_PORT']; //服务器端口 80 $_SERVER['REMOTE_PORT']; //用户连接到服务器时所使用的端口 58222 $_SERVER['SERVER_ADDR']; //服务器的ip地址 127.0.0.1 $_SERVER['REMOTE_ADDR']; //浏览网页的用户ip。 127.0.0.1 $_SERVER['DOCUMENT_ROOT']; //当前运行脚本所在的根目录 D:/phpstudy_pro/WWW/sdd $_SERVER['REQUEST_SCHEME']; //服务器通信协议,是http或https。 http $_SERVER['SERVER_ADMIN']; //服务器管理员信息 admin@example.com $_SERVER['REQUEST_METHOD']; //请求数据的方式 GET $_SERVER['REQUEST_URI']; //当前脚本路径,根目录之后的目录 /public/index.php/fast $_SERVER['PHP_SELF']; //当前正在执行脚本的文件名 /public/index.php/fast $_SERVER['REQUEST_TIME']; //得到请求开始时的时间戳。 1616986524 $_SERVER['HTTP_COOKIE']; //获取浏览器的cookie信息。 authId=u%2B4BNnh9IsFDM%2BM%7C1617241258%7C7b4GM396cJIXMeM%2BS3v0tszZx%2FKx; shownum=10 $_SERVER['HTTP_CONNECTION']; //当前请求的连接情况 close $_SERVER['HTTP_USER_AGENT']; //获取用户相关信息,包括用户浏览器、操作系统等信息 Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 $_SERVER['HTTP_ACCEPT']; //当前请求的ACCEPT头部信息 text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 $_SERVER['HTTP_ACCEPT_LANGUAGE']; //返回用户默认的语言设置,后面的q值表示用户对该语言的喜好程度 zh-CN,zh;q=0.9
2022年06月23日
164 阅读
0 评论
0 点赞
2022-06-23
【PHP】民族数组
["汉族","蒙古族","回族","藏族","维吾尔族","苗族","彝族","壮族","布依族","朝鲜族","满族","侗族","瑶族","白族","土家族", "哈尼族","哈萨克族","傣族","黎族","傈僳族","佤族","畲族","高山族","拉祜族","水族","东乡族","纳西族","景颇族","柯尔克孜族", "土族","达斡尔族","仫佬族","羌族","布朗族","撒拉族","毛南族","仡佬族","锡伯族","阿昌族","普米族","塔吉克族","怒族", "乌孜别克族", "俄罗斯族","鄂温克族","德昂族","保安族","裕固族","京族","塔塔尔族","独龙族","鄂伦春族","赫哲族","门巴族","珞巴族","基诺族"];
2022年06月23日
155 阅读
0 评论
0 点赞
2022-06-21
【PHP】根据身份证号码获取 性别,年龄,出生日期 的信息
//18位身份证取性别,倒数第二位奇数是男,偶数是女; $sex = substr($idcard, (strlen($idcard)==18 ? -2 : -1), 1) % 2 ? '1' : '2'; //取身份证年月日; $birthday = strlen($idcard)==15 ? ('19' . substr($idcard, 6, 6)) : substr($idcard, 6, 8); //身份证年月日转换成时间戳 $birthdays = strtotime(strlen($idcard)==15 ? ('19' . substr($idcard, 6, 6)) : substr($idcard, 6, 8)); //取当天日期; $today = strtotime('today'); //用时间戳相减算出年龄; $diff = floor(($today-$birthdays)/86400/365); //取出年龄值; $age = strtotime(substr($idcard,6,8).'+'.$diff.'years')>$today?($diff+1):$diff;
2022年06月21日
380 阅读
0 评论
0 点赞
2022-06-21
【PHP】使用PHPoffice实现普通的导出功能
> 使用composer安装: composer require phpoffice/phpspreadsheet <?php namespace app\index\controller; use app\index\controller\Comm; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use think\Exception; use think\Request; class Importsheet extends comm{ /** * @var Excel文件名字 */ private $sheet_filename; /** * @var Excel中的sheet的名字 */ private $sheet_name; /** * @var array 输出Excel的表头 */ private $sheet_firstline = []; /** * @var array 表的内容 */ private $sheet_info = []; /** * Importsheet constructor. * @param $filename 文件名 * @param $name sheet名 * @param $firstline 表头 * @param $info 表内容 */ public function __construct($filename,$name,$firstline = [],$info = []) { parent::__construct(); $this->sheet_filename = $filename; $this->sheet_name = $name; $this->sheet_firstline = $firstline; $this->sheet_info = $info; } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2020/12/23 16:08 * @param int $column_num * @return mixed * @Description:获取表格列数的字母 */ public function getMaxColumn(int $column_num) { try{ if(empty($column_num)){ throw new Exception('column_num:列数为空~'); } if(!is_int($column_num)){ throw new Exception('column_num:参数类型错误~'); } if($column_num > 26*26 || $column_num < 0){ throw new Exception('最大列数:676列,最小列数:1列'); } $column_word = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; //生成循环次数 $num = ceil($column_num/26); for($c = 0; $c < $num; $c++) { $first_word = $column_word[$c-1]; foreach($column_word as $key => $val){ if($c >= 1){ $word = $first_word.$column_word[$key]; }else{ $word = $column_word[$key]; } $column[] = $word; } } for($a = 0; $a < $column_num; $a++){ $new_column[] = $column[$a]; } return $new_column; }catch (Exception $e){ returnResponse(100,$e->getMessage()); } } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2020/12/23 17:54 * @Description:输出表 */ public function outputSheet() { try{ $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); //设置sheet的名字 $sheet->setTitle($this->sheet_name); //默认表头第一行 $k = 1; //生成列的个数,根据表头个数来定 $column_num = count($this->sheet_firstline); $info_field_num = count($this->sheet_info[0]); if($column_num != $info_field_num){ throw new Exception('结果集列数和表头列数不一致~'); } //生成表头上方的字母(最大676,最小1) $column_word = $this->getMaxColumn($column_num); //设置表头 for($i=0;$i<$column_num;$i++){ $sheet->setCellValue($column_word[$i].$k, $this->sheet_firstline[$i]); } //第二行开始插入数据 $k = 2; //插入表格数据 foreach ($this->sheet_info as $key => $value) { $b = 0; for($a = 0; $a < $column_num; $a++){ $getvalbykey = array_values($value); $sheet->setCellValue($column_word[$a].$k, $getvalbykey[$b]); $b++; } $k++; } //文件名 $file_name = date('Y-m-d H:i:s', time()).'-'.rand(1000, 9999).'_'. $this->sheet_filename . ".xlsx"; //下载 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$file_name.'"'); header('Cache-Control: max-age=0'); $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); }catch (Exception $e){ returnResponse(100,$e->getMessage()); } } } 使用方法TP框架为例: $res = Db('company')->field('id,companys,business_remark,img1,img2,img3')->select();//查询的数据 $first_line = ['ID','公司','备注','图片一','图片二','图片三']; $sheet = new Importsheet('下载的excel名','excel里面sheet名','表头','查询的结果集'); $sheet->outputSheet(); > 改变部分地方的语法,可以适用于任意框架; > phpoffice使用介绍:http://www.honeyrh.com/index.php/archives/100/ $writer->save('文件路径');//设置文件保存路径,自己拼接路由地址 如果有更好的解决方法,欢迎留言指导。 补充:导出需要导出图片的处理方法 for($a = 0; $a < $column_num; $a++){ $getvalbykey = array_values($value); /*写入图片*/ $files_arr = explode('.', $getvalbykey[$b]); if(!empty($files_arr)){ $file_suffix = array_pop($files_arr); strtolower($file_suffix); $suffix = ['jpg', 'jpeg', 'gif', 'bmp', 'png','pdf','doc','docx','xlsx','xls']; if(in_array($file_suffix,$suffix)){ $thumb_str = str_replace(request()->domain(),'',$getvalbykey[$b]); $thumb = '/home/wwwroot/crm.sddjieshui.com/public'.$thumb_str; if(file_exists($thumb)){ $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $drawing ->setName('图片'); $drawing ->setDescription('图片'); $drawing ->setPath($thumb); $drawing ->setWidth(80); $drawing ->setHeight(80); $drawing ->setCoordinates($column_word[$a].$k); $drawing ->setOffsetX(0); $drawing ->setOffsetY(0); $drawing ->setWorksheet($spreadsheet->getActiveSheet()); } }else{ $sheet->setCellValue($column_word[$a].$k, $getvalbykey[$b]); } $b++; }// $sheet->setCellValue($column_word[$a].$k, $getvalbykey[$b]);// $b++;导出图片替换上面方法,也可以做成开关的形式或者自动选择的形式,根据业务场景来定,后期有时间再重新更新一版可以灵活控制应用的,开箱即用,无需修改,相当nice
2022年06月21日
320 阅读
0 评论
1 点赞
2022-06-21
【PHP】PHP导出Excel所需要的表头上方的字母超过26位的解决方法
/** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2020/12/23 16:08 * @param int $column_num * @return mixed * @Description:获取表格列数的字母 */ public function getMaxColumn(int $column_num) { try{ if(empty($column_num)){ throw new Exception('column_num:列数为空~'); } if(!is_int($column_num)){ throw new Exception('column_num:参数类型错误~'); } if($column_num > 26*26 || $column_num < 0){ throw new Exception('最大列数:676列,最小列数:1列'); } $column_word = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; //生成循环次数 $num = ceil($column_num/26); for($c = 0; $c < $num; $c++) { $first_word = $column_word[$c-1]; foreach($column_word as $key => $val){ if($c >= 1){ $word = $first_word.$column_word[$key]; }else{ $word = $column_word[$key]; } $column[] = $word; } } for($a = 0; $a < $column_num; $a++){ $new_column[] = $column[$a]; } return $new_column; }catch (Exception $e){ returnResponse(100,$e->getMessage()); } }
2022年06月21日
188 阅读
0 评论
0 点赞
2022-06-21
【PHP】PHP获取数组中重复value的key值
/** * @Author:小破孩 * @Time: 2020/8/7 17:14 * @param $array * @return array * @Description:获取数组重复value的key值 */ function getKeyByArrayValue($array){ $keyarr= []; $resultkey = []; foreach ($array as $k => $v) { if (in_array($v, $keyarr)) { //在数组中搜索键值$v,并返回它的键名 $resultkey[] = array_search($v,$keyarr); $resultkey[] = $k; }else{ $keyarr[] = $v; } } return $resultkey; }
2022年06月21日
166 阅读
0 评论
0 点赞
2022-06-21
【PHP】PHP实现网页转PDF - MPDF扩展
**PHP版本和扩展** mPDF >=7.0支持PHP^5.6 || ~7.0.0 || ~7.1.0 || ~7.2.0 PHP 7.3支持,因为mPDF v7.1.7 PHP 7.4支持,因为mPDF v8.0.4 PHPmbstring和gd必须加载扩展程序。 > 一些高级功能可能需要额外的扩展,例如zlib对于输出和嵌入式资源(如字体)的压缩,bcmath用于生成条形码或xml用于字符集转换和SVG处理。 **安装** composer require mpdf/mpdf **使用:** /** * @Author:小破孩 * @Time: 2020/8/10 19:04 * @param $url 网页地址 * @param $hetongming pdf存表的原名 * @return mixed|string * @throws \Mpdf\MpdfException * @Description:网页转PDF */ function htmlTopdf($url,$hetongming){ $mpdf = new \Mpdf\Mpdf(['mode'=>'utf-8','format'=>'A4','useSubstitutions'=>true,'useAdobeCJK'=>true,'autoScriptToLang'=>true,'autoLangToFont'=>true,'mgl'=>15,'mgr'=>15,'mgt'=>16,'mgb'=>16,'mgh'=>9,'mgf'=>9, 'orientation'=>'P']); $page = file_get_contents($url); $pwd = 'PDF_TY'.setCode();//修改文档的密码 // $pwds = setPwd($pwd); //查看密码 $mpdf->SetProtection(array(),'',$pwd,128); $mpdf->WriteHTML($page); $pdf_name = setNumber(); $name = "./Uploads/pdf/".$pdf_name.".pdf"; $mpdf->Output( $name ,'F'); $urls = "/Uploads/pdf/".$pdf_name.".pdf"; $pdf_filesize = filesize($name); $img_number = savePdf($hetongming,$pwd,$pdf_filesize,$urls); return $img_number; } 参考资料: > github:https://github.com/mpdf/mpdf > manual:https://mpdf.github.io/
2022年06月21日
177 阅读
0 评论
0 点赞
2022-06-21
【PHP】PHP生成随机 数,字符串
/** * @Author:小破孩 * @Time: 2020/7/15 17:39 * @param string $length 默认10 * @return string * @Description:生成数字和字母混合的邀请码 */ function setCode($length='10'){ $key=''; $pattern = ['1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']; for($i=0;$i<$length;$i++) { $key .= $pattern[mt_rand(0,35)]; //生成php随机数 } return $key; } // 生成随机字符串 private function randomString($len = 32) { $string = ''; $char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; for ($i = 0; $i < $len; $i++) { $string .= $char[mt_rand(0, strlen($char) - 1)]; } return $string; } const MINIWORD = ['a','b','c','d','e','f','g','h','k','m','n','p','q','r','t','w','x','y','z'];//'l',,'i','j','s','o','u','v' const NUMS = ['2', '3', '5', '6', '7', '8', '9'];//'4', '1','0', /** * Author: 小破孩 * Email: 3584685883@qq.com * Time: 2021/12/29 10:26 * @param int $length * @return string * Description:核销码 */ public function setVerificationCode(int $length = 4):string { $dictionary =array_merge(self::MINIWORD,self::NUMS); shuffle($dictionary); $codeArrKey = array_rand($dictionary,$length); $code = ''; for($i = 0; $i < count($codeArrKey); $i++){ $code .= $dictionary[$i]; } return $code; } /** * Author: 小破孩 * Email: 3584685883@qq.com * Time: 2021/12/29 10:16 * @param int $length default 6 * @return int * Description:设置验证码 */ public function setSmsCode(int $length = 6):int { if($length == 6){ return mt_rand(100000,999999); } return mt_rand(1000,9999); }
2022年06月21日
147 阅读
0 评论
0 点赞
2022-06-21
【PHP】扩展 qrcode 二维码生成
**一、执行命令安装** composer require dh2y/think-qrcode **二、require安装** thinkphp5.0 安装 "require": { "dh2y/think-qrcode":"1.*" }, thinkphp5.1 安装 "require": { "dh2y/think-qrcode":"2.*" }, **三、autoload psr-4标准安装** a) 进入vendor/dh2y目录 (没有dh2y目录 mkdir dh2y) b) git clone c) 修改 git clone下来的项目名称为think-qrcode d) 添加下面配置 "autoload": { "psr-4": { "dh2y\\qrcode\\": "vendor/dh2y/think-qrcode/src" } }, e) php composer.phar update **添加配置文件** return [ 'cache_dir' => 'uploads'.DS.'qrcode', //缓存地址 'background'=> 'static/image/icon_cover.png' //背景图 ]; **使用方法** $code = new QRcode(); $code_path = $code->png($register_url) //生成二维码 ->logo('static/image/avatar-m.jpg') //生成logo二维码 ->background(180,500) //给二维码加上背景 ->text($role,20,['center',740],'#ff4351') //添加文字水印 ->text($nick_name,20,['center',780],'#000000') ->getPath(); //获取二维码生成的地址
2022年06月21日
144 阅读
0 评论
0 点赞
2022-06-21
【PHP】PHPMailer发送邮件
/** * @Author:小破孩 * @Time: 2020/7/10 13:13 * @param $title 邮件标题 * @param $content 内容 * @param $toemail 收件人邮箱 * @Description:发送邮件 */ function sendEmail($title, $content, $toemail, $usernumber, $type){ try{ $mail = new \PHPMailer\PHPMailer\PHPMailer(); $mail->isSMTP();// 使用SMTP服务 $mail->CharSet = "utf8";// 编码格式为utf8,不设置编码的话,中文会出现乱码 $mail->Host = "smtp.163.com";// 发送方的SMTP服务器地址 $mail->SMTPAuth = true;// 是否使用身份验证 $mail->Username = Config('app.email_name');// 发送方的163邮箱用户名,就是你申请163的SMTP服务使用的163邮箱 $mail->Password = Config('app.email_allow');// 发送方的邮箱密码,注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码! $mail->SMTPSecure = "ssl";// 使用ssl协议方式 $mail->Port = config('app.email_port');// 163邮箱的ssl协议方式端口号是465/994 $mail->setFrom(config('app.email_address'),config('app.email_sendpeopleinfo'));// 设置发件人信息,如邮件格式说明中的发件人,这里会显示为Mailer(xxxx@163.com),Mailer是当做名字显示 $mail->addAddress($toemail,'小破孩回复消息');// 设置收件人信息,如邮件格式说明中的收件人,这里会显示为Liang(yyyy@163.com) $mail->addReplyTo(config('app.email_receive'),'小破孩');// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址 $mail->Subject = $title;// 邮件标题 $mail->Body = $content/*."点击可以查看文章地址:".$desc_url*/;// 邮件正文 if(!$mail->send()){// 发送邮件 returnResponse(100,$mail->ErrorInfo);// 输出错误信息 echo "Mailer Error: ".$mail->ErrorInfo; } //信息入库 $data['e_user_number'] = $usernumber; $data['e_title'] = $title; $data['e_content'] = $content; $data['e_emali_receive'] = $toemail; $data['e_type'] = $type; $res = Db::name('email')->insert($data); if($res){ return $res; } }catch (\Exception $e){ returnResponse(100,$e->getMessage()); } }
2022年06月21日
162 阅读
0 评论
0 点赞
2022-06-21
【PHP】生成avatar头像
/** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2020/12/10 20:00 * @param string $email 邮箱 * @param int $s 大小 * @param string $d * @param string $g * @return string * @Description:生成avatar头像 */ function getAvatar($email='', $s=40, $d='mm', $g='g') { $hash = md5($email); $avatar = "http://www.gravatar.com/avatar/$hash?s=$s&d=$d&r=$g"; return $avatar; }
2022年06月21日
158 阅读
0 评论
0 点赞
2022-06-21
【PHP】获取文件MIME类型-根据文件扩展名来获取
function getFileType($ext){ static $mime_types = [ 'apk' => 'application/vnd.android.package-archive', '3gp' => 'video/3gpp', 'ai' => 'application/postscript', 'aif' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff', 'aiff' => 'audio/x-aiff', 'asc' => 'text/plain', 'atom' => 'application/atom+xml', 'au' => 'audio/basic', 'avi' => 'video/x-msvideo', 'bcpio' => 'application/x-bcpio', 'bin' => 'application/octet-stream', 'bmp' => 'image/bmp', 'cdf' => 'application/x-netcdf', 'cgm' => 'image/cgm', 'class' => 'application/octet-stream', 'cpio' => 'application/x-cpio', 'cpt' => 'application/mac-compactpro', 'csh' => 'application/x-csh', 'css' => 'text/css', 'dcr' => 'application/x-director', 'dif' => 'video/x-dv', 'dir' => 'application/x-director', 'djv' => 'image/vnd.djvu', 'djvu' => 'image/vnd.djvu', 'dll' => 'application/octet-stream', 'dmg' => 'application/octet-stream', 'dms' => 'application/octet-stream', 'doc' => 'application/msword', 'dtd' => 'application/xml-dtd', 'dv' => 'video/x-dv', 'dvi' => 'application/x-dvi', 'dxr' => 'application/x-director', 'eps' => 'application/postscript', 'etx' => 'text/x-setext', 'exe' => 'application/octet-stream', 'ez' => 'application/andrew-inset', 'flv' => 'video/x-flv', 'gif' => 'image/gif', 'gram' => 'application/srgs', 'grxml' => 'application/srgs+xml', 'gtar' => 'application/x-gtar', 'gz' => 'application/x-gzip', 'hdf' => 'application/x-hdf', 'hqx' => 'application/mac-binhex40', 'htm' => 'text/html', 'html' => 'text/html', 'ice' => 'x-conference/x-cooltalk', 'ico' => 'image/x-icon', 'ics' => 'text/calendar', 'ief' => 'image/ief', 'ifb' => 'text/calendar', 'iges' => 'model/iges', 'igs' => 'model/iges', 'jnlp' => 'application/x-java-jnlp-file', 'jp2' => 'image/jp2', 'jpe' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpg' => 'image/jpeg', 'js' => 'application/x-javascript', 'kar' => 'audio/midi', 'latex' => 'application/x-latex', 'lha' => 'application/octet-stream', 'lzh' => 'application/octet-stream', 'm3u' => 'audio/x-mpegurl', 'm4a' => 'audio/mp4a-latm', 'm4p' => 'audio/mp4a-latm', 'm4u' => 'video/vnd.mpegurl', 'm4v' => 'video/x-m4v', 'mac' => 'image/x-macpaint', 'man' => 'application/x-troff-man', 'mathml' => 'application/mathml+xml', 'me' => 'application/x-troff-me', 'mesh' => 'model/mesh', 'mid' => 'audio/midi', 'midi' => 'audio/midi', 'mif' => 'application/vnd.mif', 'mov' => 'video/quicktime', 'movie' => 'video/x-sgi-movie', 'mp2' => 'audio/mpeg', 'mp3' => 'audio/mpeg', 'mp4' => 'video/mp4', 'mpe' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'mpg' => 'video/mpeg', 'mpga' => 'audio/mpeg', 'ms' => 'application/x-troff-ms', 'msh' => 'model/mesh', 'mxu' => 'video/vnd.mpegurl', 'nc' => 'application/x-netcdf', 'oda' => 'application/oda', 'ogg' => 'application/ogg', 'ogv' => 'video/ogv', 'pbm' => 'image/x-portable-bitmap', 'pct' => 'image/pict', 'pdb' => 'chemical/x-pdb', 'pdf' => 'application/pdf', 'pgm' => 'image/x-portable-graymap', 'pgn' => 'application/x-chess-pgn', 'pic' => 'image/pict', 'pict' => 'image/pict', 'png' => 'image/png', 'pnm' => 'image/x-portable-anymap', 'pnt' => 'image/x-macpaint', 'pntg' => 'image/x-macpaint', 'ppm' => 'image/x-portable-pixmap', 'ppt' => 'application/vnd.ms-powerpoint', 'ps' => 'application/postscript', 'qt' => 'video/quicktime', 'qti' => 'image/x-quicktime', 'qtif' => 'image/x-quicktime', 'ra' => 'audio/x-pn-realaudio', 'ram' => 'audio/x-pn-realaudio', 'ras' => 'image/x-cmu-raster', 'rdf' => 'application/rdf+xml', 'rgb' => 'image/x-rgb', 'rm' => 'application/vnd.rn-realmedia', 'roff' => 'application/x-troff', 'rtf' => 'text/rtf', 'rtx' => 'text/richtext', 'sgm' => 'text/sgml', 'sgml' => 'text/sgml', 'sh' => 'application/x-sh', 'shar' => 'application/x-shar', 'silo' => 'model/mesh', 'sit' => 'application/x-stuffit', 'skd' => 'application/x-koan', 'skm' => 'application/x-koan', 'skp' => 'application/x-koan', 'skt' => 'application/x-koan', 'smi' => 'application/smil', 'smil' => 'application/smil', 'snd' => 'audio/basic', 'so' => 'application/octet-stream', 'spl' => 'application/x-futuresplash', 'src' => 'application/x-wais-source', 'sv4cpio' => 'application/x-sv4cpio', 'sv4crc' => 'application/x-sv4crc', 'svg' => 'image/svg+xml', 'swf' => 'application/x-shockwave-flash', 't' => 'application/x-troff', 'tar' => 'application/x-tar', 'tcl' => 'application/x-tcl', 'tex' => 'application/x-tex', 'texi' => 'application/x-texinfo', 'texinfo' => 'application/x-texinfo', 'tif' => 'image/tiff', 'tiff' => 'image/tiff', 'tr' => 'application/x-troff', 'tsv' => 'text/tab-separated-values', 'txt' => 'text/plain', 'ustar' => 'application/x-ustar', 'vcd' => 'application/x-cdlink', 'vrml' => 'model/vrml', 'vxml' => 'application/voicexml+xml', 'wav' => 'audio/x-wav', 'wbmp' => 'image/vnd.wap.wbmp', 'wbxml' => 'application/vnd.wap.wbxml', 'webm' => 'video/webm', 'wml' => 'text/vnd.wap.wml', 'wmlc' => 'application/vnd.wap.wmlc', 'wmls' => 'text/vnd.wap.wmlscript', 'wmlsc' => 'application/vnd.wap.wmlscriptc', 'wmv' => 'video/x-ms-wmv', 'wrl' => 'model/vrml', 'xbm' => 'image/x-xbitmap', 'xht' => 'application/xhtml+xml', 'xhtml' => 'application/xhtml+xml', 'xls' => 'application/vnd.ms-excel', 'xml' => 'application/xml', 'xpm' => 'image/x-xpixmap', 'xsl' => 'application/xml', 'xslt' => 'application/xslt+xml', 'xul' => 'application/vnd.mozilla.xul+xml', 'xwd' => 'image/x-xwindowdump', 'xyz' => 'chemical/x-xyz', 'zip' => 'application/zip' ]; return isset($mime_types[$ext]) ? $mime_types[$ext] : 'application/octet-stream'; }
2022年06月21日
191 阅读
0 评论
0 点赞
2022-06-19
【PHP】PHP实现驼峰转下划线
function to_slash($array) { // 先转成json字符串,进行正则替换,再转换为数组 $tmp = json_encode($array); $tmp = strtolower(preg_replace('/((?<=[a-z])(?=[A-Z]))/', '_', $tmp)); $tmp = json_decode($tmp, true); return $tmp; } 原理: // 驼峰转下划线 // 先添加分隔符,再转成小写 // userId => user_id $str = preg_replace('/((?<=[a-z])(?=[A-Z]))/','_',$str); $str = strtolower($str); // 下划线转驼峰 // 同样先添加分隔符,再转成大写 // user_id => userId $array = explode('_',$str); array_walk($array,create_function('&$v','$v=ucwords($v);')); $str = implode('',$array); // 首字母转小写 $str{0} = strtolower($str{0})
2022年06月19日
91 阅读
0 评论
0 点赞
1
2
3