- 浏览: 408352 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wcjagta:
...
dedecms插件开发教程 -
xc2013:
看起来不错 先下载来试试
ECSHOP完全静态化解决方法 -
greemranqq:
你好,我在xp 上做实验,也是JS css带不过来,关于 ro ...
nginx资源定向 css js路径问题 -
hotsmile:
表结构给出来吧,测试的提示说要注册,
中国移动CMPP短信开发平台通讯包 2.8 -
mengdejun:
gang80306176 写道这个插件怎么用和安装普通插件一样 ...
phpcms2008 sp4单网页编辑器插件
<?php /* # @category: 分享工作室; # @copyright: 分享在线传媒公社; # @var; PHPnew.class ; # @version: PHPnew 7.0 Professional; */ //模板引擎解析类; class PHPnew { const PHP = 5; //PHP限制版本; public $templates_dir = 'Templates/default/'; //模板路径; public $templates_cache = 'Data/cache_tpl/'; //缓存模板路径; public $templates_default = 'Templates/default/'; //默认模板路径; public $templates_new = true; //设置当次更新; public $templates_time = 360; //过期时间,分钟计算; //以下的默认设置 public $templates_charset = 'utf-8'; public $templates_postfix = '.html'; //模板后缀; public $templates_auto = true; //自动更新模板; public $templates_caching = '.php'; //缓存后缀; public $templates_debug = array(); //错误信息; public $templates_lonlabel = true; //长标签; public $templates_space = false; //清除无意义字符 public $templates_php = false; //为每个缓存头部增加PHP码; //结果集; public $templates_file = array(); //模板文件 public $templates_cache_file = null; //缓存文件; public $templates_name = null; //标识名 public $templates_message = null; //html内容; public $templates_update = 0; //更新次数 public $templates_assign = array(); //用户用smarty模式; public $PHPnew = 'PHPnew 7.0 Professional'; //缓存控制; public $templates_menu = array(); //用于记录每个模板信息; public $templates_replace = array(); //用于智能更新,可以将模板中的内容直接替换; //构造函数 public function __construct() { // 确认php版本,低过设置的, 就提供一下debug出去。但不终止。 if((int) phpversion() < self::PHP) $this->templates_debug[] = 'PHP version is too low ' .self::PHP; //为属性作初级判断; $this->templates_auto = (boolean) $this->templates_auto; $this->templates_lonlabel = (boolean) $this->templates_lonlabel; $this->templates_space = (boolean) $this->templates_space; $this->templates_new = (boolean) $this->templates_new; //禁止默认模板目录不存在 is_dir($this->templates_default) === false && exit('error templates_default'); //为控制设置流程,先引入配置文件, 里面记录着所有缓存文件的时间。 if(is_file($this->templates_cache.'templates_caceh.php') && $this->templates_auto===true) $this->templates_menu = include($this->templates_cache.'templates_caceh.php'); } //解析开始; public function display($file_name){ // 初始化先设置变量信息 $var_list = $this->parse_var(); //取得路径; $this->templates_file[$file_name] = $this->get_path($file_name); //取得文件名字; $this->templates_name = $file_name; //取得缓存路径; $this->templates_cache_file[$file_name] = $this->get_path(); // 如果不自动更新,就直接调用缓存。 if($this->templates_auto===false){ return $this->view($this->templates_cache_file[$file_name]); } //如果设置了当次更新,就将配置数组清空. if($this->templates_new===true){ $this->templates_menu = array(); } //判断一下文件是否存在。 是否已经过期,然后生成并且显示。 if($this->check($this->templates_name)===true){ return $this->view($this->templates_cache_file[$file_name]); } $this->templates_message = null; if(is_file($this->templates_file[$this->templates_name]) == true) $this->templates_message = $this->replace_html(file_get_contents($this->templates_file[$this->templates_name],LOCK_EX)); $this->templates(); return $this->view($this->fileplus()); } //显示出来; private function view($path_php){ //释放数组内容。 if(empty($this->templates_assign) === false) extract($this->templates_assign,EXTR_OVERWRITE); if(is_file($path_php) === true){ include($path_php); }else { print $path_php.' Does not exist<br>'; } return true; } private function parse_var(){ static $var_list; if(empty($var_list) === true){ $list = array(); foreach ($GLOBALS as $key => $val) { $list[$key] = $val; } $var_list = $list; foreach ($var_list as $phpnew_key =>$phpnew_value){ $this->assign($phpnew_key,$phpnew_value); } } return $this->templates_assign; } //生成缓存 private function fileplus() { file_put_contents($this->templates_cache_file[$this->templates_name],$this->templates_message,LOCK_EX); $this->templates_message = array(); return $this->templates_cache_file[$this->templates_name]; } //控制配置 private function templates(){ if(empty($this->templates_menu[$this->templates_name]) === false) unset($this->templates_menu[$this->templates_name]); if(is_array($this->templates_menu)===false) $this->templates_menu = array(); if(is_file($this->templates_file[$this->templates_name]) == true) $this->templates_menu[$this->templates_name] = md5_file($this->templates_file[$this->templates_name]); if(($php = null) && empty($this->templates_php) === false) $php = $this->templates_php."\r\n"; file_put_contents($this->templates_cache.'templates_caceh.php', sprintf($php."<?php \r\n return %s;",var_export($this->templates_menu,true)),LOCK_EX); } //路径处理 private function get_path($file_name=null){ //为默认路径做完整路径抓取; $this->path(); if($file_name!==null){ $file_all = $this->templates_dir.$file_name.$this->templates_postfix; if($this->templates_dir===null || is_file($file_all)===false){ $file_all = realpath($this->templates_default).DIRECTORY_SEPARATOR.$file_name.$this->templates_postfix; } if(is_file($file_all)===false){ return false; $this->templates_debug[] = 'Template file does not exist or an error'; } return (string) $file_all; }else { $file = $this->templates_file[$this->templates_name]; $file_arr = pathinfo($file); $postfix = basename(dirname($file)); return $this->templates_cache.$postfix.'_'.$this->templates_name.'_cache'.$this->templates_caching; } return false; } // 路径规范处理; private function path(){ $this->templates_dir = realpath(strtr($this->templates_dir,array('./'=>'','//'=>'/','\\\\'=>'\\'))).DIRECTORY_SEPARATOR; $this->templates_cache = realpath(strtr($this->templates_cache,array('./'=>'','//'=>'/','\\\\'=>'\\'))).DIRECTORY_SEPARATOR; // 不能判断目录是否存在, 因为还有默认目录功能。 if(strlen($this->templates_dir)<=2) exit('Catalog Error'); if(strlen($this->templates_cache)<=2) exit('Catalog Error'); } //控制判断 private function check($name){ //对文件及目录判断 if(strlen($this->templates_name)===0){ $this->templates_name = 'index'; } // 检查默认模板目录是否存在 if(is_dir($this->templates_dir)===false){ exit('Templates directory does not exist'); } // 检查缓存模板目录是否存在 if(is_dir($this->templates_cache)===false){ exit('Template cache directory does not exist'); } // 判断缓存文件是否存在,不存在就报错. if(is_file($this->templates_file[$name])===false){ exit('Template does not exist: '.$name); } // true 让判断成真,即返回缓存文件 // false 将执行编译; if(empty($this->templates_menu)===true) return false; if(time() - fileatime($this->templates_cache.'templates_caceh.php')>=$this->templates_time*60){ if(is_file($this->templates_cache.'templates_caceh.php') === true) unlink($this->templates_cache.'templates_caceh.php'); return false; } if(empty($this->templates_menu[$name]) === false && md5_file($this->templates_file[$name])===$this->templates_menu[$name]){ return true; } return false; } //假如用户用强制性; public function assign($phpnew_var,$phpnewvalue=null){ $php_key = $php_val = null; if($phpnew_var=='') return false; if(is_array($phpnew_var)===true){ foreach ($phpnew_var as $php_key => $php_val){ if(is_array($php_val)===true){ $this->assign($php_val); } if(is_numeric($php_key)===false || $php_key{0}!='_') $this->templates_assign[$php_key] = $php_val; } }else { if(is_numeric($phpnew_var)===false || $phpnew_var{0}!='_') $this->templates_assign[$phpnew_var] = $phpnew_value; } } //替换函数; protected function replace_html($template){ //替换 $template = preg_replace( "/[\n\r\t]*\{templatesub\s+(.+)\}[\n\r\t]*/iseU", "\$this->get_contents('$1')", $template ); //直接输出php $template = preg_replace('/[\n\r\t]*\<\?php.*\\?\>[\n\r\t]*/iseU', '\'[php]\'.base64_encode(\'$0\').\'[/php]\'', $template ); //静态替换 $template = preg_replace( "/[\n\r\t]*\{html\s+(.+?)\}[\n\r\t]*/ise", "\$this->get_var('$1')", $template ); //替换模板载入命令 $template = preg_replace( "/[\n\r\t]*\{template\s+\\$(.+)\}[\n\r\t]*/isU", '<? include display(-%-$1); ?>', $template ); $template = preg_replace( "/[\n\r\t]*\{template\s+(.+)\}[\n\r\t]*/isU", "<? include display('$1'); ?>", $template ); //过滤 <!--{}--> $template = preg_replace("/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\\1}", $template); //替换 PHP 换行符 $template = str_replace("{LF}", "<?=\"\\n\"?>", $template); //替换直接变量输出 $varRegexp = "((\\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)" . "(\[[a-zA-Z0-9_\-\.\"\'\[\]\$\x7f-\xff]+\])*)"; $template = preg_replace("/\{(\\\$[a-zA-Z0-9_\[\]\'\"\$\.\x7f-\xff]+)\}/s", "<?=\\1?>", $template); $template = preg_replace("/$varRegexp/es", "\$this->addquote('<?=\\1?>')", $template); $template = preg_replace("/\<\?\=\<\?\=$varRegexp\?\>\?\>/es", "\$this->addquote('<?=\\1?>')", $template); //替换语言包变量 $template = preg_replace("/\{lang\s+(.+?)\}/is", "<?=\$language['\\1']?>", $template); //替换特定函数 $template = preg_replace( "/[\n\r\t]*\{eval\s+(.+?)\}[\n\r\t]*/ies", "\$this->stripvtags('<? \\1; ?>','')", $template ); $template = preg_replace( "/[\n\r\t]*\{echo\s+(.+?)\}[\n\r\t]*/ies", "\$this->stripvtags('<? \\1; ?>','')", $template ); $template = preg_replace( "/([\n\r\t]*)\{elseif\s+(.+?)\}([\n\r\t]*)/ies", "\$this->stripvtags('\\1<? } elseif(\\2) { ?>\\3','')", $template ); $template = preg_replace( "/([\n\r\t]*)\{else\}([\n\r\t]*)/is", "\\1<? } else { ?>\\2", $template ); //替换循环函数及条件判断语句 for ($i = 0; $i < 6; $i++) { $template = preg_replace( "/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\}[\n\r]*(.+?)[\n\r]*\{\/loop\}[\n\r\t]*/ies", "\$this->stripvtags('<? if(is_array(\\1)) { foreach(\\1 as \\2) { ?>','\\3<? } } ?>')", $template ); $template = preg_replace( "/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}[\n\r\t]*(.+?)[\n\r\t]*\{\/loop\}[\n\r\t]*/ies", "\$this->stripvtags('<? if(is_array(\\1)) { foreach(\\1 as \\2 => \\3) { ?>','\\4<? } } ?>')", $template ); $template = preg_replace( "/([\n\r\t]*)\{if\s+(.+?)\}([\n\r]*)(.+?)([\n\r]*)\{\/if\}([\n\r\t]*)/ies", "\$this->stripvtags('\\1<? if(\\2) { ?>\\3','\\4\\5<? } ?>\\6')", $template ); } //常量替换 $template = preg_replace( "/\{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/s", "<?=\\1?>", $template ); //删除 PHP 代码断间多余的空格及换行 $template = preg_replace("/ \?\>[\n\r]*\<\? /s", " ", $template); //其他替换 $template = preg_replace( "/\"(http)?[\w\.\/:]+\?[^\"]+?&[^\"]+?\"/e", "\$this->transamp('\\0')", $template ); $template = preg_replace( "/\<script[^\>]*?src=\"(.+?)\".*?\>\s*\<\/script\>/ise", "\$this->stripscriptamp('\\1')", $template ); $template = preg_replace( "/[\n\r\t]*\{block\s+([a-zA-Z0-9_]+)\}(.+?)\{\/block\}/ies", "\$this->stripblock('\\1', '\\2')", $template ); $template = preg_replace('/[\n\r\t]*\[php\](.*)\[\/php\][\n\r\t]*/iseU','base64_decode(\'\\1\')',$template); $template = preg_replace('/<script.+script>/iseU','\'[script]\'.base64_encode(\'$0\').\'[/script]\'',$template); if ($this->templates_space===true) { $template = preg_replace( array('/\r\n/isU','/<<<EOF/isU'),array('',"\r\n<<<EOF\r\n"),$template); } $template = preg_replace('/[\n\r\t]*\[script\](.+)\[\/script\][\n\r\t]*/iseU','base64_decode(\'$1\')',$template); $template = strtr($template,array('-%-'=>'$','\"'=>'"','<style>'=>'<style type="text/css">','<script>'=>'<script type="text/javascript">')); if(empty($this->templates_php) === false) $template = $this->templates_php."\r\n".$template; $template = strtr($template,array('include display'=>'$this->display')); if($this->templates_lonlabel===true){ $template = strtr($template, array('<?php'=>'<?','<?php echo'=>'<?=')); $template = strtr($template, array('<?'=>'<?php ','<?='=>'<?php echo ')); } $template = strtr($template,$this->templates_replace); $this->templates_update +=1; return (string) $template; } //模板引擎需要的函数. 开始. protected function get_contents($filename){ $this->templates_file[$filename] = $this->get_path($filename); if(is_file($this->get_path($filename)) === true){ $files = file_get_contents($this->templates_file[$filename],LOCK_EX); //替换 $files = preg_replace( "/[\n\r\t]*\{templatesub\s+(.+)\}[\n\r\t]*/iseU", "\$this->get_contents('$1')", $files ); return $files; } return false; } protected function get_var($phpnew_name){ if(empty($this->templates_assign[$phpnew_name]) === false) return $this->templates_assign[$phpnew_name]; return 'Static variable is not defined'; } protected function transamp($template) { $template = str_replace('&', '&', $template); $template = str_replace('&amp;', '&', $template); $template = str_replace('\"', '"', $template); return $template; } protected function stripvtags($expr, $statement) { $expr = str_replace("\\\"", "\"", preg_replace("/\<\?\=(\\\$.+?)\?\>/s", "\\1", $expr)); $statement = str_replace("\\\"", "\"", $statement); return $expr . $statement; } protected function addquote($var) { return str_replace("\\\"", "\"", preg_replace("/\[([a-zA-Z0-9_\-\.\x7f-\xff]+)\]/s", "['\\1']", $var)); } protected function stripscriptamp($s) { $s = str_replace('&', '&', $s); return "<script src=\"$s\" type=\"text/javascript\"></script>"; } protected function stripblock($var, $s) { $s = str_replace('\\"', '"', $s); $s = preg_replace("/<\?=\\\$(.+?)\?>/", "{\$\\1}", $s); preg_match_all("/<\?=(.+?)\?>/e", $s, $constary); $constadd = ''; $constary[1] = array_unique($constary[1]); foreach($constary[1] as $const) { $constadd .= '$__' . $const .' = ' . $const . ';'; } $s = preg_replace("/<\?=(.+?)\?>/", "{\$__\\1}", $s); $s = str_replace('?>', "\n\$$var .= <<<EOF\n", $s); $s = str_replace('<?', "\nEOF;\n", $s); return "<?php\n$constadd\$$var = <<<EOF" . $s . "\nEOF;\n?>"; } //删除缓存; public function cache_dele($path = null){ if($path===null){ $path = $this->templates_cache; } $file_arr = scandir($path); foreach ($file_arr as $val){ if($val === '.' || $val === '..'){ continue; } if(is_dir($path.$val)===true) $this->cache_dele($path.$val.'/'); if(is_file($path.$val)===true && $val!=='index.html') unlink($path.$val); } } public function __destruct(){} }
- ppnew.rar (464.5 KB)
- 下载次数: 14
发表评论
-
php异步操作类库
2011-06-05 16:01 1830httpclient for php 的选择常用方案有以 ... -
织梦HTTP IMAGE下载类
2011-06-05 14:57 1877<?php if(!defined('DEDEINC ... -
php汉字转拼音
2011-06-05 14:41 1614<?php /**************** ... -
PHP采集利器:Snoopy 试用心得
2011-06-05 14:34 14078Snoopy是一个php类,用 ... -
php异步调用 提高用户体验
2011-05-30 14:22 1320这是我的一个技术很好的朋友写的,要我发表在我的博客上可让php ... -
PHP 异步调用 后台调用 持续执行 断开连接/浏览器
2011-05-26 10:31 1720标题很怪,因为我也 ... -
php socket模拟POST GET请求 fsockopen版
2011-05-26 10:14 7390function httpRequestGET($url){ ... -
php socket GET POST提交方法(HttpClient) 框架
2011-05-25 18:29 5559<?php /* Version 0.9, 6th ... -
mantis
2011-05-25 09:50 1296mantis 缺陷管理平台Mantis,也做Mantis ... -
Curl参数一览
2011-05-06 17:30 1487* 目录 1. 介绍 ... -
PHPRPC
2011-04-24 11:01 1330PHPRPC 是一个轻型的、安全的、跨网际的、跨语言的、跨平台 ... -
PHP身份证验证程序
2011-04-24 10:56 1273<?php // 计算身份证校验码,根据国家标准GB 116 ... -
nginx 502 Bad Gateway 错误问题收集
2011-04-23 09:43 1792502是FastCGI出现问题,所以从FastCGI配置入手。 ... -
深入理解PHP内存管理之谁动了我的内存
2011-04-12 21:57 851首先让我们看一个问题: ... -
socket模拟post表单
2011-04-11 15:40 2810post的本质就是发送给目的程序一个标志为post的协议串如下 ... -
OAUTH协议
2011-04-09 09:59 1117OAUTH协议为用户资源的 ... -
nginx/windows: 让nginx以服务的方式运行
2011-04-09 09:33 1158在windows下安装了nginx, 郁闷是发现它没有以服 ... -
ThinkPHP处理海量数据分表机制详细代码
2011-04-07 18:27 7226应用ThinkPHP内置的分表算法处理百万级用户数据. ... -
php 分库分表hash算法
2011-04-07 18:16 1702//分库分表算法 function calc_hash_d ... -
nginx配置文件实例: php (fastcgi), perl, proxy, rrd, nagios
2011-04-06 20:33 1840nginx.conf worker_processes 5; ...
相关推荐
本文将深入探讨PHPNew模板引擎类的核心概念、工作原理以及如何在实际项目中应用。 一、PHPNew模板引擎概述 PHPNew模板引擎通过解析特定的模板语法,将HTML与PHP代码分离,让开发者能够专注于页面布局和设计,而...
本教程将详细解析一个名为“php自定义模板引擎类”的压缩包内容,该类库是为PHP设计的一个自定义模板处理系统。 首先,模板引擎的核心理念在于,它提供了一种方式来编写包含动态内容的HTML或其他类型的视图文件,...
**PHPnew 模板引擎 v7.3.1** PHPnew 模板引擎是一款专为 PHP 开发者设计的高效、轻量级的模板处理工具,它允许开发者将业务逻辑与视图展示分离,提高代码的可读性和可维护性。在 v7.3.1 版本中,该引擎可能包含了一...
PHPnew 模板引擎是这种理念的一个具体实现,下面我们将深入探讨这个模板引擎的相关知识点。 首先,模板引擎的基本概念是,它允许开发者使用一种特定的模板语言来编写视图层的代码,这种语言通常简化了HTML的编写,...
PHPnew模板引擎是一种用于PHP开发的模板处理工具,它的设计目标是将HTML代码与PHP代码分离,让开发者能够更专注于页面的布局和设计,而不用在HTML中混杂大量的PHP逻辑。这种模板引擎有助于提高代码的可读性和可维护...
模板引擎支持smarty, 原生态php,discuz模式,三种使用习惯均可以交叉使用。 精小模板,适合二次整合。 7.2 更新日志: 1: 修正变量战用内存过多的问题 2: 流程判断更加精简 3: 加强安全性检测 安装使用...
PHPnew是一款PHP类简易式模板处理引擎,整体实现原理源于discuz程序的思想,90%的模板语法均来自discuz的程序仿制,这也将为引擎的简易性做了最足的基础准备。引擎无需配置即可使用,兼容性强,扩展方便,功能更是非常人性...
PHPnew模板引擎 7.3.1 更新日志: 1: 兼容PHP5.5 , 为更新版本兼容做准备. 2: 模板并发写入优化更新, 防止卡住或者崩溃情况发生. 3: css, js引用增加模板语法功能, 引入流程更如人所想. 4: 增加Todo, buy等标注...
【标题】"基于PHP的new模板引擎源码.zip"揭示了一个关键知识点,即PHP模板引擎的实现。模板引擎是Web开发中的一个重要组成部分,它允许开发者将业务逻辑与展示逻辑分离,使得网页设计更加灵活和可维护。在这个压缩包...
Phpnew 是一款简易而智能的模板引擎,它来自discuz的引擎原理,经过后期长时间优化重写,演变为可以独立使用的模板化工具。经过长期的项目运行优化及实践,phpnew已经在人性化上更为突出,无需配置即可使用,让新手...
Phpnew 是一款简易而强大的模板引擎,它来自discuz的引擎原理,经过后期重组,演变为可以独立使用的模板化工具。经过长期的修整及重组,phpnew已经在人性化上更为突出,无需配置即可使用,让新手更容易上手且熟悉。...
下面我们将深入探讨PHP自定义模板引擎类的设计和实现。 首先,我们需要理解模板引擎的基本原理。模板引擎通常接收一个HTML文件(模板),其中包含一些特殊的语法或标记,这些标记会被解析并替换为实际的动态数据。...
"基于PHP的new 模板引擎"是一个专为PHP设计的模板系统,它旨在分离应用的业务逻辑与视图展示,提高代码的可读性和维护性。下面将详细介绍这个模板引擎的工作原理、优势以及如何在实际项目中应用。 模板引擎的核心...
在这个“基于PHP的new 模板引擎 v7.3.1.zip”中,我们讨论的是一个针对PHP编程环境设计的新版本模板引擎,它可能包含了优化的性能和新特性。 【模板引擎的优势】 1. **代码分离**:模板引擎使得PHP代码和HTML代码...
"基于PHP的new模板引擎v7.3.1"就是这样一个工具,它旨在优化PHP代码结构,提高渲染速度,并降低前端与后端的耦合度。 首先,我们需要理解模板引擎的基本概念。模板引擎是将HTML和业务逻辑分离的一种设计模式,它...
Phpnew 是一款简易而强大的模板引擎,它来自discuz的引擎原理,经过后期重组,演变为可以独立使用的模板化工具。经过长期的修整及重组,phpnew已经在人性化上更为突出,无需配置即可使用,让新手更容易上手且熟悉。...
PHPnew 7.0 在原有基础进行更大的更新及结构变化,使得速度及效率都有明显的提高.同时为程序开发配备常用函数及设置,开发中仅需要直接采用即可.新版本拥有着缓存,模板重编,及模板缓存几个大的功能,同时,对于模板缓存,...
在压缩包"PHPnew(PHP模板处理引擎)"中,可能包含的是一个自定义的PHP模板处理系统或者是对现有模板引擎的扩展或修改。如果你打算学习或使用这些源码,建议先了解其基本架构和工作流程,然后逐步深入研究各个组件,...
PHPnew 5.0 在原有基础进行更大的更新及结构变化,使得速度及效率都有明显的提高.同时为程序开发配备常用函数及设置,开发中仅需要直接采用即可.新版本拥有着缓存,模板重编,及模板缓存几个大的功能,同时,对于模板缓存,...