Skip to content

Instantly share code, notes, and snippets.

@czenzel czenzel/radar-ingest.php
Last active Jan 2, 2017

Embed
What would you like to do?
Ingesting Radar Data to NOAAPORT NBSP from the National Weather Service using TGFTP/HTTP
<?php
/*
* teamWeather - Weather Center
* NOAAPORT FINFO Ingest Script for Radar Data
*
* Updated: 2016/11/12
*
* Copyright 2016 Christopher Zenzel
* All Rights Reserved
*/
// Set a time limit of 5 minutes
set_time_limit(60 * 5);
// Set the timezone and global variables
date_default_timezone_set('UTC');
$temporary_directory = dirname(__FILE__) . '/temp';
$download_keys = dirname(__FILE__) . '/keys';
$product_id = $argv[1];
$radar_sites = file_get_contents(dirname(__FILE__) . '/data/radar-sites.txt');
// Main Script Function
if (isset($product_id) && count($argv) > 0) {
$download_keys .= '/' . $product_id . '.txt';
Main();
} else {
echo "Please specify product.\n";
}
// Functions
function Main() {
global $radar_sites, $product_id;
// Find all the Radars from the NWS Directory
if (preg_match_all('/\"SI.([a-z]{4})\/\"/', $radar_sites, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$radar_icao = $match[1];
// Download each product
DownloadRadar($radar_icao, $product_id);
}
}
}
function DownloadRadar ($icao, $product) {
global $download_keys, $temporary_directory;
// Get the JSON of current download modified times
$download_data = array();
// Check if file exists of keys. If not create one.
if (file_exists($download_keys)) {
$download_data = json_decode(file_get_contents($download_keys), true);
}
// Create the URL to Check or Download
$url = 'http://tgftp.nws.noaa.gov/SL.us008001/DF.of/DC.radar/DS.' . $product . '/SI.' . strtolower($icao) . '/sn.last';
// Send a Header Request
$head_content = CurlHeaderRequest($url);
// Generate the file key unique to this file
$file_key = md5($url);
// Find the last modified and compare to our database
if (!empty($head_content) && preg_match('/last-modified:\s?(?<date>.+)\n/i', $head_content, $match)) {
if (isset($download_data[$file_key]) && (strtotime($download_data[$file_key]) >= strtotime($match['date']))) {
// The downloaded version is current (oops!)
// We should not do anything just yet
} else {
// Download the file, update the NOAAPORT server
$data = CurlDownloadRequest($url);
// Check empty status
if (!empty($data)) {
// Receive the WMO and AWIPS Header
$wmo_insert = WMOHeaderForInsert($data);
// Store a temporary file
$temp_key_id = md5(microtime() . rand());
$temp_file = $temporary_directory . '/' . $temp_key_id;
// Fix some character issues since we are not on a NP channel
$data = "000000000000000000000000" . $data;
// Now send the file
file_put_contents($temp_file, $data);
// Create the ingest command
$nbsp_cmd = 'nbspinsert -i 0 0 0 0 0 ' . $wmo_insert[0] . ' /var/noaaport/nbsp/spool/' . $wmo_insert[2] . '/' . $wmo_insert[0] . ' < "' . $temp_file . '"';
// Execute the command. We must wait also for it to complete.
exec($nbsp_cmd);
// Update the keys
$download_data[$file_key] = $match['date'];
// Process the file
echo $nbsp_cmd . "\n";
// Delete the temporary file
unlink($temp_file);
}
}
}
// Store download keys in flat file key database
file_put_contents($download_keys, json_encode($download_data));
}
function WMOHeaderForInsert ($data) {
// Get the top two lines
$header_data = explode("\n", $data);
$header_l1 = $header_data[0];
$header_l2 = $header_data[1];
// Matching
$wmo_id = strtolower(substr($header_l1, 0, 6));
$office = strtolower(substr($header_l1, 7, 4));
$wmo_stamp = strtolower(substr($header_l1, 11, 6));
$icao = strtolower(substr($header_l2, 3, 3));
$product = strtolower(substr($header_l2, 0, 3));
// Return the data
return array($office . '_' . $wmo_id . '-' . $product . $icao,
$office . '_' . $icao . '_' . $product,
$office);
}
function CurlDownloadRequest ($url) {
// Send a GET Request
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ch_get = curl_exec($ch);
curl_close($ch);
// Return the data
return $ch_get;
}
function CurlHeaderRequest ($url) {
// Send a HEAD Request via HTTP
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
$ch_head = curl_exec($ch);
curl_close($ch);
// Return the result
return $ch_head;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Index of /SL.us008001/DF.of/DC.radar/DS.p19r0</title>
</head>
<body>
<h1>Index of /SL.us008001/DF.of/DC.radar/DS.p19r0</h1>
<table><tr><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th></tr><tr><th colspan="3"><hr></th></tr>
<tr><td><a href="/SL.us008001/DF.of/DC.radar/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td></tr>
<tr><td><a href="SI.kabr/">SI.kabr/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kabx/">SI.kabx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kakq/">SI.kakq/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kama/">SI.kama/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kamx/">SI.kamx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kapx/">SI.kapx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.karx/">SI.karx/</a></td><td align="right">12-Nov-2016 06:58 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.katx/">SI.katx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbbx/">SI.kbbx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbgm/">SI.kbgm/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbhx/">SI.kbhx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbis/">SI.kbis/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kblx/">SI.kblx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbmx/">SI.kbmx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbox/">SI.kbox/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbro/">SI.kbro/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbuf/">SI.kbuf/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbyx/">SI.kbyx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcae/">SI.kcae/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcbw/">SI.kcbw/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcbx/">SI.kcbx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kccx/">SI.kccx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcle/">SI.kcle/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kclx/">SI.kclx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcrp/">SI.kcrp/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcxx/">SI.kcxx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcys/">SI.kcys/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdax/">SI.kdax/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kddc/">SI.kddc/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdfx/">SI.kdfx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdgx/">SI.kdgx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdix/">SI.kdix/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdlh/">SI.kdlh/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdmx/">SI.kdmx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdox/">SI.kdox/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdtx/">SI.kdtx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdvn/">SI.kdvn/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdyx/">SI.kdyx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.keax/">SI.keax/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kemx/">SI.kemx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kenx/">SI.kenx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.keox/">SI.keox/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kepz/">SI.kepz/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kesx/">SI.kesx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kevx/">SI.kevx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kewx/">SI.kewx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.keyx/">SI.keyx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfcx/">SI.kfcx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfdr/">SI.kfdr/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfdx/">SI.kfdx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kffc/">SI.kffc/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfsd/">SI.kfsd/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfsx/">SI.kfsx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kftg/">SI.kftg/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfws/">SI.kfws/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kggw/">SI.kggw/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgjx/">SI.kgjx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgld/">SI.kgld/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgrb/">SI.kgrb/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgrk/">SI.kgrk/</a></td><td align="right">12-Nov-2016 06:48 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgrr/">SI.kgrr/</a></td><td align="right">09-Nov-2016 20:48 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgsp/">SI.kgsp/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgwx/">SI.kgwx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgyx/">SI.kgyx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.khdx/">SI.khdx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.khgx/">SI.khgx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.khnx/">SI.khnx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.khpx/">SI.khpx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.khtx/">SI.khtx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kict/">SI.kict/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kicx/">SI.kicx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kiln/">SI.kiln/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kilx/">SI.kilx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kind/">SI.kind/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kinx/">SI.kinx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kiwa/">SI.kiwa/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kiwx/">SI.kiwx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kjax/">SI.kjax/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kjgx/">SI.kjgx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kjkl/">SI.kjkl/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klbb/">SI.klbb/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klch/">SI.klch/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klgx/">SI.klgx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klix/">SI.klix/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klnx/">SI.klnx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klot/">SI.klot/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klrx/">SI.klrx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klsx/">SI.klsx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kltx/">SI.kltx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klvx/">SI.klvx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klwx/">SI.klwx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klzk/">SI.klzk/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmaf/">SI.kmaf/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmax/">SI.kmax/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmbx/">SI.kmbx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmhx/">SI.kmhx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmkx/">SI.kmkx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmlb/">SI.kmlb/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmob/">SI.kmob/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmpx/">SI.kmpx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmqt/">SI.kmqt/</a></td><td align="right">12-Nov-2016 06:58 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmrx/">SI.kmrx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmsx/">SI.kmsx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmtx/">SI.kmtx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmux/">SI.kmux/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmvx/">SI.kmvx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmxx/">SI.kmxx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.knkx/">SI.knkx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.knqa/">SI.knqa/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.koax/">SI.koax/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kohx/">SI.kohx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kokx/">SI.kokx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kotx/">SI.kotx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kpah/">SI.kpah/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kpbz/">SI.kpbz/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kpdt/">SI.kpdt/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kpoe/">SI.kpoe/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kpux/">SI.kpux/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.krax/">SI.krax/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.krgx/">SI.krgx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kriw/">SI.kriw/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.krlx/">SI.krlx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.krtx/">SI.krtx/</a></td><td align="right">29-Oct-2016 23:30 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ksfx/">SI.ksfx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ksgf/">SI.ksgf/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kshv/">SI.kshv/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ksjt/">SI.ksjt/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ksox/">SI.ksox/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ksrx/">SI.ksrx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktbw/">SI.ktbw/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktfx/">SI.ktfx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktlh/">SI.ktlh/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktlx/">SI.ktlx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktwx/">SI.ktwx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktyx/">SI.ktyx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kudx/">SI.kudx/</a></td><td align="right">12-Nov-2016 06:48 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kuex/">SI.kuex/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kvax/">SI.kvax/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kvbx/">SI.kvbx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kvnx/">SI.kvnx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kvtx/">SI.kvtx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kvwx/">SI.kvwx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kyux/">SI.kyux/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.pabc/">SI.pabc/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.pacg/">SI.pacg/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.paec/">SI.paec/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.pahg/">SI.pahg/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.paih/">SI.paih/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.pakc/">SI.pakc/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.papd/">SI.papd/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.pgua/">SI.pgua/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.phki/">SI.phki/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.phkm/">SI.phkm/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.phmo/">SI.phmo/</a></td><td align="right">09-Nov-2016 23:19 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.phwa/">SI.phwa/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.tjua/">SI.tjua/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><th colspan="3"><hr></th></tr>
</table>
</body></html>
@czenzel

This comment has been minimized.

Copy link
Owner Author

commented Nov 12, 2016

Today's Fixes:

  • General Cleanup
  • Time Execution Limits
  • Cleanups for Cron Task
  • Ready and currently testing for Cloud (GoDaddy Pro Cloud)
@czenzel

This comment has been minimized.

Copy link
Owner Author

commented Nov 12, 2016

Updated:

  • Added ability to separate the download flat file key database to prevent any threading issues with cron tasks.
@czenzel

This comment has been minimized.

Copy link
Owner Author

commented Nov 13, 2016

Updated:

  • PHP 7.0 Date/Time Compatibility (strtotime)
@czenzel

This comment has been minimized.

Copy link
Owner Author

commented Jan 2, 2017

Tonight contains a major bug fix to allow for the header size to be recognized on a non-NOAAPORT import of radar data. NOAAPORT Channels add additional data on import that this script was not. The 24 characters of "000" were added to null the NOAAPORT channel to simulate a satellite signal for proper processing. Video update coming soon at chriszenzel.com

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.