基于OwnCloud文档管理系统的设计
2014-07-18徐楚媚刘东
徐楚媚 刘东
摘要:针对开发网站的经验和收获进行介绍。UDFiles网站的开发是基于web的文档管理系统,用PHP语言实现的。用户有注册登录后实现文档的管理和文档共享的功能,管理员还可以管理用户的账号、密码和权限。
关键词:基于web;文档管理;PHP;上传下载;开源
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)13-2993-03
1 概述
UDFiles网站是用PHP语言实现的类似网盘的文档管理系统。什么是网盘?网盘又称网络U盘或网络硬盘,给用户提供文件的存储、访问、共享、备份等文件管理的功能。用户可以把网盘理解为一个放在网络上的U盘或硬盘,无论你在家、单位或者其他地方,只要你连接到因特网,你都可以管理或者编辑网盘里的文件。相对于U盘和硬盘的好处是无须随身携带带来的方便,更不必害怕文件丢失引起的泄密。
2 UDFiles的功能介绍
该系统由系统理论观点的可观可测性可分为以下几个功能:
1)文件夹同步:在电脑上选择你所需要的文件夹,然后把服务器和它同步起来,这样文件夹的内容就会在所有设备上保持一致。
2)文件夹和文件共享:只要选择一个文件夹或文件,然后点击共享,那么就能实现分享的功能。
3)文件上传和下载:能实现多文件的上传,不同方式下载的功能。
4)文件管理(新建文件夹存储或删除或恢复):可新建一个文件夹存储上传的文件;若文件删除了可到回收站恢复文件或者彻底删除文件。
5)登录:只有登录后才能进行文件管理。
6)注册:用户可自定义注册自己想要的账号,管理员可添加或删除用户账号,即实现了用户和管理员均可注册的功能。
7)文件搜索:只要在搜索框输入相关的关键词即可搜索自己想要的文件,在文件较多时便可快速查找文件。
8)管理员管理用户的存储空间:管理员可设定用户的存储空间,但不超过2G。
9)权限管理:管理员可以管理用户的权限。
3 UDFiles开发的经验和收获
对于刚接触网站开发、只有一点html和css的基础的作者来说,有比较大的难度。然而PHP这门脚本语言在WEB领域上对于初学者来说有着学习资料多、类库多、上手容易等特点。于是,作者利用一个暑假的时间自学PHP语言,作者对php语言有了大概的了解,但不算精通。
对于一个编程初学者来说,要自己写一个网盘这种功能较为复杂的网站,确实比较困难。一开始,为了想证明自己能把PHP语言学好,自己就尝试把网站所有功能都自己制作。于是作者参考了百度网盘的架构设计,后来发生了种种的问题,导致尝试失败。作者这时才发现自己对PHP语言的掌握还没过关,还得要继续学习。
时间飞逝,经过一段时间的多方面尝试,作者认识到整个自己重新从零开始制作这样一个功能复杂的网盘网站,是很不现实的。后来作者认识到,在软件工程行业,重复造轮子(reinvent the wheel)是一件十分愚蠢的事情,为什么作者不能学习牛顿,尝试站在巨人的肩膀上呢?况且,通过二次开发,不仅能使学习到别人优秀的软件设计思想,还能锻炼自己,提高自主开发能力。
在这个情况下,Owncloud进入了作者的视野。它的出现让作者对UDFiles的开发有了新的希望。Owncloud是一套自由且开源并兼顾移动性和安全性的个人云存储解决方案,提供了一套强大的并能二次开发的网盘系统解决方案,免费使用,开发便利。作者进行二次开发时,开发环境为Windows 7、Apache 2.2.22、PHP 5.3.13、MYSQL 5.5.24、phpmyadmin 3.5.1。首先,浏览器打开Owncloud的下载页面(https://owncloud.com/download),然后下载ownCloud 5.0.15 Server版本的安装包,接着把它解压到本地服务器的www目录,接下来在浏览器输入http://localhost/install.php,你将会看到页面需要输入相关信息,设置网站初始用户名和密码、输入数据库用户名、密码、数据库名和数据库主机地址,只要按提示操作就能完成安装。
此时,进入的界面就是管理员界面。然而Owncloud管理员或者用户登录后进入主页管理自己的文件,普通用户要通过管理员添加后才能登录。并没有实现用户注册功能,基于web的文档管理系统UDFiles需要用户自行注册而不是管理员手动添加用户。于是,作者便结合Owncloud的API接口,独自写了一个注册功能,具体思路如下:用一个insert.php文件和register.html文件来实现用户自行注册。用户只要访问register.html页面注册并确定提交后,页面就会自动跳转到insert.php,而insert.php会开始验证用户名是否已注册,并把注册成功或失败的结果及时反馈给用户,同时把注册信息存入数据库,这样就实现了用户自行注册的功能。
首先是insert.php文件,在这个功能文件里,首先写了一个功能语句来判断owncloud是否已安装,如果未安装,则提示“命令必须在owncloud安装后方被能执行”。接下来,开始检查用户的注册时填写的用户名是否已被注册,此时用一个语句进入到数据库读取前缀为“users”及“preferences”的表,在里面寻找所有已注册的用户名,如果填写的用户名已存在,则输出一段Javascript脚本来提示“用户名已存在,请重新注册”。
//query1查询的用户为已注册但未登录;query2查询的用户为已注册并且登陆过。
$email = $_POST['email'];
$query1 = OC_DB::prepare('SELECT * FROM `*PREFIX*users` WHERE `uid` = ?' );endprint
$query2 = OC_DB::prepare('SELECT * FROM `*PREFIX*preferences` WHERE `userid` = ?' );
$values1=$query1→execute(array($email))→fetchAll();
$values2=$query2→execute(array($email))→fetchAll();
$existing_email1=(count($values1)>0);
$existing_email2=(count($values2)>0);
if ( $existing_email1 || $existing_email2) {
echo "";
require_once 'register.html';
}
else{
OC_user::createUser($_POST['email'], $_POST['password']);
echo "";
}
此外,UDFiles并不需要Owncloud的部分功能,在熟悉了Owncloud的架构后,作者把冗余的代码删除以免造成代码冗余拖慢页面浏览速度和空间浪费,例如:owncloud的详细教程和第三插件等。期间阅读Owncloud源代码是作者学习的一个过程,它对未来的编程有较大的帮助。另外,为了使UDFiles有自己的特色,作者就把网站界面做了些调整和修改,把登录位置做了较大的调整,并把全部的页面都进行了美化,让用户看起来更舒适美观。除此之外,为了让用户能有较好的体验,作者用Javascript脚本语言在用户注册、登录过程中可能会出现的成功或失败情况,都做了些相应的消息弹出框提示。然后,如果产品想要有自己的特色,一个鲜明的logo是必不可少的,于是作者为此设计了一个logo,名为UDFiles,意思是Upload And Download Files(上传和下载文件)。
最后,作者认真地修改了一些细节性的东西,例如:网站的Favicon、具体位置细调、原版中部分未翻译的英文翻译成中文(目的是让用户能更加了解具体功能的用法)等,最终效果如图1和图2所示。
图1 UDFiles登录/注册界面
4 结束语
不积跬步何以至千里,如果没有在一个又一个小困难中学习进步,作者又如何最终能完成这个项目呢?忙碌了一个学期,UDFiles网站终于告一段落了。这段时间很感谢老师的认真负责,对作者的悉心教导,让作者能够很好的掌握并运用所学的专业知识,真是感到受益匪浅。在这个项目的策划和实践中,作者的策划能力、全局分析、设计能力、抗压能力以及团结协作的能力都有了质的飞跃。
参考文献:
[1] 刘欣,李慧.PHP开发典型模块大全[M].3版.北京:人民邮电出版社,2012.
[2] 高洛峰.细说PHP[M].2版.北京:电子工业出版社,2012.
[3] 专属云网盘-Owncloud[EB/OL].http://www.everitsm.com/product/Owncloud/.
[4] 搭建私有云Owncloud,作者的云,作者做主[EB/OL].http://blog.icodex.org/2013/06/搭建私有云Owncloud-作者的云-作者做主.
[5] Owncloud主页[EB/OL].https://Owncloud.com/.
$query2 = OC_DB::prepare('SELECT * FROM `*PREFIX*preferences` WHERE `userid` = ?' );
$values1=$query1→execute(array($email))→fetchAll();
$values2=$query2→execute(array($email))→fetchAll();
$existing_email1=(count($values1)>0);
$existing_email2=(count($values2)>0);
if ( $existing_email1 || $existing_email2) {
echo "";
require_once 'register.html';
}
else{
OC_user::createUser($_POST['email'], $_POST['password']);
echo "";
}
此外,UDFiles并不需要Owncloud的部分功能,在熟悉了Owncloud的架构后,作者把冗余的代码删除以免造成代码冗余拖慢页面浏览速度和空间浪费,例如:owncloud的详细教程和第三插件等。期间阅读Owncloud源代码是作者学习的一个过程,它对未来的编程有较大的帮助。另外,为了使UDFiles有自己的特色,作者就把网站界面做了些调整和修改,把登录位置做了较大的调整,并把全部的页面都进行了美化,让用户看起来更舒适美观。除此之外,为了让用户能有较好的体验,作者用Javascript脚本语言在用户注册、登录过程中可能会出现的成功或失败情况,都做了些相应的消息弹出框提示。然后,如果产品想要有自己的特色,一个鲜明的logo是必不可少的,于是作者为此设计了一个logo,名为UDFiles,意思是Upload And Download Files(上传和下载文件)。
最后,作者认真地修改了一些细节性的东西,例如:网站的Favicon、具体位置细调、原版中部分未翻译的英文翻译成中文(目的是让用户能更加了解具体功能的用法)等,最终效果如图1和图2所示。
图1 UDFiles登录/注册界面
4 结束语
不积跬步何以至千里,如果没有在一个又一个小困难中学习进步,作者又如何最终能完成这个项目呢?忙碌了一个学期,UDFiles网站终于告一段落了。这段时间很感谢老师的认真负责,对作者的悉心教导,让作者能够很好的掌握并运用所学的专业知识,真是感到受益匪浅。在这个项目的策划和实践中,作者的策划能力、全局分析、设计能力、抗压能力以及团结协作的能力都有了质的飞跃。
参考文献:
[1] 刘欣,李慧.PHP开发典型模块大全[M].3版.北京:人民邮电出版社,2012.
[2] 高洛峰.细说PHP[M].2版.北京:电子工业出版社,2012.
[3] 专属云网盘-Owncloud[EB/OL].http://www.everitsm.com/product/Owncloud/.
[4] 搭建私有云Owncloud,作者的云,作者做主[EB/OL].http://blog.icodex.org/2013/06/搭建私有云Owncloud-作者的云-作者做主.
[5] Owncloud主页[EB/OL].https://Owncloud.com/.
$query2 = OC_DB::prepare('SELECT * FROM `*PREFIX*preferences` WHERE `userid` = ?' );
$values1=$query1→execute(array($email))→fetchAll();
$values2=$query2→execute(array($email))→fetchAll();
$existing_email1=(count($values1)>0);
$existing_email2=(count($values2)>0);
if ( $existing_email1 || $existing_email2) {
echo "";
require_once 'register.html';
}
else{
OC_user::createUser($_POST['email'], $_POST['password']);
echo "";
}
此外,UDFiles并不需要Owncloud的部分功能,在熟悉了Owncloud的架构后,作者把冗余的代码删除以免造成代码冗余拖慢页面浏览速度和空间浪费,例如:owncloud的详细教程和第三插件等。期间阅读Owncloud源代码是作者学习的一个过程,它对未来的编程有较大的帮助。另外,为了使UDFiles有自己的特色,作者就把网站界面做了些调整和修改,把登录位置做了较大的调整,并把全部的页面都进行了美化,让用户看起来更舒适美观。除此之外,为了让用户能有较好的体验,作者用Javascript脚本语言在用户注册、登录过程中可能会出现的成功或失败情况,都做了些相应的消息弹出框提示。然后,如果产品想要有自己的特色,一个鲜明的logo是必不可少的,于是作者为此设计了一个logo,名为UDFiles,意思是Upload And Download Files(上传和下载文件)。
最后,作者认真地修改了一些细节性的东西,例如:网站的Favicon、具体位置细调、原版中部分未翻译的英文翻译成中文(目的是让用户能更加了解具体功能的用法)等,最终效果如图1和图2所示。
图1 UDFiles登录/注册界面
4 结束语
不积跬步何以至千里,如果没有在一个又一个小困难中学习进步,作者又如何最终能完成这个项目呢?忙碌了一个学期,UDFiles网站终于告一段落了。这段时间很感谢老师的认真负责,对作者的悉心教导,让作者能够很好的掌握并运用所学的专业知识,真是感到受益匪浅。在这个项目的策划和实践中,作者的策划能力、全局分析、设计能力、抗压能力以及团结协作的能力都有了质的飞跃。
参考文献:
[1] 刘欣,李慧.PHP开发典型模块大全[M].3版.北京:人民邮电出版社,2012.
[2] 高洛峰.细说PHP[M].2版.北京:电子工业出版社,2012.
[3] 专属云网盘-Owncloud[EB/OL].http://www.everitsm.com/product/Owncloud/.
[4] 搭建私有云Owncloud,作者的云,作者做主[EB/OL].http://blog.icodex.org/2013/06/搭建私有云Owncloud-作者的云-作者做主.
[5] Owncloud主页[EB/OL].https://Owncloud.com/.