= 0 ? true : false; } /** * @notes 检查文件是否可写 * @param string $dir * @return bool * @author 乔峰 * @date 2021/12/28 18:27 */ function check_dir_write(string $dir = '') : bool { $route = base_path() . '/' . $dir; return is_writable($route); } /** * @notes 随机生成token值 * @param string $extra * @return string * @author 乔峰 * @date 2021/12/28 18:24 */ function create_token(string $extra = '') : string { return md5($extra . time()); } /** * @notes 生成密码加密密钥 * @param string $plaintext * @param string $salt * @return string * @author 段誉 * @date 2021/12/28 18:24 */ function create_password(string $plaintext, string $salt) : string { return md5($salt . md5($plaintext . $salt)); } /** * 多级线性结构排序 * 转换前: * [{"id":1,"pid":0,"name":"a"},{"id":2,"pid":0,"name":"b"},{"id":3,"pid":1,"name":"c"}, * {"id":4,"pid":2,"name":"d"},{"id":5,"pid":4,"name":"e"},{"id":6,"pid":5,"name":"f"}, * {"id":7,"pid":3,"name":"g"}] * 转换后: * [{"id":1,"pid":0,"name":"a","level":1},{"id":3,"pid":1,"name":"c","level":2},{"id":7,"pid":3,"name":"g","level":3}, * {"id":2,"pid":0,"name":"b","level":1},{"id":4,"pid":2,"name":"d","level":2},{"id":5,"pid":4,"name":"e","level":3}, * {"id":6,"pid":5,"name":"f","level":4}] * @param array $data 线性结构数组 * @param string $symbol 名称前面加符号 * @param string $name 名称 * @param string $id_name 数组id名 * @param string $parent_id_name 数组祖先id名 * @param int $level 此值请勿给参数 * @param int $parent_id 此值请勿给参数 * @return array */ function linear_to_tree($data, $sub_key_name = 'sub', $id_name = 'id', $parent_id_name = 'pid', $parent_id = 0) { $tree = []; foreach ($data as $row) { if ($row[$parent_id_name] == $parent_id) { $temp = $row; $child = linear_to_tree($data, $sub_key_name, $id_name, $parent_id_name, $row[$id_name]); if ($child) { $temp[$sub_key_name] = $child; } $tree[] = $temp; } } return $tree; } function createDir($path){ if (is_dir($path)) { return true; } $parent = dirname($path); if (!is_dir($parent)) { if (!createDir($parent)) { return false; } } return mkdir($path); } if (!function_exists('download')) { /** * 获取\think\response\Download对象实例 * @param string $filename 要下载的文件 * @param string $name 显示文件名 * @param bool $content 是否为内容 * @param int $expire 有效期(秒) * @return \think\response\File */ function download(string $filename, string $name = '', bool $content = false, int $expire = 180) { return response()->download($filename,$name); } } /** * @notes 删除目标目录 * @param $path * @param $delDir * @return bool|void * @author 段誉 * @date 2022/4/8 16:30 */ function del_target_dir($path, $delDir) { //没找到,不处理 if (!file_exists($path)) { return false; } //打开目录句柄 $handle = opendir($path); if ($handle) { while (false !== ($item = readdir($handle))) { if ($item != "." && $item != "..") { if (is_dir("$path/$item")) { del_target_dir("$path/$item", $delDir); } else { unlink("$path/$item"); } } } closedir($handle); if ($delDir) { return rmdir($path); } } else { if (file_exists($path)) { return unlink($path); } return false; } } /** * @notes 获取无前缀数据表名 * @param $tableName * @return mixed|string * @author 段誉 * @date 2022/12/12 15:23 */ function get_no_prefix_table_name($tableName) { $tablePrefix = config('database.connections.mysql.prefix'); $prefixIndex = strpos($tableName, $tablePrefix); if ($prefixIndex !== 0 || $prefixIndex === false) { return $tableName; } $tableName = substr_replace($tableName, '', 0, strlen($tablePrefix)); return trim($tableName); }