php自己写了一个模板
/*
作者: 牛哄哄
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视频的市场占有度
我相信这是一个不得不面对的问题,广大中小站长会愿意将播客架构在自己服务器上
<?php
/**
* 我的文件上传类
*
* 未完成的功能:
* 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
相关文章
- 这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
- PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
- index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
深入解析WordPress中加载模板的get_template_part函数
这篇文章主要介绍了WordPress中加载模板的get_template_part函数,其中重点讲解了其函数钩子的使用,需要的朋友可以参考下...2016-01-14- 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详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
- 这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
- 1、简介Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目...2014-05-31
- 这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31- 这篇文章主要为大家详细介绍了Ionic默认的Tabs模板使用实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-09-01
- 这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
- 今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
- 这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
- 这篇文章主要介绍了Springboot使用thymeleaf动态模板实现刷新,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-31
- 这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
- 经常看到有人踩在了PHP路径的坑上面了,感觉有必要来说说PHP中相对路径的一些坑,以及PHP中绝对路径的使用,下面一起来看看。 ...2016-08-24
- 这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
- 这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06