|
楼主 |
发表于 2005 年 5 月 28 日 12:47:01
|
显示全部楼层
PunBB插件编写初探
PunBB安装文件中提供了一个演示用的插件AMP_Example.php。根据这个演示,我编写了一个简单的上传文件插件做测试。
就目前来看,plugin下的插件只能供管理员和版主使用。其文件名必须以"AMP_"或者"AP_"开始,"AMP_"表明该插件可以被管理员和版主使用,"AP_"开头的则只能由管理员使用。前缀之后的部分将出现在管理菜单下面的"插件"栏里。
plugin下的文件由admin_loader.php在运行过程中动态载入,因此可以使用全部的全局变量和一些通用的函数。插件中如果要显示左侧的管理员菜单,必须调用generate_admin_menu($plugin)函数。另外在插件中如果使用了表单,其action属性一定要使用$_SERVER['REQUEST_URI']。
下面是上传文件插件的源代码:
<?php
// 如果直接访问该文件则退出执行
if (!defined('UN'))
exit;
// 告诉admin_load.php这确实是一个插件而且被载入了
define('UN_PLUGIN_LOADED', 1);
//输出管理员菜单
generate_admin_menu($plugin);
?>
<div id="exampleplugin" class="blockform">
<h2><span>插件信息</span></h2>
<div class="box">
<div class="inbox">
<p>该插件由Xchange开发,用于管理员和版主上传较小的文件,并做为编写插件的演示。</p>
</div>
</div>
<h2 class="block2"><span>文件上传</span></h2>
<div class="box">
<div class="inbox">
<?php
if (isset($_FILES['myfile'])) {
//判断文件类型
switch ($_FILES['myfile']['type']) {
case "image/bmp":
$type="bmp";
break;
case "image/gif":
$type="gif";
break;
case "image/jpeg":
case "image/pjpeg":
$type="jpg";
break;
case "image/png":
$type="png";
break;
case "application/zip":
$type="zip";
break;
case "application/rar":
$type="rar";
break;
default:
$type="other";
}
if ($_FILES['myfile']['size']>512000||$_FILES['myfile']['size']==0) //判断文件是否过大或者没有内容
echo("\t\t\t\t<p>上传失败!文件大小错误。</p>");
elseif ($type=="other") //判断文件类型是否符合要求
echo("\t\t\t\t<p>上传失败!文件格式错误!</p>");
else {
$name=time()."_".md5($_FILES['myfile']['name']).".".$type; //给新文件取一个名字
move_uploaded_file($_FILES['myfile']['tmp_name'],"./upload/".$name); //移动上传的文件到置顶目录
echo("\t\t\t\t<p>文件已成功上传,您可以用如下地址访问:</p>\n");
echo("\t\t\t\t<p>".$pun_config['o_base_url']."/upload/".$name."</p>\n"); //返回访问地址
}
echo("\t\t\t\t<p>".'<a href="javascript: history.go(-1)">'."Go back</a></p>\n");
}
else {
?>
<p>可上传的文件类型:bmp、jpg、gif、png、zip和rar。</p>
<p>文件大小不得超过500KB。</p>
<form id="example" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['REQUEST_URI'] ?>">
<div class="inform">
<fieldset>
<legend>选择您要上传的文件:</legend>
<div class="infldset">
<input type="hidden" name="MAX_FILE_SIZE" value="512000">
<p><input name="myfile" type="file" size="40"></p>
<p><input name="submit" type="submit" value="上传"></p>
</div>
</fieldset>
</div>
</form>
<?php
}
?>
</div>
</div>
命名为AMP_upload.php,保存在plugins目录(用UTF-8格式,否则会有乱码)。在根目录下新建upload目录,并设置属性777即可使用。 |
|