本文适合 Discuz! 模板应用开发者阅读。
Discuz! 模板加密功能目前仅向魔方+用户开放。模板加密依赖 Crane · 第二代加密引擎实现。
基本原理
魔方加密提取模板文件中的控制代码,并将它们组合为一个 PHP 文件,对该 PHP 文件进行加密,实现模板加密功能。经过魔方加密处理的模板文件并不改变原有的结构,不影响用户进行二次开发和修改。
以下为待加密的模板示例代码:
{if $a > 10}
变量 a 大于 10
{elseif $a > 0}
变量 a 大于 0
{else}
变量 a 小于等于 0
{/if}
以上代码经过处理,变为:
{eval require_once DISCUZ_ROOT.$GLOBALS['_G']['style']['directory'].'/template.php';}
{if KI_TPL_CTRL('abcd1234',get_defined_vars())}
变量 a 大于 10
{elseif KI_TPL_CTRL('xyzw9876',get_defined_vars())}
变量 a 大于 0
{else}
变量 a 小于等于 0
{/if}
原有代码中的控制逻辑 $a > 10
$a > 0
已被自动提取和替换。
具体步骤
在首次发布加密模板前,您首先需要在魔方加密注册一个账号,绑定您的 Discuz! 开放平台账号,并购买魔方+服务
在开发模板的论坛上安装插件 @mfenctpl.plugin.70412">魔方模板加密{:target=”_blank”}
打开魔方加密网站,添加您的应用
点击左上角的“Discuz! 应用”,输入模板标识符进行添加
创建模板加密项目,并得到一个项目编号
点击左上角的“Discuz! 模板加密”,选择对应的模板应用,如果有需要,上传授权检测文件和文件认证模板。成功后,您在“最近上传的文件”中可以得到一个项目编号
登录您的开发论坛后台,打开魔方模板加密插件,开始一个新的项目
需要选择模板目录,并输入之前获得的项目编号。在以下步骤中,假定所选模板目录为
/template/xxx
插件将会列出所选模板目录中的所有模板文件,请选择需要其中需要加密的文件
请注意,为了尽可能减少加密后运行速度下降带来的影响,建议不要选择过多的文件进行加密
插件会自动加密所选择的模板文件,在整个过程中,请保证论坛所在服务器与魔方加密网站之前的网络连接正常
如果加密过程中出现错误,您可以选择忽略错误或者重试加密出错的文件
加密结束后,加密后的文件将会保存在
/template/xxx_enc
目录中请注意,加密成功结束后,会出现
/template/xxx_enc/template.php
文件,该文件是提取各个模板文件的控制逻辑代码并进行加密而得到的。如果这个文件不存在,表明加密失败,需要重新进行加密。测试加密后的文件是否正常
可以首先复制原始模板目录
/template/xxx
到/template/xxx_test
,再使用加密后得到的/template/xxx_enc
目录中的所有文件覆盖/template/xxx_test
,最后测试模板/template/xxx_test
是否正常即可。切记勿覆盖错误,避免原始模板文件丢失!打包
/template/xxx
和/template/xxx_enc
,将模板发布到 Discuz! 应用中心,具体请参阅《发布加密文件到 Discuz! 应用中心》注意在
/template/xxx
目录中创建一个 1 字节的文件template.php
,否则压缩包将无法上传到 Discuz! 应用中心。
注意: 项目编号不可重复使用!
在每一次加密模板时,或者加密失败需要重新开始时,必须重新生成一个新的项目编号!
授权检测
在创建项目时,您可以上传授权检测文件和文件认证模板。
使用文件认证模板请参阅《文件认证模板》。以下内容将对授权检测文件的使用方法进行说明。
魔方加密提取模板文件中的控制代码并生成 template.php,加密前的 template.php 结构如下:
<?php
function KI_TPL_CTRL($__ki_entry, $__ki_vars) {
// 授权检测文件中的代码将会被插入到这个位置
extract($__ki_vars, EXTR_SKIP);
switch($__ki_entry) {
case 'abcd1234': return ($a > 10);
case 'xyzw9876': return ($a > 0);
// 其它控制语句
default: return null;
}
}
上传的授权检测文件中的代码将会被插入 KI_TPL_CTRL()
函数的开头,因此,可以在该文件中编写授权检测代码。