首页
壁纸
统计
友联
留言
Search
1
飞牛NAS社区自动打卡签到
31 阅读
2
飞牛NAS部署宝塔面板
19 阅读
3
Deepin V25安装 1Panel启动失败的问题修复办法
16 阅读
4
Debain终端语言报错问题解决办法
13 阅读
5
123云盘资源分享链接
13 阅读
飞牛Nas
青龙面板
编程开发
Python
Java
Go
PHP
JavaScript
Typecho
系统问题
Linux
Windows
Debain
Deepin
资源分享
登录
/
注册
Search
标签搜索
飞牛NAS
Python
宝塔面板
PHP
函数
Linux
Docker
青龙面板
JavaScript
Typecho
伪静态
Nginx
Debain
123云盘
123Pan
资源
Deepin
1Panel
Windows
Xbox Game Bar
AiWeiYi
累计撰写
14
篇文章
累计收到
1
条评论
首页
栏目
飞牛Nas
青龙面板
编程开发
Python
Java
Go
PHP
JavaScript
Typecho
系统问题
Linux
Windows
Debain
Deepin
资源分享
页面
壁纸
统计
友联
留言
搜索到
5
篇与
的结果
2025-04-09
PHP 安装与配置教程
一、准备工作操作系统:Windows 10/11下载工具:浏览器(推荐 Chrome 或 Edge)存储空间:至少预留 200MB 可用空间二、安装 PHP下载 PHP访问 PHP 官网下载页面:https://windows.php.net/download选择适合你系统的版本:推荐下载 Non Thread Safe (NTS) 版本(如 php-8.2.10-nts-Win32-vs16-x64.zip)。如果你的系统是 32 位,选择 x86 版本。解压 PHP将下载的 ZIP 文件解压到一个目录(如 D:\PHP)。解压后,你会看到以下文件:php.exe:PHP 解释器。php.ini-development:PHP 配置文件模板。配置 PHP将 php.ini-development 文件重命名为 php.ini。打开 php.ini,找到以下配置项并修改:启用扩展(去掉前面的分号 ;):extension_dir = "ext"extension=curlextension=gdextension=mbstringextension=mysqliextension=pdo_mysqlextension=openssl设置时区:date.timezone = Asia/Shanghai配置环境变量右键“此电脑” → 属性 → 高级系统设置 → 环境变量。在“系统变量”中找到 Path,点击“编辑”。点击“新建”,输入 PHP 的安装路径(如 D:\PHP)。点击“确定”保存。验证安装打开命令提示符(Win + R → 输入 cmd → 回车)。输入以下命令:php -v{mtitle title="输出示例"/}三、安装 Composer(PHP 依赖管理工具)下载 Composer访问 Composer 官网:https://getcomposer.org/download下载 Windows 安装程序(Composer-Setup.exe)。安装 Composer双击 Composer-Setup.exe,启动安装程序。选择 PHP 路径(如 D:\PHP\php.exe)。勾选“Add Composer to your PATH”,点击“Install”。完成安装后,点击“Finish”。验证 Composer打开命令提示符,输入以下命令:composer --version{mtitle title="输出示例"/}四、配置 Composer 缓存位置默认情况下,Composer 会将下载的依赖包缓存到 C:\Users\<你的用户名>\AppData\Local\Composer。如果你想将缓存位置改为其他目录,可以按照以下步骤操作:设置环境变量右键“此电脑” → 属性 → 高级系统设置 → 环境变量。在“系统变量”中点击“新建”,输入:变量名:COMPOSER_CACHE_DIR变量值:自定义路径(如 D:\ComposerCache)。点击“确定”保存。验证缓存路径打开命令提示符,输入以下命令:composer config --global cache-dir{mtitle title="输出示例"/}五、常见问题问:PHP命令无效答:检查是否将 PHP 安装路径添加到环境变量 Path 中问:Composer 安装失败:答:确保 PHP 已正确安装,并且 php.ini 中启用了 openssl 扩展。问:缓存路径不生效:答:确保环境变量 COMPOSER_CACHE_DIR 已正确设置,并重启命令提示符。
2025年04月09日
5 阅读
0 评论
0 点赞
2025-04-04
Python安装教程
一、安装包下载官网下载:https://www.python.org/downloads/{mtitle title="打开网站后点击下载"/}二、安装步骤{mtitle title="双击打开安装包"/}{mtitle title="按顺序操作"/}{mtitle title="直接点击Next"/}{mtitle title="设置安装路径"/}{mtitle title="等待进度跑完"/}{mtitle title="安装完成,直接关闭窗口"/}三、测试环境1. 按下组合键 win + R 打开运行窗口 2. 在运行窗口中输入cmd,打开命令行界面3. 在命令行界面输入 python -V{mtitle title="输入cmd后回车"/}{mtitle title="出现版本号即安装成功"/}
2025年04月04日
11 阅读
0 评论
1 点赞
2025-03-27
Python文件批量修改
import os from pathlib import Path def menu_one(): folder_path = input("请输入需要批量修改文件名的路径:") content = input("请输入需要去掉的内容:") file_names = os.listdir(folder_path) for file_name in file_names: new_file_name = file_name.replace(content, '') os.rename(os.path.join(folder_path, file_name), os.path.join(folder_path, new_file_name)) print(f'{file_name} to {new_file_name}') def menu_two(): path = input("请输入需要批量修改文件名的路径:") prefix = input("请输入需要在文件名前添加的内容:") for file_name in os.listdir(path): # 重命名文件 os.rename(os.path.join(path, file_name), os.path.join(path, prefix + file_name)) print(f'{file_name} to {prefix + file_name}') def menu_three(): folder_path = input("请输入需要批量修改文件名的路径:") old = input("请输入修改前的内容:") new = input("请输入修改后的内容:") file_names = os.listdir(folder_path) for file_name in file_names: new_file_name = file_name.replace(old, new) os.rename(os.path.join(folder_path, file_name), os.path.join(folder_path, new_file_name)) print(f'{file_name} to {new_file_name}') def menu_four(): folder_path = input("请输入需要文件名需要批量添加后缀的路径:") ext = input("请输入需要添加的后缀(.exe)") folder_path = Path(folder_path) for file_path in folder_path.rglob('*'): if file_path.is_file(): new_file_name = f"{file_path}.{ext}" print(f"{file_path} to {new_file_name}") os.rename(file_path, new_file_name) def menu(): while True: print("1、删除文件名中指定的内容") print("2、文件名前面增加内容") print("3、修改文件名中指定内容") print("4、批量添加文件名后缀") mode = eval(input("输入对应序号:")) if mode == 1: menu_one() elif mode == 2: menu_two() elif mode == 3: menu_three() elif mode == 4: menu_four() else: print("选项错误") if __name__ == '__main__': menu()
2025年03月27日
6 阅读
1 评论
0 点赞
2025-03-27
网上收集到的一些常用函数
/** * @description: 校验身份证 * @param {*} * @return {*} */ export const validateIDCard = value => /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value); /** * @description: 校验支付宝账号 * @param {*} * @return {*} */ export const validateAlipay = value => /^1\d{10}$|^[a-zA-Z\d._-]*\@[a-zA-Z\d.-]{1,10}\.[a-zA-Z\d]{1,20}$/.test(value); /** * @description: 校验银行卡 * @param {*} * @return {*} */ export const validateBankCode = value => /^\d{13,19}$/.test(value); /** * @description: 校验手机号 * @param {*} * @return {*} */ export const validatePhone = value => /^1\d{10}$/.test(value); /** * @description: 函数节流 * @param {*} * @return {*} */ export const throttle = function (fn, delay = 1000) { let prev = 0; return function () { const now = Date.now(); if (now - prev > delay) { fn.apply(this, arguments); prev = Date.now(); } } } /** * @description: 获取随机字符串 * @param {*} * @return {*} */ export const randomString = () => Math.random().toString(36).substr(2); /** * @description: 将 BASE64 转换文件 * @param {*} * @return {*} */ export const dataURLtoFile = (dataurl, filename) => { const arr = dataurl.split(','); const mime = arr[0].match(/:(.*?);/)[1]; if (!filename) filename = `${Date.parse(new Date())}.jpg`; const bstr = window.atob(arr[1]); let n = bstr.length; const u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], filename, { type: mime }); } /** * @description: 压缩图片 * @param {*} * @return {*} */ export const compressImg = file => { const fileSize = parseFloat(Number.parseInt(file.size, 10) / 1024 / 1024).toFixed(2); const reader = new FileReader(); reader.readAsDataURL(file); return new Promise((resolve) => { reader.onload = e => { const img = new Image(); img.src = e.target.result; img.onload = () => { const w = img.width; const h = img.height; const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); let base64; canvas.setAttribute('width', w); canvas.setAttribute('height', h); ctx.drawImage(img, 0, 0, w, h); if (fileSize <= 1) { base64 = canvas.toDataURL(file.type, 1); } else if (fileSize <= 3) { base64 = canvas.toDataURL(file.type, 0.8); } else if (fileSize <= 5) { base64 = canvas.toDataURL(file.type, 0.5); } else { base64 = canvas.toDataURL(file.type, 0.1); } let fileName = file.name; fileName = fileName.replace(/^(.+)\.(.+)$/, (fullName, name, suffix) => name + Math.floor(Math.random() * (9999 - 1000) + 1000) + '.' + suffix); resolve(dataURLtoFile(base64, fileName)); }; }; }); }
2025年03月27日
6 阅读
0 评论
0 点赞
2025-03-27
我的一些常用的PHP函数
<?php // 应用公共文件,内置主要的数据处理方法 use Jenssegers\Agent\Agent; use think\facade\Cache; use think\facade\Config; use think\facade\Db; use think\facade\Request; function error_page_data() { return array( 'site_title' => get_system_config('site_title'), 'site_keywords' => get_system_config('site_keywords'), 'site_description' => get_system_config('site_description'), 'site_mail' => get_system_config('site_mail'), 'site_qq' => get_system_config('site_qq'), 'site_beian' => get_system_config('site_beian'), 'site_copyright' => get_system_config('site_copyright'), 'title' => "页面错误" ); } /* * 随机生成订单号 */ function get_orderid() { return date('YmdHis') . rand(10000000, 99999999); } /* * 随机字符串,默认长度10 * $num 长度 */ function get_string($num = 10) { $str = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'; $salt = substr(str_shuffle($str), 10, $num); return $salt; } /* * 判断访客是否是蜘蛛 */ function is_robot($except = '') { $ua = strtolower($_SERVER ['HTTP_USER_AGENT']); $botchar = "/(baidu|google|spider|soso|yahoo|sohu-search|yodao|robozilla|AhrefsBot)/i"; $except ? $botchar = str_replace($except . '|', '', $botchar) : ''; if (preg_match($botchar, $ua)) { return true; } return false; } /* * 判断是否是手机浏览器 */ function is_mobile() { if (isset($_SERVER['HTTP_VIA']) && stristr($_SERVER['HTTP_VIA'], "wap")) { return true; } elseif (isset($_SERVER['HTTP_ACCEPT']) && strpos(strtoupper($_SERVER['HTTP_ACCEPT']), "VND.WAP.WML")) { return true; } elseif (isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE'])) { return true; } elseif (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/(blackberry|configuration\/cldc|hp |hp-|htc |htc_|htc-|iemobile|kindle|midp|mmp|motorola|mobile|nokia|opera mini|opera |Googlebot-Mobile|YahooSeeker\/M1A1-R2D2|android|iphone|ipod|mobi|palm|palmos|pocket|portalmmm|ppc;|smartphone|sonyericsson|sqh|spv|symbian|treo|up.browser|up.link|vodafone|windows ce|xda |xda_)/i', $_SERVER['HTTP_USER_AGENT'])) { return true; } else { return false; } } /** * @param $email * @return bool */ function is_email($email) { $chars = "/^([a-z0-9+_]|-|\\.)+@(([a-z0-9_]|-)+\\.)+[a-z]{2,6}\$/i"; if (strpos($email, '@') !== false && strpos($email, '.') !== false) { if (preg_match($chars, $email)) { return true; } else { return false; } } else { return false; } } /** * @param $phone * @return bool */ function is_phone($phone) { $chars = "/^13[0-9]{1}[0-9]{8}$|15[0-9]{1}[0-9]{8}$|18[0-9]{1}[0-9]{8}$|17[0-9]{1}[0-9]{8}$/"; if (preg_match($chars, $phone)) { return true; } return false; } /** * @param $ip * @return false|mixed|string * 获取IP的详细地址 */ function get_ip_city($ip) { /* http://opendata.baidu.com/api.php?query=116.179.32.80&co=&resource_id=6006&oe=utf8 https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=116.179.32.80&co=&resource_id=6006&oe=utf8 */ $url = 'https://whois.pconline.com.cn/ipJson.jsp?json=true&ip='; $city = get_curl($url . $ip); $city = mb_convert_encoding($city, "UTF-8", "GB2312"); $city = json_decode($city, true); $location = $city['city'] ? $city['pro'] . $city['city'] : $city['pro']; return $location ?: $city['addr']; } //设置缓存 function set_cache($key, $value, $date = 86400) { Cache::set($key, $value, $date); } //读取缓存 function get_cache($key) { return Cache::get($key); } function clear_cache($key) { Cache::clear($key); } function get_system_config($name) { $content = ''; $type = Db::name('config')->where('name', $name)->value('type'); if ($type) { // 如果存在缓存则优先读取缓存 if (get_cache('system_config_' . $type)) { $array = get_cache('system_config_' . $type); } else { $array = Db::name('config')->field('name,content')->where('type', $type)->order('id asc')->select()->toArray(); set_cache('system_config_' . $type, $array); } foreach ($array as $value) { if ($value['name'] == $name) { $content = $value['content']; break; } } if ($content) { return $content; } else { return ''; } } else { return ''; } } //生成一个不会重复的字符串 function make_token($type = 1) { $str = md5(uniqid(md5(microtime(true)), true)); $str = sha1($str); //加密 if ($type == 1) { $str = strtoupper($str); } return $str; } /** * 将字符部分加密并输出 * @param unknown $str * @param unknown $start 从第几个位置开始加密(从1开始) * @param unknown $length 连续加密多少位 * @return string */ function encrypt_show($str, $start, $length) { $end = $start - 1 + $length; $array = str_split($str); foreach ($array as $k => $v) { if ($k >= $start - 1 && $k < $end) { $array[$k] = '*'; } } return implode('', $array); } /** * 加密函数 * @param string $txt 需要加密的字符串 * @param string $key 密钥 * @return string 返回加密结果 */ function ds_encrypt($txt, $key = '') { if (empty($txt)) return $txt; if (empty($key)) $key = md5(config('ds_config.setup_date')); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_."; $ikey = "-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm"; $nh1 = rand(0, 64); $nh2 = rand(0, 64); $nh3 = rand(0, 64); $ch1 = $chars{$nh1}; $ch2 = $chars{$nh2}; $ch3 = $chars{$nh3}; $nhnum = $nh1 + $nh2 + $nh3; $knum = 0; $i = 0; while (isset($key{$i})) $knum += ord($key{$i++}); $mdKey = substr(md5(md5(md5($key . $ch1) . $ch2 . $ikey) . $ch3), $nhnum % 8, $knum % 8 + 16); $txt = base64_encode(TIMESTAMP . '_' . $txt); $txt = str_replace(array('+', '/', '='), array('-', '_', '.'), $txt); $tmp = ''; $j = 0; $k = 0; $tlen = strlen($txt); $klen = strlen($mdKey); for ($i = 0; $i < $tlen; $i++) { $k = $k == $klen ? 0 : $k; $j = ($nhnum + strpos($chars, $txt{$i}) + ord($mdKey{$k++})) % 64; $tmp .= $chars{$j}; } $tmplen = strlen($tmp); $tmp = substr_replace($tmp, $ch3, $nh2 % ++$tmplen, 0); $tmp = substr_replace($tmp, $ch2, $nh1 % ++$tmplen, 0); $tmp = substr_replace($tmp, $ch1, $knum % ++$tmplen, 0); return $tmp; } /** * 解密函数 * @param string $txt 需要解密的字符串 * @param string $key 密匙 * @return string 字符串类型的返回结果 */ function ds_decrypt($txt, $key = '', $ttl = 0) { if (empty($txt)) return $txt; if (empty($key)) $key = md5(config('ds_config.setup_date')); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_."; $ikey = "-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm"; $knum = 0; $i = 0; $tlen = @strlen($txt); while (isset($key{$i})) $knum += ord($key{$i++}); $ch1 = @$txt{$knum % $tlen}; $nh1 = strpos($chars, $ch1); $txt = @substr_replace($txt, '', $knum % $tlen--, 1); $ch2 = @$txt{$nh1 % $tlen}; $nh2 = @strpos($chars, $ch2); $txt = @substr_replace($txt, '', $nh1 % $tlen--, 1); $ch3 = @$txt{$nh2 % $tlen}; $nh3 = @strpos($chars, $ch3); $txt = @substr_replace($txt, '', $nh2 % $tlen--, 1); $nhnum = $nh1 + $nh2 + $nh3; $mdKey = substr(md5(md5(md5($key . $ch1) . $ch2 . $ikey) . $ch3), $nhnum % 8, $knum % 8 + 16); $tmp = ''; $j = 0; $k = 0; $tlen = @strlen($txt); $klen = @strlen($mdKey); for ($i = 0; $i < $tlen; $i++) { $k = $k == $klen ? 0 : $k; $j = strpos($chars, $txt{$i}) - $nhnum - ord($mdKey{$k++}); while ($j < 0) $j += 64; $tmp .= $chars{$j}; } $tmp = str_replace(array('-', '_', '.'), array('+', '/', '='), $tmp); $tmp = trim(base64_decode($tmp)); if (preg_match("/\d{10}_/s", substr($tmp, 0, 11))) { if ($ttl > 0 && (TIMESTAMP - (int)substr($tmp, 0, 11) > $ttl)) { $tmp = null; } else { $tmp = substr($tmp, 11); } } return $tmp; } /** * 生成密码hash值 * @param string $password * @return string */ function encryption_hash(string $password): string { return password_hash($password, PASSWORD_DEFAULT); } /** * 获取runtime根目录路径 * @return string */ function runtime_root_path(): string { return dirname(runtime_path()) . DIRECTORY_SEPARATOR; } /** * 写入日志 (使用tp自带驱动记录到runtime目录中) * @param mixed $value * @param string $type */ function log_record($value, string $type = 'info') { $content = is_string($value) ? $value : print_r($value, true); Log::record($content, $type); } /** * 隐藏手机号中间四位 13012345678 -> 130****5678 * @param string $mobile 手机号 * @return string */ function hide_mobile(string $mobile): string { return substr_replace($mobile, '****', 3, 4); } /** * 获取当前系统版本号 * @return string * @throws BaseException */ function get_version(): string { return Auth_Version; } //读取文件配置 function get_config($key) { return Config::get($key); } function get_ip() { return request()->ip(); } /** * 获取当前请求的变量,并进行安全过滤,防止xss注入攻击 * @param string $key * @return mixed */ function get_params(string $key = "", $default = '', $filter = 'htmlspecialchars') { return Request::param($key, $default, $filter); } /** * 转义经过安全过滤后的值 * @param $content * @return string */ function safe_decode($content): string { return htmlspecialchars_decode($content); } //判断程序是否完成安装 function is_installed() { static $isInstalled; if (empty($isInstalled)) { $isInstalled = file_exists(Auth_Root . 'app/install/install.lock'); } return $isInstalled; } /** * @param int $type 1获取时间,2获取时间戳 * @return false|int|string */ function get_date(int $type = 1) { if ($type == 1) { $res = date('Y-m-d H:i:s'); } elseif ($type == 2) { $res = time(); } return $res; } function get_agent($type = '') { $agent = new Agent(); $data = array( // 获取操作系统。(Ubuntu,Windows,OS X等) 'browser' => $agent->browser(), // 获取设备名称(如果是移动设备)。(iPhone,Nexus,华硕平板电脑等) 'device' => $agent->device(), // 获取操作系统。(Ubuntu,Windows,OS X等) 'platform' => $agent->platform(), // 获取浏览器的接受语言 'languages' => $agent->languages() ); if ($type) { return $data[$type]; } else { return $data; } } /** * @return int */ function get_code(): int { return rand(111111, 999999); } function Ping($Url, $length = 4): string { $start = microtime(true); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $Url); curl_setopt($curl, CURLOPT_HEADER, 1); curl_setopt($curl, CURLOPT_NOBODY, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); curl_close($curl); $end = microtime(true); if (!empty($result)) { return round(number_format($end - $start, 10, '.', ''), $length) . '秒'; } return '域名[ ' . $Url . ' ]无法访问'; } /* * Action 网页请求操作 * $url 需要请求的地址 * $post 需要POST提交的数据 * $referer 在HTTP请求头中"Referer: "的内容 * $cookie 需要附带的cookie * $header 将头文件的信息作为数据流输出 * $ua 在HTTP请求中包含一个"User-Agent: "头的字符串 * $nobody 启用时将不对HTML中的BODY部分进行输出 * $addheader 设置HTTP头字段的数组 */ function get_curl($url, $post = 0, $referer = 0, $cookie = 0, $header = 0, $ua = 0, $nobaody = 0, $addheader = 0) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $httpheader[] = "Accept: */*"; $httpheader[] = "Accept-Encoding: gzip,deflate,sdch"; $httpheader[] = "Accept-Language: zh-CN,zh;q=0.8"; $httpheader[] = "Connection: close"; if ($addheader) { $httpheader = array_merge($httpheader, $addheader); } curl_setopt($ch, CURLOPT_TIMEOUT, 30); if ($post) { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader); if ($header) { curl_setopt($ch, CURLOPT_HEADER, TRUE); } if ($cookie) { curl_setopt($ch, CURLOPT_COOKIE, $cookie); } if ($referer) { if ($referer == 1) { curl_setopt($ch, CURLOPT_REFERER, 'http://m.qzone.com/infocenter?g_f='); } else { curl_setopt($ch, CURLOPT_REFERER, $referer); } } if ($ua) { curl_setopt($ch, CURLOPT_USERAGENT, $ua); } else { curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'); } if ($nobaody) { curl_setopt($ch, CURLOPT_NOBODY, 1); } curl_setopt($ch, CURLOPT_ENCODING, "gzip"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $ret = curl_exec($ch); curl_close($ch); return $ret; } /* * $to 收件人邮箱 * $subject 邮件标题 * $content 邮件内容 * 发送邮件函数 */ function send_email($to, $subject = '', $content = '') { $mail = new PHPMailer\PHPMailer\PHPMailer(); try { //设定邮件编码 $mail->CharSet = "UTF-8"; // 调试模式输出 $mail->SMTPDebug = 0; // 使用SMTP $mail->isSMTP(); // SMTP服务器 $mail->Host = get_system_config('mail_smtp'); // 允许 SMTP 认证 $mail->SMTPAuth = true; // SMTP 用户名 即邮箱的用户名 $mail->Username = get_system_config('mail_user'); // SMTP 密码 部分邮箱是授权码(例如163邮箱) $mail->Password = get_system_config('mail_pass'); // 允许 TLS 或者 ssl协议 if (get_system_config('mail_encrypt')) { $mail->SMTPSecure = get_system_config('mail_encrypt'); } //端口 - likely to be 25, 465 or 587,具体要看邮箱服务器支持 $mail->Port = get_system_config('mail_port'); //发件人 $mail->setFrom(get_system_config('mail_user'), get_system_config('mail_name')); //接收邮件方 if (is_array($to)) { foreach ($to as $v) { $mail->addAddress($v); } } else { $mail->addAddress($to); } //回复的时候回复给哪个邮箱 建议和发件人一致 //$mail->addReplyTo(get_system_config('mail_user')); //抄送 //$mail->addCC('cc@example.com'); //密送 //$mail->addBCC('bcc@example.com'); // 添加附件 //$mail->addAttachment('../../'.$mail_file); // 发送附件并且重命名 // $mail->addAttachment('../thumb-1.jpg', 'new.jpg'); // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容 $mail->isHTML(true); // 邮件标题 $mail->Subject = get_system_config('site_title') . ' - ' . $subject; // 邮件HTML内容 $mail->Body = mail_view($content); // 邮件纯文本内容 $mail->AltBody = $content; // 发送 $mail->send(); return true; } catch (Exception $e) { return $mail->ErrorInfo; } } /* * $content 邮件内容 * 邮件模板 */ function mail_view($content) { $image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIUAAABXCAMAAAAd8nYqAAADAFBMVEUAAADW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1taqJyaLAAAA/3RSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1O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'; $template = ' <style> .box_one{ position: relative; color:#555; font:12px/1.5 Microsoft YaHei,Tahoma,Helvetica,Arial,sans-serif; max-width:600px; margin:50px auto; border-radius: 5px; box-shadow:0 5px 10px#aaaaaa; background: 0 0 repeat-x#FFF; background-image: -webkit-repeating-linear-gradient(135deg, #4882CE,#4882CE 20px, #FFF 20px, #FFF 35px, #EB1B2E 35px,#EB1B2E 55px, #FFF 55px, #FFF 70px); background-image:repeating-linear-gradient(-45deg, #4882CE, #4882CE 20px, #FFF 20px, #FFF 35px, #EB1B2E 35px, #EB1B2E 55px, #FFF 55px, #FFF 70px); background-size: 100% 10px; } .box_two{ position: absolute; right: 15px; top: 20px; width:133px; height: 87px; } </style> <div class="box_one"> <img class="box_two" src="' . $image . '"/> <div style="padding: 0 15px 15px;"> <h2 style="border-bottom:1px solid #e9e9e9;font-size:18px;font-weight:normal;padding:20px 0 10px;"> ' . get_system_config('mail_name') . ' </h2> <p><span style="color: #007bfc;">' . $content . '</span></p> </div> <div style="color:#888;padding:10px;border-top:1px solid #e9e9e9;background:#f5f5f5;border-radius: 0 0 5px 5px;"> <p style="margin: 0;padding: 0;text-align: center;"> Copyright © <a href="' . request()->domain() . '" target="_blank">' . get_system_config('site_copyright') . '</a> All Rights Reserved.</p> <p style="color: red;margin: 0;padding: 0;text-align: center;">本邮件由系统发送,请勿回复</p> </div> </div> '; return $template; } function url_status($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_exec($ch); $res = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 200 curl_close($ch); return $res; }
2025年03月27日
3 阅读
0 评论
0 点赞