自定义函数

适用版本:开发版V1.5.7+

适用范围:全站任意地方均可使用。

标签说明:采用更为直接的方法将当前标签内容使用指定函数进行特定处理。


1、自定义函数文件创建


因为该文件设定为更新不覆盖,所以该文件不会通过在线更新推送,需要用户手动进行创建


创建方法:在站点根目录/config/文件夹下新建function.php文件,文件默认内容如下:


<?php
/**
 * @copyright (C)2022 LiuXiaoBai
 * @author LiuXiaoBai
 * @email 1144842311@qq.com
 * @date 2022年10月23日
 *  个人扩展函数可编写到本文件中,升级不会覆盖
 */

// 测试个人扩展函数
function test($str){
    return '哎呦真的不错哟~';
}


2、模板标签中使用函数


例子:使用自定义函数隐藏手机号中间4位


先在config/function.php文件中编写隐藏手机号中间4位的函数


// 隐藏手机号中间4位
function test1($phone){
    return substr_replace($phone, '****', 3, 4);
}

然后在相关标签中使用

{pboot:list}


[list:ext_phone fun=test1]


{/pboot:list}


如果函数有多个参数需要调用,则使用:

[list:ext_phone fun=test1('1',###)]


表示test函数传入两个参数,每个参数用逗号分割,这里第一个参数是1,第二个参数是前面要输出ext_phone的标签内容,因为该标签内容是第二个参数,因此需要用###标识位置,你可以理解为###就是该标签自身内容


注意:多个参数之间不能存在空格,否则会被系统过滤,例如写成test1('1', ###),这里###前面存在空格,就会被过滤为test1('1'),也就是空格后面的参数会丢失,这是一个需要注意的地方

如果前面输出的标签内容在后面定义的函数的第一个参数,则可以直接使用:

[list:ext_phone fun=test1('1')]


虽然也可以使用:


[list:ext_phone fun=test1(###,'1')]


但完全没用这个必要


还可以支持多个函数过滤,多个函数之间用“|”分割即可,理论上无数量限制,例如:

[list:ext_phone fun=test|test2|test...]


或者


[list:ext_phone fun=test|test2('1',###)|test...]


函数会按照从左到右的顺序依次调用。


除了自定义函数外,还可以直接使用内置函数,例如:

[list:ext_phone fun=md5]


[list:ext_phone fun=substr_replace(###,'****',3,4)]


[list:ext_phone fun=md5|strtoupper|substr(0,3)]


......


理论上大部分标签均可以使用fun来调节,不限于上方例子,更多玩出花的用法还需自行探索,如果你发现了有趣的玩法欢迎投稿分享......

安全起见,函数调用黑名单暂定如下,调用下方函数将会拦截并弹出拦截信息:


特殊函数

'phpinfo','symlink','readlin','getenv','putenv','dl','ini_get','ini_set','ini_alter','ini_restore','is_numeric','in_array','parse_str',

'extract','mb_parse_str','import_request_variables','glob','get_defined_vars','get_defined_constants','get_defined_functions','get_include_files'


代码执行函数

'eval','assert','preg_replace','create_function','call_user_func'


命令执行函数

'exec','passthru','proc_open','shell_exec','system','popen'


包含函数

'require','include','require_once','include_once'


文件操作函数

'copy','file_get_contents','file_put_contents','file','fopen','move_uploaded_file','readfile','rename','rmdir','unlink','delete'


内置公共函数

'create_dir','create_file','path_delete','dir_copy','upload','handle_upload','zip','unzip'

返回顶部