westdc-zf1/tools/wsndata.php

193 lines
6.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
set_time_limit(0);
error_reporting(-1);
ini_set("display_errors",'On');
ini_set('error_log','/tmp/wsn.log');
//安全检查只接受来自westdc.westgis.ac.cn的访问
if(@$_SERVER['HTTP_CLIENT_IP']){
$onlineip=$_SERVER['HTTP_CLIENT_IP'];
}elseif(@$_SERVER['HTTP_X_FORWARDED_FOR']){
$onlineip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$onlineip=@$_SERVER['REMOTE_ADDR'];
}
if ($argc!=2 && $onlineip!='210.77.68.241' && $onlineip!='210.77.68.215' && $onlineip!='2001:cc0:f006::9' && $onlineip!='2001:cc0:f006::405')
die("error! You are not permitted to visit this page.".$onlineip);
$db = new PDO('pgsql:host=210.77.68.40;dbname=observation', "gis", "gispassword");
$station = 0;
$site = 0;
$logger = 0;
$variable = 0;
$start;
$end;
$uid=0;
$sitename="";
$mailname = "";
$createtime = date("Ymd",time());
$endtime="";
$html="";
$time="";
$value="";
$var="";
$file=array();
$basepath='/disk1/WestDC/wsndata/';
//接收用户uid只生成这个用户的数据
if($argc==2)
{
$uid = (int)$argv[1];
}else{
$uid = (int)@$_GET['uid'];
}
if (!($uid>0))
{
die("Error in parameter.");
}
$action=@$_GET['action'];
if(!empty($action) && $action=='prepare')
{
$content="php -f /var/www/ftp2.westgis.ac.cn/wsndata.php $uid";
$filename='wsndata.sh';
if (!file_put_contents($filename, $content, LOCK_EX))
{
sleep(1);
if (!file_put_contents($filename, $content, LOCK_EX))
{
sleep(1);
if (!file_put_contents($filename, $content, LOCK_EX))
die("error in write wsndatar.sh");
}
}
} else {
$sql_user = "SELECT distinct uid,site,variable,starttime,endtime from users_pm_down where starttime is not null and result=-1 and type='down' and uid=$uid";
$sth_user = $db->query($sql_user);
$rows_user = $sth_user->fetchAll();
//有需要生成的数据
if($rows_user)
{
foreach($rows_user as $k=>$v )
{
//逐个生成
$site = $v['site'];
$variable = $v['variable'];
$start = date('Y-m-d',strtotime($v['starttime']));
$end = date('Y-m-d',strtotime($v['endtime']));
$uid = $v['uid'];
//计算有多少天
$days=round((strtotime($end)-strtotime($start))/3600/24)+1;
//获取观测点的名称
$sql_site= "SELECT fld_name from tbl_site_info where fld_site_id=$site";
$sth_site = $db->query($sql_site);
$rows_site = $sth_site->fetch();
$sitename= $rows_site['fld_name'];
//先为该用户创建一个文件夹
$aimDir_user=$basepath.'wsn_'.$uid;
if (!file_exists($aimDir_user))
{
$result = mkdir($aimDir_user);
}
//在该用户文件夹下面再建立一个观测点文件夹
$aimDir_site=$aimDir_user.DIRECTORY_SEPARATOR.$sitename;
if (!file_exists($aimDir_site))
{
$result = mkdir($aimDir_site);
}
//选择全部变量
if($variable==-1)
{
//获取数据
$sql2= "SELECT v.fld_time as time,v.fld_value as value,va.fld_name as variablename FROM tbl_value v left join tbl_variable_info va on v.fld_variable_id=va.fld_variable_id WHERE v.fld_site_id=$site AND v.fld_time>='$start' AND v.fld_time<'$end' ORDER BY time ";
$sth2 = $db->query($sql2);
$rows2 = $sth2->fetchAll();
$endtime=date("Y-m-d",strtotime($start)+24*3600);
$head = "Time,Variable,Value, \n";
$html="";
foreach ($rows2 as $k=>$v)
{
//组装数据
if ($v['time']>=$start && $v['time']<$endtime)
{
$html.=$v['time'].",".$v['variablename'].",".$v['value']."\n";
} elseif ($v['time']>=$endtime) {
//写入文件
$resulttime=date("Ymd",strtotime($start));
$fp = fopen($aimDir_site.DIRECTORY_SEPARATOR.$sitename."_all_".$resulttime.".CSV","w+");
fwrite($fp,$head.$html); //写入数据
fclose($fp); //关闭文件句柄
$start=$endtime;
$endtime=date("Y-m-d",strtotime($start)+24*3600);
$html=$v['time'].",".$v['variablename'].",".$v['value']."\n";
}
if ($k==count($rows2)) //last record
{
//写入文件
$resulttime=date("Ymd",strtotime($start));
$fp = fopen($aimDir_site.DIRECTORY_SEPARATOR.$sitename."_all_".$resulttime.".CSV","w+");
fwrite($fp,$head.$html); //写入数据
fclose($fp); //关闭文件句柄
}
}
print $sitename."\r\n";
$sql_up= "update users_pm_down set result=0 WHERE site=$site and variable=-1 and uid=$uid and result=-1 and type='down'";
$db->query($sql_up);
} else {
//获取观测变量的名称
$sql3= "SELECT fld_name from tbl_variable_info where fld_variable_id=$variable";
$sth3 = $db->query($sql3);
$rows3 = $sth3->fetch();
$varname=$rows3['fld_name'];
//获取数据
$endtime=date("Y-m-d",strtotime($start)+24*3600);
$sql2= "SELECT v.fld_time as time,v.fld_value as value,va.fld_name as variablename FROM tbl_value v left join tbl_variable_info va on v.fld_variable_id=va.fld_variable_id WHERE v.fld_variable_id=$variable and v.fld_site_id=$site AND v.fld_time>='$start' AND v.fld_time<='$end' ORDER BY time ";
$sth2 = $db->query($sql2);
$rows2 = $sth2->fetchAll();
$head = "Time,Variable,Value, \n";
$html="";
foreach ($rows2 as $k=>$v)
{
//组装数据
if ($v['time']>=$start && $v['time']<$endtime)
{
$html.=$v['time'].",".$v['variablename'].",".$v['value']."\n";
} elseif ($v['time']>=$endtime) {
//写入文件
$resulttime=date("Ymd",strtotime($start));
$fp = fopen($aimDir_site.DIRECTORY_SEPARATOR.$sitename."_".$varname."_".$resulttime.".CSV","w+");
fwrite($fp,$head.$html); //写入数据
fclose($fp); //关闭文件句柄
$start=$endtime;
$endtime=date("Y-m-d",strtotime($start)+24*3600);
$html=$v['time'].",".$v['variablename'].",".$v['value']."\n";
}
if ($k==count($rows2)) //last record
{
//写入文件
$resulttime=date("Ymd",strtotime($start));
$fp = fopen($aimDir_site.DIRECTORY_SEPARATOR.$sitename."_".$varname."_".$resulttime.".CSV","w+");
fwrite($fp,$head.$html); //写入数据
fclose($fp); //关闭文件句柄
}
}
print $sitename.'--'.$varname."\r\n";
//给处理的数据做个标记result=0
$sql_up= "update users_pm_down set result=0 WHERE site=$site and variable=$variable and uid=$uid and result=-1 and type='down'";
$db->query($sql_up);
}
}
}
}