if ,elseif, else 示例

x=1 x=2 x=3 x=4 x=5 x=6

   结果: x 大于 5 或 x 不大于 0


简单示例

输出: ($x<3)
<!-- @if ($x>2) -->
输出: ($x>2)
<!-- @else -->
输出: ($x<2)
<!-- @endif -->


安全检查示例

例一: VT警告: 危险的表达式 @unlink("tpl_c/test.php") ! 表达式可能调用不安全函数.
例二: VT警告: 危险的表达式 include 'tpl_c/test.php' ! 表达式可能调用不安全函数.
例三: VT警告: 危险的表达式 MyClasss::is_int($mm) ! 表达式可能调用不安全函数.
例四: */){ /* ======代码注入测试,看到此信息表示注入失败====== */?>@if('abc()'!=4 /* abc(); */) 这样的语句是安全的, VT可以正确认出字符串,注释,HereDoc的内容


实现if语法的目的

模板里实现php的if替代语句, 主要是解决在安全模式下, 可以使模板有简单的逻辑功能. if语句的条件表达式禁止以任何方式调用除常量VT_SAFE_FUNCTIONS中以外的函数. 当前值: abs,array,base64_decode,base64_encode,bindec,ceil,chr,count,date,empty,explode,floatval,floor,hexdec,htmlentities,htmlspecialchars,implode,in_array,intval,is_array,is_bool,is_float,is_int,is_nan,is_null,is_numeric,is_object,is_resource,is_string,isset,ltrim,max,min,ord,preg_grep,preg_last_error,preg_match,preg_match_all,preg_quote,preg_replace,preg_split,rand,round,rtrim,str_repeat,str_replace,str_split,stripos,strlen,strpos,strtolower,strtotime,strtoupper,strval,substr,time,trim,urldecode,urlencode, 即使是php内置的函数也禁止. 同时也禁止载入其他文件.
同时请注意, if条件表达式里, 被 /[^\+\-\*\/\%\=<>\!\&\|\~\(\.\'"\\\\]\s*\(//(include|require)(_once)?/i 匹配的条件表达式会被请为是不安全的表达式. 可能是情况的是安全而且是正确的表达式, 在这里可能都会被认为不为是安全表达式. 所以请确保你的表达式可以不要上述两正则式匹配
当然, 这个if语句在非安全模式下也是有效的.
使用此IF语句的通常情况是:模板是由不可信任的人员制作, 如博客模板开放给用户自定义, 允许用户上传自己的模板. 这时候可以放心让用户使用if语句, 而模板依然是安全.(注意: 模板安全不代表模板编译的文件是正确的)

安装 DreamweaverToolkit.mxp 后将获得良好的可视效果. 效果图一 效果图二