# 我觉得有点用的公共函数(I think it's a little bit useful)
---
## 格式化文件大小
```
/**
* [format_size 格式化文件大小]
* @param [int] $size [文件大小]
* @return [float/double] [格式化后的文件大小]
*/
function format_size($size) {
$arr = ['B', 'KB', 'M', 'G', 'T', 'P'];
$i = 0;
while ($size >= 1024) {
$size = $size / 1024;
$i++;
}
// 四舍五入进行返回
return round($size, 4).$arr[$i];
}
```
## 可逆加密算法 encrypt
```
/**
* [encrypt 可逆加密算法]
* @param [type] $data [description]
* @param [type] $key [description]
* @return [type] [description]
*/
function encrypt($data, $key) {
$key = md5($key);
$x = 0;
$len = strlen($data);
$l = strlen($data);
$char = '';
$str = '';
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);
}
```
## 解密算法 decrypt
```
/**
* [decrypt 解密算法]
* @param [type] $data [description]
* @param [type] $key [description]
* @return [type] [description]
*/
function decrypt($data, $key) {
$key = md5($key);
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
$char = "";
$str = "";
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;
}
```
## 导出Excel
```
// 导出excle
function export_to($data,$name=false,$type = 0){
if(!$name){$name=date("Y-m-d-H-i-s",time());}
$PHPExcel = new PHPExcel(); //实例化PHPExcel类,类似于在桌面上新建一个Excel表格
$PHPExcel->getActiveSheet()->fromArray($data);
$PHPExcel->getActiveSheet()->setTitle('Sheet1'); //给当前活动sheet设置名称
$PHPExcel->setActiveSheetIndex(0);
$fileName = './public/'.date('Y-m-d_', time()).time().'.xlsx';
$saveName = $name.date('Y-m-d', time()).'.xlsx';
$PHPWriter = PHPExcel_IOFactory::createWriter($PHPExcel,'Excel5');//按照指定格式生成Excel文件,‘Excel2007’表示生成2007版本的xlsx,‘Excel5’表示生成2003版本Excel文件
if ($type == 0) {
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器输出07Excel文件
header('Content-Type:application/vnd.ms-excel');//告诉浏览器将要输出Excel03版本文件
header('Content-Disposition: attachment;filename="'.$saveName.'"');//告诉浏览器输出浏览器名称
// header('Content-Disposition: attachment;filename="01simple.xlsx"');//告诉浏览器输出浏览器名称
header('Cache-Control: max-age=0');//禁止缓存
$PHPWriter->save("php://output");
}else{
$PHPWriter->save($fileName); //表示在$path路径下面生成demo.xlsx文件
}
}
```
## 无限极分类树
```
function list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $keys = 'id', $sort = 'asc', $root = 0)
{
// 创建Tree
$tree = array();
if (is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
$list[$key][$child] = [];
$refer [$data[$pk]] = &$list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree [] = &$list[$key];
$tree = my_sort($tree,$keys,$sort,SORT_NUMERIC);
} else {
if (isset ($refer [$parentId])) {
$parent = &$refer[$parentId];
$parent[$child] [] = &$list[$key];
$parent[$child] = my_sort($parent[$child],$keys,$sort,SORT_NUMERIC);
}
}
}
}
return $tree;
}
```
## 系统邮件发送函数
```
/**
* 系统邮件发送函数
* @param string $tomail 接收邮件者邮箱
* @param string $name 接收邮件者名称
* @param string $subject 邮件主题
* @param string $body 邮件内容
* @param string $attachment 附件列表
* @return boolean
* @author static7 <static7@qq.com>
使用方法:
$toemail='111111@qq.com';
$name = 'dqwdqqwdq';//收件人昵称
$subject='注册验证码';
$mail_tpl = model('MailTpl')->where('type', 'register')->find()->toArray();
$content = str_replace("\$code","123456",$mail_tpl['content']);
$result = send_mail($toemail,$name,$subject,$content);
dump($result);
*/
function send_mail($tomail, $name, $subject = '', $body = '', $attachment = null) {
$config_mail = model('Mail')->find()->toArray();
$shop = model('Config')->find();
$mail = new \PHPMailer(); //实例化PHPMailer对象
$mail->CharSet = 'UTF-8'; //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
$mail->IsSMTP(); // 设定使用SMTP服务
$mail->SMTPDebug = 0; // SMTP调试功能 0=关闭 1 = 错误和消息 2 = 消息
$mail->SMTPAuth = true; // 启用 SMTP 验证功能
if($config_mail['secure']){
$mail->SMTPSecure = 'ssl'; // 使用安全协议Enable TLS encryption, `ssl` also accepted
}else{
$mail->SMTPSecure = 'tls'; // 使用安全协议Enable TLS encryption, `ssl` also accepted
}
$mail->Host = $config_mail['host']; // SMTP 服务器
$mail->Port = $config_mail['port']; // SMTP服务器的端口号
$mail->Username = $config_mail['user']; // SMTP服务器用户名
$mail->Password = $config_mail['pass']; // SMTP服务器密码
$mail->SetFrom($config_mail['user'], $shop['title']);
$replyEmail = $config_mail['replyTo']; //留空则为发件人EMAIL
$replyName = '发送回复'; //回复名称(留空则为发件人名称)
$mail->AddReplyTo($replyEmail, $replyName);
$mail->Subject = $subject;
$mail->MsgHTML($body);
$mail->AddAddress($tomail, $name);
if (is_array($attachment)) { // 添加附件
foreach ($attachment as $file) {
is_file($file) && $mail->AddAttachment($file);
}
}
return $mail->Send() ? true : $mail->ErrorInfo;
}
```
## 获取当前url地址
```
/**
* [getActionUrl description]获取当前url
* @return [type] [description]
*/
function getActionUrl(){
$module = strtolower(request()->module());
$controller = strtolower(request()->controller());
$action = strtolower(request()->action());
return $module.'/'.$controller.'/'.$action;
}
```
## 截取多少长度的字符串并以省略号代替超过的部分
```php
if (!function_exists('strCut')) {
function strCut($str, $length)//$str为要进行截取bai的字符串,$length为截取长度(du汉字算一个字,字母算半个字)zhi
{
$str = trim($str);
$string = "";
if (strlen($str) > $length) {
for ($i = 0; $i < $length; $i++) {
if (ord($str) > 127) {
$string .= $str[$i] . $str[$i + 1] . $str[$i + 2];
$i = $i + 2;
} else {
$string .= $str[$i];
}
}
$string .= "...";
return $string;
}
return $str;
}
}
```
## Api请求curl方式
```php
if (!function_exists('api')) {
/**
* @param string $url
* @param string $params
* @param string $method
* @param array $header
* @throws \Exception
* @return
*/
function api(string $url, string $params = '', string $method = 'GET', array $header = array())
{
$opts = array(
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_HTTPHEADER => $header,
CURLOPT_HEADER => FALSE
);
switch(strtoupper($method)){
case 'GET':
$opts[CURLOPT_URL] = $url.'?';
if (!empty($params)) {
$opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
}
break;
case 'POST':
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_POST] = TRUE;
$opts[CURLOPT_POSTFIELDS] = $params;
break;
}
$ch = curl_init();
curl_setopt_array($ch, $opts);
$result = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if($error){
throw new Exception('curl执行出错');
}
return $result;
}
}
```
## HTTP curl请求API方法
```php
if (!function_exists('httpRequest')) {
function httpRequest($url, $method, $postfields = null, $headers = [], $debug = false)
{
$method = strtoupper($method);
$ci = curl_init();
/* Curl settings */
curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($ci, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 60); /* 在发起连接前等待的时间,如果设置为0,则无限等待 */
curl_setopt($ci, CURLOPT_TIMEOUT, 7); /* 设置cURL允许执行的最长秒数 */
curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
switch ($method) {
case "POST":
curl_setopt($ci, CURLOPT_POST, true);
if (!empty($postfields)) {
$tmpdatastr = is_array($postfields) ? http_build_query($postfields) : $postfields;
curl_setopt($ci, CURLOPT_POSTFIELDS, $tmpdatastr);
}
break;
default:
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method); /* //设置请求方式 */
break;
}
$ssl = preg_match('/^https:\/\//i', $url) ? true : false;
curl_setopt($ci, CURLOPT_URL, $url);
if ($ssl) {
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false); // https请求 不验证证书和hosts
curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, false); // 不从证书中检查SSL加密算法是否存在
}
//curl_setopt($ci, CURLOPT_HEADER, true); /*启用时会将头文件的信息作为数据流输出*/
curl_setopt($ci, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ci, CURLOPT_MAXREDIRS, 2);/*指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的*/
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ci, CURLINFO_HEADER_OUT, true);
/*curl_setopt($ci, CURLOPT_COOKIE, $Cookiestr); * *COOKIE带过去** */
$response = curl_exec($ci);
$requestinfo = curl_getinfo($ci);
$http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
if ($debug) {
echo "=====post data======\r\n";
var_dump($postfields);
echo "=====info===== \r\n";
print_r($requestinfo);
echo "=====response=====\r\n";
print_r($response);
}
curl_close($ci);
return $response;
}
}
```
## 获取当前日期是星期几
```php
if (!function_exists('getTimeWeek'))
{
/**
* 获取当前时间是星期几
* @param $time [当前时间戳]
* @param int $i [第几天之后 默认为0为今天]
* @return mixed
*/
function getTimeWeek($time, $i = 0)
{
$weekArray = [7, 1, 2, 3, 4, 5, 6];
$oneDay = 24 * 60 * 60;
return $weekArray[date('w', $time + $oneDay * $i)];
}
}
```
- PHP获取客户端浏览器信息和版本
- PHP获取客户端操作系统信息
- 无限级分类
- git使用
- 权限检测思路
- Vue学习
- 遇到的一些问题
- PHP的编码思维和技巧
- mysql复习
- tp5
- ThinkPHP5.x 公共函数
- TP5登录注册
- TP5使用模板继承
- ThinkPHP5.1 清除缓存
- thinkphp5实现安装程序
- 安全
- tp中实现跨域代码
- ThinkPHP5.1配合pjax实现菜单栏无刷新跳转
- 获取数据库版本和数据库大小
- 模型的基本CURD操作
- 商品spu
- 全局异常处理类
- ExceptionHandler
- BaseException
- PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
- 微信小程序
- wx:for
- tp6
- 分离的一些模块
- session开启
- Spring
- 依赖注入
- 数据结构
- 二叉树
- js获取地址栏变量
- PHP设计模式
- 面向对象
- PHP1
- PHP性能优化
- Java学习
- static关键字
- 多态
- 接口、阶乘
- 大佬给的面试题
- 访问量为5000万的博客系统设计
- PHP可变参数
- Nginx的配置案例
- 求数组中的最大值,并返回数组索引
- PHP面试方向
- PHP数组工具类ArrUtil
- 字符串工具类StrUtil
- PHP使用curl发送请求
- mysql
- PHP上传base64图片处理函数
- webstorm小程序常用配置
- 邮箱正则表达式
- leetcode mysql记录
- 函数库