php自己写了一个模板

 更新时间:2016年11月25日 16:07  点击:1843

/*
作者: 牛哄哄
Q Q: 455703030
*/
function template($template,$cacheFile,$set)
{
is_readable($template) || exit('模板文件不存在!');
filemtime($template) > @filemtime($cacheFile) && parse_template($template,$cacheFile);
$inTemplate = true;
is_readable($cacheFile) ? include $cacheFile : exit('无法读取缓存,缓存路径可能有误!');
}
function parse_template($template,$cacheFile='')
{
$content = file_get_contents($template);
$content = preg_replace('/\{\*([^\{\}]*)\*\}/','',$content);
$content = preg_replace('/\$([A-Za-z0-9_]+)/','$set[\'\\1\']',$content);
$content = preg_replace('/\$\[([A-Za-z0-9_]+)\]/','$\\1',$content);
$content = preg_replace('/\{\$([A-Za-z0-9_\[\]\'"]+)\}/','<? echo $\\1; ?>',$content);
$content = preg_replace('/\{include\(([^\{\}]+)\)\}/','<? include \\1; ?>',$content);
$content = preg_replace('/\{echofile\(([^\{\}]+)\)\}/','<? echo file_get_contents(\\1); ?>',$content);
$content = preg_replace('/\{code\(([^\{\}]+)\)\}/','<? \\1; ?>',$content);
$content = preg_replace('/\{if\(([^\{\}]+)\)\}/','<? if (\\1) { ?>',$content);
$content = preg_replace('/\{elseif\(([^\{\}]+)\)\}/','<? } elseif(\\1) { ?>',$content);
$content = preg_replace('/\{while\(([^\{\}]+)\)\}/','<? while (\\1) { ?>',$content);
$content = preg_replace('/\{foreach\(([^\{\}]+)\)\}/','<? foreach (\\1) { ?>',$content);
$content = str_replace(array('{else}','{/if}','{/while}','{/foreach}'),array('<? }else{ ?>','<? } ?>','<? } ?>','<? } ?>'),$content);
if (preg_match_all('/\{template\(([^\{\}]+)\)\}/',$content,$tplName))
{
  foreach ($tplName[1] as $value) $tplContent[] = parse_template(eval('return '.$value.';'));
  $content = str_replace($tplName[0],$tplContent,$content);
}
if ('' == $cacheFile) return $content;
@file_put_contents($cacheFile,'<? true===$inTemplate || exit(\'非法访问!\'); ?>'.$content);
}

1,修复一个因为疏忽造成的小BUG,编译之后的代码少 了一个{符号,呵呵
2,更改模板嵌套的编译模式,现在这种模式使用更简单方便,也更符合大家的习惯

3,增加了一个新的功能,其实本来提供的功能,也可以实现此功能,但是毕竟不专业,用起来不方便。此功能用来直接输出一个静态的文件,我曾经做过测试,这样直接输出,效率要比include高的多的多

此模板函数提供的标签及功能:
1,添加注释
{*   *}
2,输出变量
{$i}   //需要对变量进行格式化,可以使用{code()}标签来执行一个函数进行格式化输出
3,包含一个动态文件
{include()}
4,包含一个静态文件
{echofile()}
5,嵌套一个模板
{template()}
6,判断,分支
{if()} {elseif()}  {else} {/if}
7,循环
{while()}   {/while}
{foreach()}  {/foreach}
8,执行一段PHP代码,包括赋值,函数等等等等
{code()}
有了这些东西,基本上就没有什么工作完成不了了。
内附比较详细的使用说明

<?

 /**
     * 设置水印字体
     *
     * @param    string|integer    $font    字体
     */
    function setMaskFont($font=2)
    {
        if(!is_numeric($font) && !file_exists($font))
        {
            die("字体文件不存在");
        }
        $this->font = $font;
    }
 
    /**
     * 设置文字字体大小,仅对truetype字体有效
     */
    function setMaskFontSize($size = "12")
    {
        $this->font_size = $size;
    }
 
    /**
     * 设置图片水印
     *
     * @param    string    $img     水印图片源
     */
    function setMaskImg($img)
    {
        $this->mask_img = $img;
    }
 
    /**
     * 设置水印横向偏移
     *
     * @param    integer     $x    横向偏移量
     */
    function setMaskOffsetX($x)
    {
        $this->mask_offset_x = (int)$x;
    }
 
    /**
     * 设置水印纵向偏移
     *
     * @param    integer     $y    纵向偏移量
     */
    function setMaskOffsetY($y)
    {
        $this->mask_offset_y = (int)$y;
    }
 
    /**
     * 指定水印位置
     *
     * @param    integer     $position    位置,1:左上,2:左下,3:右上,0/4:右下
     */
    function setMaskPosition($position=0)
    {
        $this->mask_position = (int)$position;
    }
 
    /**
     * 设置图片合并程度
     *
     * @param    integer     $n    合并程度
     */
    function setMaskImgPct($n)
    {
        $this->mask_img_pct = (int)$n;
    }
 
    /**
     * 设置文字合并程度
     *
     * @param    integer     $n    合并程度
     */
    ?>


 
参数说明:
$max_file_size  : 上传文件大小限制, 单位BYTE
$destination_folder : 上传文件路径
$watermark   : 是否附加水印(1为加水印,其他为不加水印);
使用说明:
1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;
2. 将extension_dir =改为你的php_gd2.dll所在目录;
****************************************************/
//上传文件类型列表
$uptypes=array(
    'image/jpg', 
    'image/jpeg',
    'image/png',
    'image/pjpeg',
    'image/gif',
    'image/bmp',
    'image/x-png'
);
$max_file_size=2000000;     //上传文件大小限制, 单位BYTE
$destination_folder="uploadimg/"; //上传文件路径
$watermark=1;      //是否附加水印(1为加水印,其他为不加水印);
$watertype=1;      //水印类型(1为文字,2为图片)
$waterposition=1;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);
$waterstring="http://www.xplore.cn/";  //水印字符串
$waterimg="xplore.gif";    //水印图片
$imgpreview=1;      //是否生成预览图(1为生成,其他为不生成);
$imgpreviewsize=1/2;    //缩略图比例
?>
<html>
<head>
<title>ZwelL图片上传程序</title>
<style type="text/css">
<!--
body
{
     font-size: 9pt;
}
input
{
     background-color: #66CCFF;
     border: 1px inset #CCCCCC;
}
-->
</style>
</head>
<body>
<form enctype="multipart/form-data" method="post" name="upform">
  上传文件:
  <input name="upfile" type="file">
  <input type="submit" value="上传"><br>
  允许上传的文件类型为:<?=implode(', ',$uptypes)?>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if (!is_uploaded_file($_FILES["upfile"][tmp_name]))
    //是否存在文件
    {
         echo "图片不存在!";
         exit;
    }
    $file = $_FILES["upfile"];
    if($max_file_size < $file["size"])
    //检查文件大小
    {
        echo "文件太大!";
        exit;
    }
    if(!in_array($file["type"], $uptypes))
    //检查文件类型
    {
        echo "文件类型不符!".$file["type"];
        exit;
    }
    if(!file_exists($destination_folder))
    {
        mkdir($destination_folder);
    }
    $filename=$file["tmp_name"];
    $image_size = getimagesize($filename);
    $pinfo=pathinfo($file["name"]);
    $ftype=$pinfo['extension'];
    $destination = $destination_folder.time().".".$ftype;
    if (file_exists($destination) && $overwrite != true)
    {
        echo "同名文件已经存在了";
        exit;
    }
    if(!move_uploaded_file ($filename, $destination))
    {
        echo "移动文件出错";
        exit;
    }
    $pinfo=pathinfo($destination);
    $fname=$pinfo[basename];
    echo " <font color=red>已经成功上传</font><br>文件名:  <font color=blue>".$destination_folder.$fname."</font><br>";
    echo " 宽度:".$image_size[0];
    echo " 长度:".$image_size[1];
    echo "<br> 大小:".$file["size"]." bytes";
    if($watermark==1)
    {
        $iinfo=getimagesize($destination,$iinfo);
        $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);
        $white=imagecolorallocate($nimage,255,255,255);
        $black=imagecolorallocate($nimage,0,0,0);
        $red=imagecolorallocate($nimage,255,0,0);
        imagefill($nimage,0,0,$white);
        switch ($iinfo[2])
        {
            case 1:
            $simage =imagecreatefromgif($destination);
            break;
            case 2:
            $simage =imagecreatefromjpeg($destination);
            break;
            case 3:
            $simage =imagecreatefrompng($destination);
            break;
            case 6:
            $simage =imagecreatefromwbmp($destination);
            break;
            default:
            die("不支持的文件类型");
            exit;
        }
        imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
        imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);
        switch($watertype)
        {
            case 1:   //加水印字符串
            imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);
            break;
            case 2:   //加水印图片
            $simage1 =imagecreatefromgif("xplore.gif");
            imagecopy($nimage,$simage1,0,0,0,0,85,15);
            imagedestroy($simage1);
            break;
        }
        switch ($iinfo[2])
        {
            case 1:
            //imagegif($nimage, $destination);
            imagejpeg($nimage, $destination);
            break;
            case 2:
            imagejpeg($nimage, $destination);
            break;
            case 3:
            imagepng($nimage, $destination);
            break;
            case 6:
            imagewbmp($nimage, $destination);
            //imagejpeg($nimage, $destination);
            break;
        }
        //覆盖原上传文件
        imagedestroy($nimage);
        imagedestroy($simage);
    }
    if($imgpreview==1)
    {
    echo "<br>图片预览:<br>";
    echo "<img src="".$destination."" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);
    echo " alt="图片预览:r文件名:".$destination."r上传时间:">";
    }
}
?>
</body>
</html>
 
这段代码是我在实现应用中经常用到地,拿出来希望给各位一小点点帮助.
谈谈国内三大PHP播客系统代码试用体验和建议 最近准备弄个播客玩玩,便找了一个PHP的开源博客系统,本人先申明下对网站开发不了解,说的也许就是个人自见。不足之处请指正。请勿见笑,欢迎交流,QQ:147468.

先测试了个西安的VICWORL系统,觉得不错,就是商业授权版才开放很多功能,但是就目前来说是我见到最好的播客系统。如果没有免费版本人将愿意使用商业版,它的测试站是http://www.vlog8.net/,据说马上开发针对虚拟主机的系统,也是个好消息。

第二是开发DISCUZ论坛的康盛创想目前测试的SUPEV的博客系统,测试网址:http://www.supev.org/。这是我期待的,我一直信任的DZ将来带来如何的播客站风暴呢?毕竟他最有底气也最可能率先免费投放代码给支持DZ的站长们。看看我们多少草根站长,都是穷苦人,呵呵,得民心者得天下。

最后说下POCLE,就是CC视频平台开发的http://union.bokecc.com/。他有3个,第一是CC视频插件,可以插在论坛、BLOG以及CMS,能支持目前大部分中小站点系统。第二是POCLE视频站。还有一个忘记了。但是他的基点都是将内容提供给他的官方服务器,提供带宽和存储,提供给用户一个链接,双赢的模式。这一点类似于现在动网和DZ为赢得市场开展的免费个人论坛建站一样的思路。这一点对初级用户来说很好,但是对于想拥有内容自主权的站长来说将是不能接受的。

 最后说下这个POCLE视频插件,遇到麻烦。不像写了就帖个在官方论坛写的帖子
辛苦的做了模板修改,测试,摸了半天,最后上传一个20M的文件传了1小时现在还是提交不了说正在上传稍候提交
那就换一个吧 换一个500K的视频文件AVI的,本地绝对可以放,DV录制的
什么情况呢:先是打开了审核,审核了5分钟,未果。刷新,不审核了,变成加载。让本人稍候。
最后本人稍候了大概5分钟,发帖的同时看了看还在稍候。
不明白要侯到何时。在刷新试试
哦  还是加载  崩溃了,这还不如本地做了AVI,url链接插入来的快。
既然承受了用户提供内容服务的双赢模式,绝对应该提供便利和友好的服务
看来本人还是期待DZ的spurv,或者VICWORL的播客系统要快的多
希望高层需要解决这个问题,不能总是靠人工来处理视频的服务问题
这样的产品可能会占领部分市场,但是我想随着播客系统代码部分开源免费的趋势,很难再次占领先机
我也测试过vicworl的代码,播放和传都不错
所以更应该加油了,也许说的有点多,但是还是希望CC做的更好
不然就会马上被DZ的播客反超了
忘记说了 有问题页面3个
其中一个还在传 20M 传了1小时零7秒现在连进度条也看不到
第二个 大概800K还是500K的视频 测试 测试视频发布插件誉天圣诞活动视频
第三就是视频展区 视频处理失败 http://www.yutianedu.com/52network/cclist.asp

 

建议
还有不知道什么时候开放针对虚拟主机或者独立服务器的代码系统
这将是一个主流,人们肯定不满足是视频版权归CC所有,或者说来维持CC视频的市场占有度
我相信这是一个不得不面对的问题,广大中小站长会愿意将播客架构在自己服务器上


/**
 * 我的文件上传类
 *
 * 未完成的功能:
 * 1.对目标目录是否存在的判断
 * 2.如果上传时出现重名,自动重命名
 *
 * @author M.Q. <[url]www.mengqi.net[/url]>
 */
class upload
{
    /**
     * 上传文件的信息,此值由构造函数取得,如果上传文件失败或出错或未上传,则此值为false
     *
     * @var array
     */
    private $file = false;
   
  
    /**
     * 构造函数:取得上传文件的信息
     *
     * 如果在上传文件的工程中发生错误,那么出错的文件不会放在结果中返回,结果中的文件都是可用的
     *
     * @param string $tag form表单中<input>标签中name属性的值,例<input name="p" type="file">
     *
     * 例1,上传单个文件:
     * <input name="upfile" type="file">
     *
     * 例2,上传多个文件:
     * <input name="upfile[]" type="file">
     * <input name="upfile[]" type="file">
     *
     * 结果(保存在$file变量中)如下:
     *
     * array(
     * [0] => array(
     *      ''name''      => ''abc.txt''
     *      ''type''      => ''text/plain’
     *      ''tmp_name''  => ''/tmp/phpgxecCb''
     *      ''error''     => 0
     *      ''size''      => 62
     *      )
     * [1] => array(
     *      ''name''&n

<
[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • 深入解析WordPress中加载模板的get_template_part函数

    这篇文章主要介绍了WordPress中加载模板的get_template_part函数,其中重点讲解了其函数钩子的使用,需要的朋友可以参考下...2016-01-14
  • mysql配置模板(my-*.cnf)参数详细说明

    mysql安装成功后有几个默认的配置模板,列表如下: my-huge.cnf : 用于高端产品服务器,包括1到2GB RAM,主要运行mysql my-innodb-heavy-4G.ini : 用于只有innodb的安装,最多有4GB RAM,支持大的查询和低流量 my-large.cnf : 用于...2015-03-15
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • Smarty模板学习笔记之Smarty简介

    1、简介Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目...2014-05-31
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • Ionic默认的Tabs模板使用实例

    这篇文章主要为大家详细介绍了Ionic默认的Tabs模板使用实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-09-01
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • Springboot使用thymeleaf动态模板实现刷新

    这篇文章主要介绍了Springboot使用thymeleaf动态模板实现刷新,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-31
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • 谈谈PHP中相对路径的问题与绝对路径的使用

    经常看到有人踩在了PHP路径的坑上面了,感觉有必要来说说PHP中相对路径的一些坑,以及PHP中绝对路径的使用,下面一起来看看。 ...2016-08-24
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06