修改建议
下面列出一些 Discuz! 应用常见的代码并给出相关的修改建议。
变量作用域问题
文件 myaddon.inc.php,该文件加密:
<?php
if(! defined ('IN_DISCUZ')) {
exit ('Access Denied');
}
$data = C::t('#myaddon#mytable')->fetch_my_data ( );
include template ('myaddon:mytemplate');
模板 myaddon/mytemplate.htm:
{template common/header}
{loop $data $key $value}
{$key} = {$value}<br />
{/loop}
{template common/footer}
不兼容的地方在:myaddon.inc.php 加密后,变量 $data
是函数外作用域的局部变量,通过 include
引入的模板代码属于引入代码作用域,这是两个不同的作用域,在模板中无法访问 $data
。
修改方法为建立一个新的 myaddon.inc.php,文件不加密,内容为:
<?php
if(! defined ('IN_DISCUZ')) {
exit ('Access Denied');
}
// myaddon.core.php 是原来的 myaddon.inc.php
require_once './myaddon.core.php';
include template ('myaddon:mytemplate');
而原来的 myaddon.inc.php 改名为 myaddon.core.php,该文件加密,需要做修改:
<?php
if(! defined ('IN_DISCUZ')) {
exit ('Access Denied');
}
// 把 $data 作为全局变量
global $data;
$data = C::t('#myaddon#mytable')->fetch_my_data ( );
// 引入模板已经转移到新的 myaddon.inc.php 中实现
// include template ('myaddon:mytemplate');
类的改造
嵌入点等需要使用类。
文件 myhook.class.php,内容如下:
<?php
if(! defined ('IN_DISCUZ')) {
exit ('Access Denied');
}
class plugin_myhook {
public function mymethod1($var1, $var2) {
// 实现代码
}
public function global_header() {
$this->mymethod1(1, 2);
}
}
可以将其分为两个文件,新建 myhook.core.php,该文件加密:
<?php
if(! defined ('IN_DISCUZ')) {
exit ('Access Denied');
}
function plugin_myhook_mymethod1($var1, $var2) {
// 实现代码
}
而文件 myhook.class.php 做如下改造,文件不加密:
<?php
if(! defined ('IN_DISCUZ')) {
exit ('Access Denied');
}
require_once './myhook.core.php';
class plugin_myhook {
// 删除 mymethod1() 方法
public function global_header() {
// 改为调用函数
plugin_myhook_mymethod1(1, 2);
}
}
其它建议
作用域问题是最常见的问题,因而,魔方加密建议您上传函数库(即文件中只包含)进行加密。