/**
* 系统错误处理
* @param <type> message 错误信息
* @param <type>show 是否显示信息
* @param <type> save 是否存入日志
* @param <type>halt 是否中断访问
*/
function system_error(message,show = true, save = true,halt = true) {
......
}
/**
* 更新 session
* @global <type> _G
* @staticvar booleanupdated
* @param boolean force
* @return boolean
*/
function updatesession(force = false) {
......
}
/**
* 获取 microtime float 数值,为了兼容php4
* @return <float>
*/
function dmicrotime() {
......
}
/**
* 设置全局 _G 中的变量
* @global <array>_G
* @param <string> key 键
* @param <string>value 值
* @param <mix> group 组(准备废弃,尽量不用)
* @return true
*
* @example
* setglobal('test', 1); //_G['test'] = 1;
* setglobal('config/test/abc') = 2; //_G['config']['test']['abc'] = 2;
*
*/
function setglobal(key , value,group = null) {
......
}
/**
* 获取全局变量 _G 当中的某个数值
* @global_G
* @param <type> key
* @param <type>group 计划废弃的参数,不建议使用
* @return <mix>
*
* v = getglobal('test'); //v = _G['test']
*v = getglobal('test/hello/ok'); // v =_G['test']['hello']['ok']
*/
function getglobal(key,group = null) {
......
}
/**
* 取出 get, post, cookie 当中的某个变量
*
* @param string k key 值
* @param stringtype 类型
* @return mix
*/
function getgpc(k,type='GP') {
......
}
/**
* 根据uid 获取用户基本数据
* @staticvar array users 存放已经获取的用户的信息,避免重复查库
* @param <int>uid
* @return <array>
*/
function getuserbyuid(uid) {
......
}
/**
* 获取当前用户的扩展资料
* @paramfield 字段
*/
function getuserprofile(field) {
......
}
/**
* 对字符串或者输入进行 addslashes 操作
* @param <mix>string
* @param <int> force
* @return <mix>
*/
function daddslashes(string, force = 1) {
......
}
/**
* 对字符串进行加密和解密
* @param <string>string
* @param <string> operation DECODE 解密 | ENCODE 加密
* @param <string>key 当为空的时候,取全局密钥
* @param <int> expiry 有效期,单位秒
* @return <string>
*/
function authcode(string, operation = 'DECODE',key = '', expiry = 0) {
......
}
/**
* 远程文件文件请求兼容函数
*/
function dfsockopen(url, limit = 0,post = '', cookie = '',bysocket = FALSE, ip = '',timeout = 15, block = TRUE) {
......
}
/**
* HTML转义字符
* @paramstring - 字符串
* @return 返回转义好的字符串
*/
function dhtmlspecialchars(string) {
......
}
/**
* 退出程序 同 exit 的区别, 对输出数据会进行 重新加工和处理
* 通常情况下,我们建议使用本函数终止程序, 除非有特别需求
* @param <type>message
*/
function dexit(message = '') {
......
}
/**
* 同 php header函数, 针对 location 跳转做了特殊处理
* @param <type>string
* @param <type> replace
* @param <type>http_response_code
*/
function dheader(string,replace = true, http_response_code = 0) {
......
}
/**
* 设置cookie
* @paramvar - 变量名
* @param value - 变量值
* @paramlife - 生命期
* @param prefix - 前缀
* @paramhttponly - 安全属性
*/
function dsetcookie(var,value = '', life = 0,prefix = 1, httponly = false) {
......
}
/**
* 获取cookie
* @paramkey - cookie名称,不需要带前缀
*/
function getcookie(key) {
......
}
/**
* 获取文件扩展名
* @paramfilename 文件名
*/
function fileext(filename) {
......
}
/**
* 检查是否是以手机浏览器进入(IN_MOBILE)
*/
function checkmobile() {
......
}
/**
* 字符串方式实现 preg_match("/(s1|s2|s3)/",string, match)
* @param stringstring 源字符串
* @param array arr 要查找的字符串 如array('s1', 's2', 's3')
* @param boolreturnvalue 是否返回找到的值
* @return bool
*/
function dstrpos(string, &arr, returnvalue = false) {
......
}
/**
* 检查邮箱是否有效
* @paramemail 要检查的邮箱
* @param 返回结果
*/
function isemail(email) {
......
}
/**
* 问题答案加密
* @paramquestionid - 问题
* @param answer - 答案
* @return 返回加密的字串
*/
function quescrypt(questionid, answer) {
......
}
/**
* 产生随机码
* @paramlength - 要多长
* @param numberic - 数字还是字符串
* @return 返回字符串
*/
function random(length, numeric = 0) {
......
}
/**
* 判断一个字符串是否在另一个字符串中存在
*
* @param string 原始字串string
* @param string 查找 find
* @return boolean
*/
function strexists(string, find) {
......
}
/**
* 获取头像
*
* @param intuid 需要获取的用户UID值
* @param string size 获取尺寸 'small', 'middle', 'big'
* @param booleanreturnsrc 是否直接返回图片src
* @param boolean real 是否返回真实图片
* @param booleanstatic 是否返回真实路径
* @param string ucenterurl 强制uc路径
*/
function avatar(uid, size = 'middle',returnsrc = FALSE, real = FALSE,static = FALSE, ucenterurl = '') {
......
}
/**
* 加载语言
* 语言文件统一为lang = array();
* @param file - 语言文件,可包含路径如 forum/xxx home/xxx
* @paramlangvar - 语言文字索引
* @param vars - 变量替换数组
* @paramdefault - 指定默认值,当找不到对应言包时生效
* @return 语言文字
*/
function lang(file,langvar = null, vars = array(),default = null) {
......
}
/**
* 检查模板源文件是否更新
* 当编译文件不存时强制重新编译
* 当 tplrefresh = 1 时检查文件
* 当 tplrefresh > 1 时,则根据 tplrefresh 取余,无余时则检查更新
*
*/
function checktplrefresh(maintpl,subtpl, timecompare,templateid, cachefile,tpldir, file) {
......
}
/**
* 解析模板
* @return 返回域名
*/
function template(file, templateid = 0,tpldir = '', gettplfile = 0,primaltpl='') {
......
}
/**
* 对某id进行个性化md5
*/
function modauthkey(id) {
......
}
/**
* 获得当前应用页面选中的导航id
*/
function getcurrentnav() {
......
}
/**
* 读取缓存
* @paramcachenames - 缓存名称数组或字串
*/
function loadcache(cachenames,force = false) {
......
}
/**
* 通过memcache\mysql\file等几种手段读缓存
* @param mixed cachenames 缓存名的数组或字串
*/
function cachedata(cachenames) {
......
}
/**
* 格式化时间
* @param timestamp - 时间戳
* @paramformat - dt=日期时间 d=日期 t=时间 u=个性化 其他=自定义
* @param timeoffset - 时区
* @return string
*/
function dgmdate(timestamp, format = 'dt',timeoffset = '9999', uformat = '') {
......
}
/**
得到时间戳
*/
function dmktime(date) {
......
}
/**
* 更新缓存
* @param cachename - 缓存名称
* @paramdata - 缓存数据
*/
function save_syscache(cachename,data) {
......
}
/**
* Portal模块
* @param parameter - 参数集合
*/
function block_get(parameter) {
......
}
/**
* Portal 模块显示
*
* @param parameter - 参数集合
*/
function block_display(bid) {
......
}
/**
* 返回库文件的全路径
*
* @param string libname 库文件分类及名称
* @param stringfolder 模块目录'module','include','class'
* @return string
*
* @example require DISCUZ_ROOT.'./source/function/function_cache.php'
* @example 我们可以利用此函数简写为:require libfile('function/cache');
*
*/
function libfile(libname,folder = '') {
......
}
/**
* 针对uft-8进行特殊处理的strlen
* @param string str
* @return int
*/
function dstrlen(str) {
......
}
/**
* 根据中文裁减字符串
* @param string - 字符串
* @paramlength - 长度
* @param doc - 缩略后缀
* @return 返回带省略号被裁减好的字符串
*/
function cutstr(string, length,dot = ' ...') {
......
}
/**
* 论坛 aid url 生成
*/
function aidencode(aid,type = 0, tid = 0) {
......
}
/**
* 返回论坛缩放附件图片的地址 url
*/
function getforumimg(aid, nocache = 0,w = 140, h = 140,type = '') {
......
}
/**
* 获取rewrite字符串
* @param string type 需要获取的rewite
* @param booleanreturntype true:直接返回href, false:返回a标签
* @param string host 可选网站域名
* @return string
*/
function rewriteoutput(type, returntype,host) {
......
}
/**
* 手机模式下替换所有链接为mobile=yes形式
* @param file - 正则匹配到的文件字符串
* @paramfile - 要被替换的字符串
* @replace 替换后字符串
*/
function mobilereplace(file, replace) {
......
}
/**
* 手机的output函数
*/
function mobileoutput() {
......
}
/**
* 系统输出
* @return 返回内容
*/
function output() {
......
}
/**
* ajax footer使用输出页面内容
*/
function output_ajax() {
......
}
/**
* 运行钩子
*/
function runhooks() {
......
}
/**
* 执行插件脚本
*/
function hookscript(script, hscript,type = 'funcs', param = array(),func = '') {
......
}
/**
* 获取插件模块
*/
function pluginmodule(pluginid,type) {
......
}
/**
* 执行积分规则
* @param String action: 规则action名称
* @param Integeruid: 操作用户
* @param array extrasql: common_member_count的额外操作字段数组格式为 array('extcredits1' => '1')
* @param Stringneedle: 防重字符串
* @param Integer coef: 积分放大倍数
* @param Integerupdate: 是否执行更新操作
* @param Integer fid: 版块ID
* @return 返回积分策略
*/
function updatecreditbyaction(action, uid = 0,extrasql = array(), needle = '',coef = 1, update = 1,fid = 0) {
......
}
/**
* 检查积分下限
* @param string action: 策略动作Action或者需要检测的操作积分值使如extcredits1积分进行减1操作检测array('extcredits1' => -1)
* @param Integeruid: 用户UID
* @param Integer coef: 积分放大倍数/负数为减分操作
* @param Integerreturnonly: 只要返回结果,不用中断程序运行
*/
function checklowerlimit(action,uid = 0, coef = 1,fid = 0, returnonly = 0) {
......
}
/**
* 批量执行某一条策略规则
* @param Stringaction: 规则action名称
* @param Integer uids: 操作用户可以为单个uid或uid数组
* @param arrayextrasql: common_member_count的额外操作字段数组格式为 array('extcredits1' => '1')
* @param Integer coef: 积分放大倍数,当为负数时为反转操作
* @param Integerfid: 版块ID
*/
function batchupdatecredit(action,uids = 0, extrasql = array(),coef = 1, fid = 0) {
......
}
/**
* 添加积分
* @param Integeruids: 用户uid或者uid数组
* @param String dataarr: member count相关操作数组,例: array('threads' => 1, 'doings' => -1)
* @param Booleancheckgroup: 是否检查用户组 true or false
* @param String operation: 操作类型
* @param Integerrelatedid:
* @param String ruletxt: 积分规则文本
*/
function updatemembercount(uids, dataarr = array(),checkgroup = true, operation = '',relatedid = 0, ruletxt = '') {
if(!empty(uids) && (is_array(dataarr) &&dataarr)) {
require_once libfile('function/credit');
return _updatemembercount(uids,dataarr, checkgroup,operation, relatedid,ruletxt);
}
return true;
}
/**
* 校验用户组
* @param uid
*/
function checkusergroup(uid = 0) {
......
}
/**
* 调试信息
*/
function debuginfo() {
......
}
/**
* 随机取出一个站长推荐的条目
* @param module 当前模块
* @return array
*/
function getfocus_rand(module) {
......
}
/**
* 检查验证码正确性
* @param value 验证码变量值
*/
function check_seccode(value, idhash) {
......
}
/**
* 检查验证问答正确性
* @paramvalue 验证问答变量值
*/
function check_secqaa(value,idhash) {
......
}
/**
* 获取广告
*/
function adshow(parameter) {
......
}
/**
* 显示提示信息
* @parammessage - 提示信息,可中文也可以是 lang_message.php 中的数组 key 值
* @param url_forward - 提示后跳转的 url
* @paramvalues - 提示信息中可替换的变量值 array(key => value ...) 形式
* @param extraparam - 扩展参数 array(key => value ...) 形式
* 跳转控制
header header跳转
location location JS 跳转,限于 msgtype = 2、3
timeout 定时跳转
refreshtime 自定义跳转时间
closetime 自定义关闭时间,限于 msgtype = 2,值为 true 时为默认
locationtime 自定义跳转时间,限于 msgtype = 2,值为 true 时为默认
内容控制
alert alert 图标样式 right/info/error
return 显示请返回
redirectmsg 下载时用的提示信息,当跳转时显示的信息样式
0:如果您的浏览器没有自动跳转,请点击此链接
1:如果 n 秒后下载仍未开始,请点击此链接
msgtype 信息样式
1:非 Ajax
2:Ajax 弹出框
3:Ajax 只显示信息文本
showmsg 显示信息文本
showdialog 关闭原弹出框显示 showDialog 信息,限于 msgtype = 2
login 未登录时显示登录链接
extrajs 扩展 js
striptags 过滤 HTML 标记
Ajax 控制
handle 执行 js 回调函数
showid 控制显示的对象 ID
*/
function showmessage(message, url_forward = '',values = array(), extraparam = array(),custom = 0) {
......
}
/**
* 检查是否正确提交了表单
* @param var 需要检查的变量
* @paramallowget 是否允许GET方式
* @param seccodecheck 验证码检测是否开启
* @return 返回是否正确提交了表单
*/
function submitcheck(var, allowget = 0,seccodecheck = 0, secqaacheck = 0) {
......
}
/**
* 分页
* @paramnum - 总数
* @param perpage - 每页数
* @paramcurpage - 当前页
* @param mpurl - 跳转的路径
* @parammaxpages - 允许显示的最大页数
* @param page - 最多显示多少页码
* @paramautogoto - 最后一页,自动跳转
* @param simple - 是否简洁模式(简洁模式不显示上一页、下一页和页码跳转)
* @return 返回分页代码
*/
function multi(num, perpage,curpage, mpurl,maxpages = 0, page = 10,autogoto = FALSE, simple = FALSE) {
......
}
/**
* 只有上一页下一页的分页(无需知道数据总数)
* @paramnum - 本次所取数据条数
* @param perpage - 每页数
* @paramcurpage - 当前页
* @param mpurl - 跳转的路径
* @return 返回分页代码
*/
function simplepage(num, perpage,curpage, mpurl) {
......
}
/**
* 词语过滤
* @parammessage - 词语过滤文本
* @return 成功返回原始文本,否则提示错误或被替换
*/
function censor(message,modword = NULL, return = FALSE) {
......
}
/**
词语过滤,检测是否含有需要审核的词
*/
function censormod(message) {
......
}
/**
* 刷新重定向
*/
function dreferer(default = '') {
......
}
/**
* 远程FTP使用
*/
function ftpcmd(cmd, arg1 = '') {
......
}
/**
* 编码转换
* @param <string>str 要转码的字符
* @param <string> in_charset 输入字符集
* @param <string>out_charset 输出字符集(默认当前)
* @param <boolean> ForceTable 强制使用码表(默认不强制)
*
*/
function diconv(str, in_charset,out_charset = CHARSET, ForceTable = FALSE) {
......
}
/**
* 重建数组
* @param <string>array 需要反转的数组
* @return array 原数组与的反转后的数组
*/
function renum(array) {
......
}
/**
* 获取当前脚本在线人数
* @param <int>fid 分类 ID,版块、群组 的 id,
* @param <int> tid 内容 ID,帖子 的 id
*/
function getonlinenum(fid = 0, tid = 0) {
......
}
/**
* 字节格式化单位
* @paramfilesize - 大小(字节)
* @return 返回格式化后的文本
*/
function sizecount(size) {
......
}
/**
* 写入运行日志
*/
function writelog(file, log) {
......
}
/**
* 调色板
* @param <type>colorid
* @param <type> id
* @param <type>background
* @return <type>
*/
function getcolorpalette(colorid,id, background,fun = '') {
......
}
/**
* 取得某标志位的数值 (0|1)
*
* @param 数值 status
* @param 位置position
* @return 0 | 1
*/
function getstatus(status,position) {
......
}
/**
* 设置某一bit位的数值 0 or 1
*
* @param int position 1-16
* @param intvalue 0|1
* @param 原始数值 baseon 0x0000-0xffff
* @return int
*/
function setstatus(position, value,baseon = null) {
......
}
/**
* 通知
* @param Integer touid: 通知给谁
* @param Stringtype: 通知类型
* @param String note: 语言key
* @param Arraynotevars: 语言变量对应的值
* @param Integer system: 是否为系统通知 0:非系统通知; 1:系统通知
*/
function notification_add(touid, type,note, notevars = array(),system = 0) {
......
}
/**
* 发送管理通知
* @param type - 通知类型
*/
function manage_addnotify(type, from_num = 0,langvar = array()) {
......
}
/**
* 发送短消息(兼容提醒)
* @param toid - 接收方id
* @paramsubject - 标题
* @param message - 内容
* @paramfromid - 发送方id
*/
function sendpm(toid,subject, message,fromid = '', replypmid = 0,isusername = 0, type = 0) {
......
}
/**
*
* 通过tid得到相应的单一post表名或post表集合
* @param <mix>tids: 允许传进单个tid,也可以是tid集合
* @param primary: 是否只查主题表 0:遍历所有表;1:只查主表
* @return 当传进来的是单一的tid将直接返回表名,否则返回表集合的二维数组例:array('forum_post' => array(tids),'forum_post_1' => array(tids))
* @TODO tid传进来的是字符串的,返回单个表名,传进来的是数组的,不管是不是一个数组,返回的还是数组,保证进出值对应
*/
function getposttablebytid(tids, primary = 0) {
......
}
/**
* 获取论坛帖子表名
* @param <int>tableid: 分表ID,默认为:fourm_post表
* @param <boolean> prefix: 是否默认带有表前缀
* @return forum_post or forum_post_*
*/
function getposttable(tableid = 0, prefix = false) {
......
}
/**
* 内存读写接口函数
*
* @param 命令cmd (set|get|rm|check)
* @param 键值 key
* @param 数据value
* @param 有效期 ttl
* @return mix
*
* @example set : 写入内存ret = memory('set', 'test', 'ok')
* @example get : 读取内存 data = memory('get', 'test')
* @example rm : 删除内存ret = memory('rm', 'test')
* @example check : 检查内存功能是否可用 allow = memory('check')
*/
function memory(cmd, key='',value='', ttl = 0) {
......
}
/**
* ip允许访问
* @paramip 要检查的ip地址
* @param - accesslist 允许访问的ip地址
* @param 返回结果
*/
function ipaccess(ip, accesslist) {
......
}
/**
* ip限制访问
* @paramip 要检查的ip地址
* @param 返回结果
*/
function ipbanned(onlineip) {
......
}
/**
* 系统级消息
*/
function sysmessage(message) {
......
}
/**
* 论坛权限
* @param permstr - 权限信息
* @paramgroupid - 只判断用户组
* @return 0 无权限 > 0 有权限
*/
function forumperm(permstr,groupid = 0) {
......
}
/**
* PHP 兼容性函数
*/
if(!function_exists('file_put_contents')) {
if(!defined('FILE_APPEND')) define('FILE_APPEND', 8);
function file_put_contents(filename,data, flag = 0) {return = false;
if(fp = @fopen(filename, flag != FILE_APPEND ? 'w' : 'a')) {
if(flag == LOCK_EX) @flock(fp, LOCK_EX);return = fwrite(fp, is_array(data) ? implode('', data) :data);
fclose(fp);
}
returnreturn;
}
}
//检查权限
function checkperm(perm) {
global_G;
return (empty(_G['group'][perm])?'':_G['group'][perm]);
}
/**
* 时间段设置检测
* @param periods - 那种时间段settings[periods]settings['postbanperiods'] settings['postmodperiods']
* @paramshowmessage - 是否提示信息
* @return 返回检查结果
*/
function periodscheck(periods,showmessage = 1) {
......
}
/**
* 用户操作日志
* @param int uid 用户ID
* @param stringaction 操作类型 tid=thread pid=post blogid=blog picid=picture doid=doing sid=share aid=article uid_cid/blogid_cid/sid_cid/picid_cid/aid_cid/topicid_cid=comment
* @return bool
*/
function useractionlog(uid,action) {
......
}
/**
* 得到用户操作的代码或代表字符,参数为数字返回字符串,参数为字符串返回数字
* @param string/int var
* @return int/string 注意:如果失败返回false,请使用===判断,因为代码0代表tid
*/
function getuseraction(var) {
......
}
/**
* 获取我的中心中展示的应用
*/
function getuserapp(panel = 0) {
......
}
/**
* 获取manyou应用本地图标路径
* @param <type>appid
*/
function getmyappiconpath(appid,iconstatus=0) {
......
}
/**
* 获取文字内的url列表
*
* @param message 文字
* @return <array> url列表
*
*/
function get_url_list(message) {
......
}
/**
* 检查文字内的URL
*
* @param allowposturl 用户组设置中的值 0=禁止 1=允许但审核 2=允许但不解析
* @parammessage 待处理的文字内容
* @return 0=禁止 1=允许但审核 2=允许但不解析
*/
function checkurl(allowposturl, &message) {
......
}
/**
* 更新页面和模块的关系
* @param string targettplname 页面名称
* @param arrayblocks 模块IDS
*/
function update_template_block(targettplname,blocks) {
......
}
/**
* 获取批定类型的关联连接
*
* @param string extent 内容所需关联链接范围 article, forum, group, blog
* @return string 有效的关联链接
*/
function getrelatedlink(extent) {
......
}
/**
* 判断 Connect 链接参数有效性
* @global _G
* @param arrayparams 参数数组
* @param array connect_params 返回参数
* @return boolean
*/
function connect_valid(params, &connect_params) {
......
}
/**
* 获取 Token
* @global_G
* @param string type
* @return string
*/
function connect_get_access_token(type = 'USER') {
......
}
/**
* 获取 Connect 参数签名
* @param array params 参数数组
* @param stringaccess_token 加密 Token
* @return string
*/
function connect_get_sig(params,access_token) {
......
}
/**
* 通过 AID 获取附件表名
* @param <int> aid
*/
function getattachtablebyaid(aid) {
......
}
/**
* 返回指定 TID 所对应的附件表编号
* @param <int> tid
*/
function getattachtableid(tid) {
......
}
/**
* 通过 TID 获取附件表名
* @param <int> tid
*/
function getattachtablebytid(tid) {
......
}
/**
* 通过 PID 获取附件表名
* @param <int> pid
*/
function getattachtablebypid(pid) {
......
}
/**
* 添加一个新的附件索引记录,并返回新附件 ID
* @param <int> uid
*/
function getattachnewaid(uid = 0) {
......
}
/**
* 获取 SEO设置
* @param string page 调用哪个页面的
* @param arraydata 可替换数据
* @return array('seotitle', 'seodescription', 'seokeywords')
*/
function get_seosetting(page,data = array(), defset = array()) {
......
}
/**
* 需处理连续分隔符的str_replace()
* @param arraysearchs 被替换的数组
* @param array replaces 用于替换的数组
* @param stringstr 目标字符串
*/
function strreplace_strip_split(searchs,replaces, str) {
......
}
/**
* 返回带第几页的title
* @global_G
* @param string navtitle 源标题
* @param intpage 页码
* @return string
*/
function get_title_page(navtitle,page){
if(page>1) {
......
}
/**
*
* 生成缩略图文件名
* @param StringfileStr: 原文件名,允许附带路径
* @param String extend: 新文件名后缀
* @param BooleanholdOldExt: 是否保留原扩展名
* @return 返加新的后缀文件名
*/
function getimgthumbname(fileStr,extend='.thumb.jpg', holdOldExt=true) {
......
}
/**
* 更新数据的审核状态
* @param <string>idtype 数据类型 tid=thread pid=post blogid=blog picid=picture doid=doing sid=share aid=article uid_cid/blogid_cid/sid_cid/picid_cid/aid_cid/topicid_cid=comment
* @param <array/int> ids ID 数组、ID 值
* @param <int>status 状态 0=加入审核(默认) 1=忽略审核 2=审核通过
*/
function updatemoderate(idtype,ids, $status = 0) {
......
}
/**
* 显示漫游应用公告
*/
function userappprompt() {
......
}