前段时间把博客迁移到好友祭酒的服务器,在文件管理方面有一些问题,然后找到了基于PHP的文件管理器开源项目:TinyFileManager,然后突发奇想把这个项目通过插件融合进后台,但是很多专栏需要收费&写的不适合小白,故自行摸索并写了这篇文章,文中可能会有不正确的解释及不符合规范的写法,欢迎在评论区中指正。
如您对插件开发记录不感兴趣,直接下载以上文件并安装插件即可,请对目录设置可读写权限,同时建议安装PHP拓展:fileinfo、iconv、mbstring、zip、tar
Plugin.php
插件信息的注释无需过多赘述,首先照猫画虎,写一个
class TinyFileManager_Plugin implements Typecho_Plugin_Interface{}
后续内容都是需要在{}
之内,文件开头需要<?php
,末尾不需要?>
告诉Typecho如何激活插件:
public static function activate(){}
有激活方法也得有禁用方法,不然会拉坨大的:
public static function deactivate(){}
在这里我使用addPanel
class TinyFileManager_Plugin implements Typecho_Plugin_Interface
{
public static function activate()
{
Helper::addPanel(3, 'TinyFileManager/panel.php', '文件管理', '文件管理器', 'administrator');
}
public static function deactivate()
{
Helper::removePanel(3, 'TinyFileManager/panel.php');
}
public static function config(Typecho_Widget_Helper_Form $form){}
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
}
很容易看出来addPanel
使用的方法
Helper::addPanel(面板添加的位置(即菜单中正数第几行),'文件路径', '菜单中的名字', '进入后的标题', '允许进入的用户权限');
注意,同时需要在插件禁用方法中写removePanel
panel.php
本来是想按照TinyFileManager官方文档中的写法嵌入,但是会报错500,因此这里使用iframe
并使其全屏显示。
需要包括header.php menu.php copyright.php common-js.php footer.php
<?php
include 'header.php';
include 'menu.php';
?>
<style>
iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: none;
}
</style>
<iframe id="tinyfilemanager" src="../usr/plugins/TinyFileManager/tinyfilemanager.php" frameborder="0"></iframe>
<?php
include 'common-js.php';
include 'footer.php';
?>
其他关于TinyFileManager的修改
将用户密码部分改为
include 'password.php';
$auth_users = array(
'admin' => password_hash($pwd, PASSWORD_DEFAULT)
);
由于public static function config(Typecho_Widget_Helper_Form $form){}
还没研究明白因此暂时不支持自定义密码
引导用户执行initialize.php
文件,如果未存在password.php
则随机生成一个字符串并创建该文件
<?php
function generate_password() {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$password = '';
for ($i = 0; $i < 12; $i++) {
$index = rand(0, strlen($characters) - 1);
$password .= $characters[$index];
}
return $password;
}
if (file_exists('password.php')) {
echo "初始化失败!password.php已存在!";
} else {
$password = generate_password();
$file_content = "<?php\n\$pwd = '" . $password . "';";
file_put_contents('password.php', $file_content);
echo "初始化成功!</br>您的账户为:admin</br>您的密码为:" . $password;
}
?>