APP下载

基于PHP的天津市地震局地震事件共享系统的设计与实现

2015-03-11孙路强栗连弟卞真付柳艳丽

山西地震 2015年2期
关键词:MySQL数据库

孙路强,刘 磊,栗连弟,卞真付,柳艳丽,朱 宏

(天津市地震局,天津 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上传,实现该功能的核心代码如下:

header("content-Type: text/html; charset=gb2312");

include ("conn/conn.php"); //连接数据库

$evtdate = $_POST["evtdate"]; //获取表单中提交的数据

………//省略部分代码

if($types==".seed"){

if($_FILES['file']['error']>0){//判断文件是否可以上传到服务器包括大小判定类型

………//省略部分代码

if(!is_dir("D:/seed/")){//判断指定目录是否存在

mkdir("D:/seed/");//创建目录

}

$path='D:/seed/'.$filename;//定义上传文件名称和存储位置

if(is_uploaded_file($_FILES['file']['tmp_name'])){//判断文件是否是HTPP POST上传

echo $path;

if(!move_uploaded_file($_FILES['file']['tmp_name'],$path)){//执行上传操作

echo "上传失败";

2.4 事件下载

作为地震事件共享系统最主要的功能是向技术人员提供历史事件进行研究分析,因此,如何更便捷地向用户提供事件下载功能,成为共享系统的重要功能之一。考虑到在同一时间段内可能会出现多个地震事件,在提供事件下载链接的同时,出现与此匹配的地震事件目录,以便用户在多个事件中下载正确事件。通过HTTP方式下载文件,主要应用header()函数,其作用是:以HTTP协议将HTML文档的标头送到浏览器[3],并指示浏览器具体怎么处理这个页面,实现该功能的核心代码如下:

………//省略部分代码

$file_name = $row[8];

$file_dir = "D:/seed/";//下载文件存放目录

if (!file_exists($file_dir . $file_name)) {//检查文件是否存在

echo "文件找不到";

echo $file_dir . $file_name;

}else {

echo $file_dir . $file_name;//打开文件

$file = fopen($file_dir . $file_name,"r");

Header("Content-type: application/octet-stream");//文件流

Header("Accept-Ranges: bytes");

Header("Accept-Length: ".filesize($file_dir . $file_name));

Header("Content-Disposition: attachment; filename=" . $file_name);

readfile($file_dir . $file_name);

}

?>

2.5 问题反馈回复功能

在该模块中,用户可将应用事件文件产出的结果通过该模块上传,上传内容包括文字、图片,同时用户可将自己在系统使用过程中遇到的问题发布在该模块中,便于管理员解决问题。在此功能的实现过程中,主要解决的问题是图片的数据库存储和显示,选择图片数据库存储能够方便维护,备份、恢复数据简单;文件元数据检索速度快,核心代码如下:

if ($cover_type != ".jpg" && $cover_type != ".gif" && $cover_type !=

".JPG" && $cover_type != ".GIF" && $cover_type != ".bmp" && $cover_type !=

".BMP") { //判断图片的格式

echo "";

} else {

$cover=iconv("utf-8","gb2312",$cover);//设置字符串的编码格式

$fp = fopen($cover, "rb");//以二进制形式打开图片

$image = addslashes(fread($fp, filesize($cover)));//读取二进制的数据

………//省略部分代码

2.6 自动绘制震中分布图

用户通过输入起始时间条件,点击绘图按钮,WEB页面会调用百度地图URL API2.0接口及开源代码库,实现在地图上添加Maker、比例尺、设置中心点坐标等[4]。由于存储在MySQL数据库中的事件经纬度信息的调用、读取是通过PHP代码实现的,并赋值于数组内。当javascript调用该参数时,需要通过JSON(JavaScript Object Notation)来实现,JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集实现数据在不同语言程序间的交换,震中分布绘制功能如第36页图4所示。

图4 绘制地震震中分布图Fig.4 Drawing of earthquake epicenter distribution map

实现该功能的核心代码如下:

………//省略部分代码

//百度地图及lib库调用

………//省略部分代码

3数据库的设计

本系统采用Apache+PHP+phpMyAdmin+MySQL5.0开发实现,利用MySQL构建地震事件共享数据库db_earthevt以及相关数据表tb_evt、tb_problem、tb_user、tb_manager,利用公共模块设计conn.php数据库连接文件,在需要进行数据库操作的程序中,通过include或者其他包含语句调用连接文件。

3.1 构建数据库表空间

通过phpMyAdmin图形化管理工具的主页对数据库表进行建设[5],字符编码格式采用gb2312_chinese_ci,将主要数据表的创建结构列出(见第37页表1、表2)。

表1 地震事件信息表

表2 问题反馈信息表

3.2 数据库连接公共文件

公共文件就是将多个页面都可能使用到的代码写成单独的文件,在使用时,只要用include或require语句将文件包含进来即可。该系统各模块与数据库的连接便是通过公共文件conn.php来实现的,代码如下:

$conn=mysql_connect("localhost","root","rootme") or die("数据库连接错误".mysql_error());

mysql_select_db("db_earthevt",$conn) or die("数据库访问错误".mysql_error());

mysql_query("set names utf8");

?>

4软件的应用与作用

天津市地震局地震事件共享系统自2014年4月投入使用,实现了地震事件与目录信息的及时更新,历史事件信息已更新至2011年11月,已于2014年8月前实现历史事件的全部追加。技术人员使用数据正常,并通过该系统发布了应用数据产出的成果;通过震中分布图自动绘制功能,技术人员能够快速绘制出选择时间、区间内的地震分布情况,并判断地震活跃性;同时能够利用该功能快速查询地震事件发生的具体位置,便于地震应急工作的展开。

在数据库建设与应用上,遵循标准和坚持开放是数据库设计的基本原则,这样选择的数据库平台和构造的数据库系统才具有先进性、灵活性、可扩展性和继承性。在实际应用中,这一功能也显现出来,查询快速简单。

5结束语

数据共享的程度反映了一个地区、一个国家的信息发展水平,数据共享程度越高,信息发展水平越高。要实现数据共享,首先应建立一套统一的、法定的数据交换标准、规范格式,天津市地震局地震事件共享系统正式利用该项技术,统一规范了地震事件的名称格式、保存格式及存储分类,改革现有的数据存储方法,方便使用,基于历史事件信息增加了地震分布图功能,提高了共享信息的利用率。科研人员将自己产出的结果利用该系统的问题反馈功能共享给所有人员使用,破除了原有的部门之间的信息阻隔,有利于信息交流和防震减灾事业的发展。

系统在研究、开发、论证阶段,得到天津市地震局聂永安局长、监测预报中心王建国、应急信息中心李刚、信息中心刘磊的大力支持和帮助,在此深表感谢!

参考文献:

[1]李刚,孙晶岩.MPLS VPN高速区域网络在天津地震监测系统中的应用[J].震灾防御技术,2012,7(1):92-99.

[2]李刚,王晓磊.基于Nagios软件的综合短信联动告警系统在地震行业中的应用研究[J].地震研究,2012,35(1):133-138.

[3]李亚芳,陈述新.新疆测震台网历史数据共享平台的设计与实现[J].内陆地震,2013,27(4):356-363.

[4]明日科技.PHP从入门到精通[M].北京:清华大学出版社,2008.

[5]徐济惠,蒋宁.一个数据共享系统的实现[J].计算机系统应用,2014,23(4):38-43.

Design and Implementation of Seismic Event Sharing System of Earthquake Administration of Tianjin Municipality Based on PHP

SUN Lu-qiang, LIU Lei, LI Lian-di, BIAN Zhen-fu, LIU Yan-li, ZHU Hong

(Earthquake Administration of Tianjin Municipality, Tianjin 300201, China)

Abstract:Seismic event sharing system of Earthquake Administration of Tianjin Municipality is designed by using PHP language and MySql database design system. The system has the functions of uploading, downloading, ing and drawing the earthquake epicenter distribution map. It can regulate the format of seismic events and change method of data storage. Scientific research personnel in the administration can query and download the historical seismological data by using browser, which is helpful for information sharing.

Key words:PHP language; MySql database; Sharing system; Historical seismological data

作者简介:第一孙路强(1985—),男,天津市人。2008年毕业于天津理工大学,工程师。

基金项目:中国地震局三结合课题(150205)、测震台网青年骨干专项(20150402)联合资助。

收稿日期:2014-09-15

中图分类号:P315.99

文献标志码:A

文章编号:1000-6265(2015)02-0032-06

猜你喜欢

MySQL数据库
基于Android开发的APP服务器端设计
基于PHP&MySQL的高校招生管理信息系统设计与实现
《软件体系结构》课程网站设计与实现
虚拟化平台下MySQL数据库集群的搭建
智能公交查询系统的设计与实现
基于android的脸部识别校园服务APP的研究与开发
SSH框架与MiniUI框架融合技术在的医疗信息系统中的应用
Linux负载度量
充电桩状态实时监控系统与C/S框架设计
改进的SSH框架技术在医药管理系统中的研究及应用