基于PHP的天津市地震局地震事件共享系统的设计与实现
2015-03-11孙路强栗连弟卞真付柳艳丽
孙路强,刘 磊,栗连弟,卞真付,柳艳丽,朱 宏
(天津市地震局,天津 300201)
·技术交流·
基于PHP的天津市地震局地震事件共享系统的设计与实现
孙路强,刘磊,栗连弟,卞真付,柳艳丽,朱宏
(天津市地震局,天津300201)
摘要:利用PHP语言和MySql数据库设计系统,设计天津市地震局地震事件共享系统。该系统具有地震事件的上传、下载、查询、绘制地震震中分布图等功能,实现规范地震事件格式,改变数据存储方法,便于局内科研人员通过浏览器方式对测震历史数据进行检索与下载,进一步提高共享信息的利用率。
关键词:PHP语言;MySql数据库;共享系统;测震历史数据
0引言
随着信息时代的不断发展,不同部门、不同地区间的信息交流逐步增加,计算机网络技术的发展为信息传输提供了保障。当大量的空间数据出现在网络上,面对多种多样的数据格式,如何运用是网络数据共享与数据转换的问题。实现数据共享可以使更多的人更充分地使用已有数据资源,减少资料收集、查询、保管等工作,提高技术人员使用数据、分析数据的工作效率。天津市地震局地震事件共享系统利用PHP服务器端HTML嵌入式脚本描述语言,实现历史地震事件的网络共享,用户可上传、下载、查询天津测震台网历史事件,分享上传数据,分析产出结果。
1系统设计技术思路
对以光盘形式存储的历史事件文件运行整理,并对文件名按照程序上传要求进行批处理修改,将修改后的事件文件统一存储至服务器端目录下。不断产生的新数据和地震目录可以通过系统提供的事件及目录上传功能完成事件和目录的追加。平台采用B/S结构(Browser/Server),在系统设计方面采用Smarty架构,使用PHP技术进行动态页面的设计。PHP是一种服务器端、跨平台、HTML嵌入式的脚本语言,是一种被广泛应用的开源式的多用途脚本语言[1],尤其适合Web开发。服务器启动后,用户可以不使用客户端软件,只使用浏览器即可访问,既保持图形化用户界面,又大大减少应用的维护量。利用此方法能够将应用程序分成两部分实现:视图和逻辑控制,目的就是将用户界面与PHP code分离,这样,在修改程序时不会影响到页面设计,而美工在重新设计或修改页面时也不会影响到程序逻辑。
系统后台数据库选用MySQL数据库,MySQL数据库是目前运行速度最快的SQL语言数据库,具有支持跨平台、安全性高、存储容量大等特点。天津市地震局“十五”测震系统软件均采用该种数据库,因此,研究选用MySQL数据库作为后台数据库将有利于与现有数据库数据进行交换。该系统地震事件目录、文件存储信息、用户信息以及成果问题内容均存储在MySQL数据库中。
2系统设计
根据局内科研人员的要求,结合现有测震台网地震事件的保存情况,研究设计的地震事件共享系统主要实现以下功能模块:用户权限管理、事件检索、地震目录事件上传下载、成果展示反馈、震中分布图自动绘制等功能,天津市地震局地震事件共享系统业务流程如第33页图1所示。
2.1 登录权限管理
为达到在系统网站中方便管理地震事件及目录的目的,可在用户权限上进行设置。如果以管理员身份登录,则可正常使用事件上传功能;如果是普通用户登录,则不能使用事件上传功能,其余模块均能正常使用。该功能通过SESSION控制用户访问权限,初始化SESSION变量,通过$_POST[]方法获取表单提交的用户名和密码[2],完成对用户名和密码的验证。如果正确,则将用户名和密码赋值给SESSION变量,并通过JavaScript脚本跳转到相应权限用户的初始界面,其代码如下:
图1 事件共享系统业务流程Fig.1 Operation flow of event sharing system
session_start();
$A_name=$_POST[name];//接收表单提交的用户名
$A_pwd=$_POST[pwd];//接收表单提交的密码
………//省略部分代码
function checkinput(){
include("conn/conn.php");//连接数据源
$sql=mysql_query("select * from tb_user where name='".$this->name."' and pwd='".
$this->pwd."'",$conn);
$info=mysql_fetch_array($sql);//检索管理员名称和密码是否正确
if($info==false){//如果管理员名称或密码不正确,则弹出相关提示信息
echo "";
exit;
}
else{
if($this->name=="root" && $this->pwd=="rootme"){
echo "";
$_SESSION[admin_name]=$info[name];
$_SESSION[pwd]=$info[pwd];
}else{
echo "";
$_SESSION[admin_name]=$info[name];
$_SESSION[pwd]=$info[pwd];
}
2.2 事件查询
在地震事件共享系统提供的事件查询功能中,用户可通过输入要查询事件的起始与终止时间来查询地震目录信息,包括发震时间、经纬度、深度、震级、地名等信息,查询功能界面如图2所示。
图2 地震事件共享系统查询界面Fig.2 Query interface of seismic event sharing system
对指定时间范围内的数据进行查询,可通过关键字between…and…实现,利用正则表达式对日期进行校正。正则式作为一种描述字符串结构模式的表达式,可用于验证用户输入的数据和检索大量文本,实现代码如下:
if($_POST[sub]){
if($_POST[text1] == "" || $_POST[text1] == "输入开始日期" || $_POST[text] == "" || $_POST[text] == "输入结束日期"){
echo "";
}else{
if(preg_match("/([0-9]{3}[1-9][0-9]{2}[1-9][0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[0-2])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))/",$_POST[text])){
$conn = mysql_connect("localhost","root","rootme") or die("connect mysql false");
mysql_select_db("db_earthevt",$conn) or die("connect database false");
mysql_query("set names gb2312");
$rss = mysql_query("select * from tb_evt where evtdate between '$_POST[text1]' and '$_POST[text]' order by evtdate");
if (!$rss) echo "SQL错误:".mysql_error();
while($rst = mysql_fetch_array($rss)){
?>
2.3 事件上传
管理员用户通过事件上传模块,可将地震事件对应的地震目录和文件名上传至数据库表tb_evt中,并将事件文件上传至服务器端指定目录下。根据系统设置统一了的文件命名,同时通过tb_evt表中的filename列,将地震目录与服务器端下的事件文件进行匹配。事件文件上传界面如图3所示。
图3 地震事件、目录上传界面Fig.3 Uploading interface of seismic event and earthquake catalogue
在PHP中,应用move_uploaded_file()函数实现将文件上传到指定文件夹。在执行文件上传之前,为防止潜在的攻击对原本不能通过脚本交互的文件进行非法管理,可应用is_uploaded_file()函数判断指定文件是否通过HTTP POST上传,实现该功能的核心代码如下: