Commit 32dba1626ae897c4ddf79fa51719eaf418614835
1 parent
802f8727
Exists in
master
Add the PHP converter.
Showing
1 changed file
with
70 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,70 @@ | @@ -0,0 +1,70 @@ | ||
1 | +<?php | ||
2 | + | ||
3 | +/** | ||
4 | +* Look for a NetCDF file in the local base dir, then convert it using the NetCDF to CDF Python converter. | ||
5 | +*/ | ||
6 | + | ||
7 | +$converterPath = './nc2cdf.py'; | ||
8 | +$tmpDir = '/tmp/'; | ||
9 | +$log_path = $tmpDir . 'get_cdf.log'; | ||
10 | + | ||
11 | +if (!$_GET['id']) { | ||
12 | + exit('INPUT ERROR'); | ||
13 | +} | ||
14 | + | ||
15 | +require_once './DDserverWeb_ini.php'; | ||
16 | + | ||
17 | +$name = preg_replace('/\..*/', '', $_GET['id']); // ie. ACE/SW/sw19980204 | ||
18 | +$inputFilePath = baseDir . $name . '.nc.gz'; // ie. /data/DDBASE/DATA/ACE/SW/sw19980204.nc.gz | ||
19 | +$outputFilePath = $tmpDir . str_replace('/', '_', $name) . '.cdf'; // ie. /tmp/ACE_SW_sw19980204.cdf | ||
20 | + | ||
21 | +function send_file($mime_type, $send_file_path) { | ||
22 | + header('Content-Description: File Transfer'); | ||
23 | + header('Content-Type: ' . $mime_type); | ||
24 | + header('Content-Disposition: attachment; filename="' . basename($send_file_path) . '"'); | ||
25 | + header('Expires: 0'); | ||
26 | + header('Cache-Control: must-revalidate'); | ||
27 | + header('Pragma: public'); | ||
28 | + header('Content-Length: ' . filesize($send_file_path)); | ||
29 | + readfile($send_file_path); | ||
30 | +} | ||
31 | + | ||
32 | +function error($log_msg) { | ||
33 | + global $inputFilePath, $log_path; | ||
34 | + file_put_contents($log_path, date("Y-m-d H:i:s") . " with id='" . $_GET['id'] . "': $log_msg\n", FILE_APPEND); | ||
35 | + // If the file can not be converted, return the NetCDF file. | ||
36 | + send_file('application/x-gzip', basename($inputFilePath)); | ||
37 | + exit; | ||
38 | +} | ||
39 | + | ||
40 | +if (!file_exists($inputFilePath)) { | ||
41 | + exit('NO SUCH FILE'); | ||
42 | +} | ||
43 | + | ||
44 | +if (!is_dir(pathinfo($outputFilePath, PATHINFO_DIRNAME))) { | ||
45 | + error("Can not create $outputFilePath because the folder does not exist."); | ||
46 | +} | ||
47 | + | ||
48 | +try { | ||
49 | + $res = shell_exec("$converterPath $inputFilePath $outputFilePath"); | ||
50 | +} catch (Exception $e) { | ||
51 | + error("Error on shell_exec():\n$e"); | ||
52 | +} | ||
53 | + | ||
54 | + | ||
55 | +// The converter is not supposed to output something if the file has been successfully converted | ||
56 | +if(trim($res) != '') { | ||
57 | + error("The converter said:\n$res"); | ||
58 | +} | ||
59 | + | ||
60 | +if(! file_exists($outputFilePath)) { | ||
61 | + error("The output file $outputFilePath has not been created."); | ||
62 | +} | ||
63 | + | ||
64 | +send_file('application/x-cdf', $outputFilePath); | ||
65 | + | ||
66 | +sleep(600); // Wait 10 minutes before to delete the converted file. | ||
67 | +unlink($outputFilePath); | ||
68 | + | ||
69 | +exit; | ||
70 | +?> |