湿度計算 PHP版 のソース
たぶん必要なのこれだけ。
index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META name="GENERATOR" content="IBM WebSphere Homepage Builder Version 6.0.2.1 for Windows"> <META name="GENERATOR" content="WZ EDITOR Version 4.00E"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>湿度計算 PHP版</TITLE> </HEAD> <BODY bgcolor="#cceeee"> <H2>湿度計算シート</H2> <P><font color="#cc3399">PHP版(携帯対応)</font><br></P> <?php function rh2wet($xx) { global $a, $b, $k, $m, $t1, $p0, $param; $ee_dry = 6.11 * pow(10 , (7.5 * $t1 / (237.3 + $t1))); if ($param == "dp") { $ee_now = 6.11 * pow(10 , ($a * $xx /($b + $xx))); } else { $ee_now = $ee_dry * $xx / 100; } $eet = 0; $tt1 = -273.15; $tt2 = $t1; for ($cc = 1; $cc < 1000; $cc++) { $tt = ($tt1 + $tt2) / 2; $ee = 6.11 * pow(10 , ($a * $tt / ($b + $tt))); $eet = $ee - $k * $p0 * ($t1 - $tt) / $m; if ($ee_now > $eet) { $tt1 = $tt; } else { $tt2 = $tt; } if (abs($ee_now - $eet) < 0.0000001) { $cc = 1000; } } return $tt; } $def_t1 = 25.0; $def_t2 = 23.0; $def_p0 = 1013.25; $def_param = "dry"; $cw = $_GET['wind']; $cf = $_GET['freeze']; $cp = $_GET['param']; if ((stristr ($cw , "off") == false) && (stristr ($cw , "no") == false) && ($cw != "") || ($_POST['chk_wind'] != "" )) { $st_wind = "checked"; } else { $st_wind = ""; } if ((stristr ($cf , "off") == false) && (stristr ($cf , "no") == false) && ($cf != "") || ($_POST['chk_freeze'] != "" )) { $st_freeze = "checked"; } else { $st_freeze = ""; } $param = $_POST['param']; $s_param = array("dry"=>"", "dp"=>"", "rh"=>""); if ((stristr ($cp , "dry")) || (stristr ($cp , "dp")) || (stristr ($cp , "rh"))) { $s_param[$cp] = " selected"; $param = $cp; } else { $s_param[$param] = " selected"; } if ((isset($_POST['p0'])) || ((isset($_GET['t1'])) && (isset($_GET['t2'])))) { if (isset($_GET['t1'])) { $t1 = (float) $_GET['t1']; } else { $t1 = (float) $_POST['t_dry']; } if (isset($_GET['t2'])) { $t2 = (float) $_GET['t2']; } else { $t2 = (float) $_POST['t_wet']; } if (isset($_GET['p0'])) { $p0 = (float) $_GET['p0']; } elseif (isset($_POST['p0'])) { $p0 = (float) $_POST['p0']; } else { $p0 = $def_p0; } $w = $st_wind; $f = $st_freeze; if ($f) { $a = 9.5; $b = 265.5; if ($w) { $k = 0.44; // 蒸気圧乗数 $m = 755; // 通風乗数 } else { $k = 0.0007; $m = 1; } } else { $a = 7.5; $b = 237.3; if ($w) { $k = 0.5; $m = 755; } else { $k = 0.0008; $m = 1; } } if (stristr ($param , "dry") == false) { $t2 = rh2wet($t2); } $e_t1 = 6.11 * pow(10 , 7.5 * $t1 /(237.3 + $t1)); // 飽和水蒸気圧(t1℃,vs水) $e_t2 = 6.11 * pow(10 , $a * $t2 /($b + $t2)); // 飽和水蒸気圧(t2℃,vs水or氷) $e_now = $e_t2 - $k * $p0 * ($t1 - $t2) / $m; // 現在の水蒸気圧 $rh = $e_now / $e_t1 * 100.0; // 相対湿度 if ($e_now == 6.11) { $t_dp = 0; } elseif ($e_now <= 0) {$t_dp = -273.15;} else { $t_dp = $b / (($a / log10($e_now / 6.11)) - 1); } // 露点温度 $s = 622 * $e_now / ($p0 - 0.378 * $e_now); // 比湿 [g/kg(湿り空気)] $h_abs_v = 216.7 * $e_now / (273.15 + $t1); // 容積絶対湿度 [g/m^3] $h_abs_w = (18.015 * $e_now) / (29.064 * ($p0 - $e_now)); // 重量絶対湿度 [kg/kgDA] $di_rh = 0.81 * $t1 + 0.01 * $rh * (0.99 * $t1 - 14.3) + 46.3; // 不快指数 if ($di_rh <= 55) $c_rh = "寒い"; elseif ($di_rh <= 60) $c_rh = "肌寒い"; elseif ($di_rh <= 65) $c_rh = "何も感じない"; elseif ($di_rh <= 70) $c_rh = "快い"; elseif ($di_rh <= 75) $c_rh = "暑くない"; elseif ($di_rh <= 80) $c_rh = "やや暑い"; elseif ($di_rh <= 85) $c_rh = "暑くて汗が出る"; else $c_rh = "我慢できぬ暑さ"; printf ("乾球示度(DRY) : %3.1f ℃<br>" , $t1); printf ("湿球示度(WET) : %3.1f ℃<br>" , $t2); printf ("気圧 : %4.2f hPa<br>" , $p0); if($w) {echo ("<font color='#cc0033'><b> +通風</b></font> ");} if($f) {echo ("<font color='#990033'><b> +凍結</b></font>");} if($f or $w) {echo ("<br>");} print ("<br>"); printf ("<font color='#000099'><b>相対湿度 : %3.2f %</b></font><br>", $rh); printf ("<font color='#880033'>不快指数 : %3d (%s)</font><br>", $di_rh , $c_rh); printf ("<font color='#008833'>露点温度 : %3.1f ℃</font><br>", $t_dp); printf ("重量絶対湿度 : %1.5f kg/kgDA<br>", $h_abs_w); printf ("容積絶対湿度 : %4.2f g/m^3<br>", $h_abs_v); printf ("<font color='#660099'>比湿(vs全大気) : %4.2f g/kg</font><br>", $s); printf ("水蒸気分圧 : %4.2f hPa<br><hr>", $e_now); } if (isset($_GET['t1'])) { $xt1 = htmlspecialchars($_GET['t1']);} elseif (($t1 + $t2 == 0) || !(isset($t1))) { $xt1 = (string) $def_t1; } else { $xt1 = (string) $t1; } if ($param == "dp") {$ttt = $t_dp;} elseif ($param == "rh") {$ttt = $rh;} else {$ttt = $t2;} if (isset($_GET['t2'])) { $xt2 = htmlspecialchars($_GET['t2']);} elseif (($t1 + $t2 == 0) || !(isset($t2))) { $xt2 = (string) $def_t2; } else { $xt2 = (string) $ttt; } if (isset($_GET['p0'])) { $xp0 = htmlspecialchars($_GET['p0']);} elseif ($p0 == 0) { $xp0 = (string) $def_p0; } else { $xp0 = (string) $p0 ; } $xt1 = sprintf("%1.1f" , htmlspecialchars($xt1)); $xt2 = sprintf("%1.1f" , htmlspecialchars($xt2)); $xp0 = sprintf("%3.2f" , htmlspecialchars($xp0)); $al = 18410.0 * log10(1013.25 / (float) $xp0) * (1 + 0.0036610 * (float) $xt1); if (($al < -3000) || ($al >10000)) { $al = 0.0; } $xal = sprintf ("%1.1f" , $al); $poststr0 = "?t1=" . $xt1 . "&t2=" . $xt2 . "&p0=" . $xp0 . "&wind=" . $w . "&freeze=" . $f . "&param=" . $param; ?> <FORM action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 乾球(DRY)<INPUT size="7" type="text" name="t_dry" tabindex="1" istyle="4" mode="numeric" style="text-align : right;" value="<?php echo $xt1 ?>">℃<BR> <SELECT name="param"> <OPTION value="dry" <?php echo $s_param["dry"]; ?>>湿球(WET)</OPTION> <OPTION value="dp" <?php echo $s_param["dp"]; ?>>露点温度</OPTION> <OPTION value="rh" <?php echo $s_param["rh"]; ?>>相対湿度</OPTION> </SELECT> <INPUT size="7" type="text" name="t_wet" tabindex="2" istyle="4" mode="numeric" style="text-align : right;" value="<?php echo $xt2 ?>">℃<font color="#9999cc" size="-1">or</font>%<BR> <INPUT type="submit" accesskey="#" tabindex="3" name="btn_calc" value=" CALC "> <!-- <INPUT type="reset" accesskey="*" name="btn_clr" value=" C "> --><BR> <INPUT type="checkbox" name="chk_wind" tabindex="4" <?php echo $st_wind ?>>通風条件<BR> <INPUT type="checkbox" name="chk_freeze" tabindex="5" <?php echo $st_freeze ?>>凍結条件 <BR>気圧<INPUT size="10" type="text" name="p0" istyle="4" mode="numeric" tabindex="6" style="text-align : right;" value="<?php echo $xp0 ?>">hPa<BR> (┗ <A href="alti.php<?php echo $poststr0; ?>">標高換算</A><?php printf(" : %1.1f m" , $al); ?>) </FORM> <hr> <P><IMG src="BBY_icn4.gif" width="32" height="32" border="0"> <font size="-1"> <A href="http://d.hatena.ne.jp/owl/">熾火研究所</A>謹製 v2.0</font><br> <A href="http://www010.upp.so-net.ne.jp/catwalk/humid/">★Javascript版はこちら</A> </P> <P><A href="http://hum.uah.jp/"><IMG src="qr_hum_php_uah.gif" height="87" width="87" border="0"></A> </P> </BODY> </HTML>
alti.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META name="GENERATOR" content="IBM WebSphere Homepage Builder Version 6.0.2.1 for Windows"> <META name="GENERATOR" content="WZ EDITOR Version 4.00E"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>標高→気圧換算 PHP版</TITLE> </HEAD> <BODY bgcolor="#eeeecc"> <P><b>標高→気圧換算</b> <font color="#cc3399">PHP版</font><BR> <FONT color="#cc0000">※注意:飽くまで目安値です</FONT> <br><font size="-1">(乾燥標準大気・標準重力として換算)</font></P> <?php $def_t1 = 25.0; $def_t2 = 23.0; $def_p0 = 1013.25; $t1 = (float) $_GET['t1']; $t2 = (float) $_GET['t2']; $p0 = (float) $_GET['p0']; $param = $_GET['param']; if (($t1 == 0) && ($t2 == 0)) { $t1 = $def_t1; $t2 = $def_t2; } if ($p0 == 0) { $p0 = $def_p0; } $cw = $_GET['wind']; $cf = $_GET['freeze']; if ((stristr ($cw , "off") == false) && (stristr ($cw , "no") == false) && ($cw != "")) { $w = "on"; } else { $w = ""; } if ((stristr ($cf , "off") == false) && (stristr ($cf , "no") == false) && ($cf != "")) { $f = "on"; } else { $f = ""; } $xt1 = sprintf("%1.1f" , $t1); $xt2 = sprintf("%1.1f" , $t2); $xp0 = sprintf("%2.2f" , $p0); $al = 18410.0 * log10(1013.25 / $p0) * (1 + 0.0036610 * $t1); if (($al < -3000) || ($al >10000)) { $al = 0.0; } $xal = sprintf ("%1.1f" , $al); // printf ("■%s■%s■%s■%s■%s■",$xt1,$xt2,$p0,$w,$f); $poststr0 = "?t1=" . $xt1 . "&t2=" . $xt2 . "&p0=" . $xp0 . "&wind=" . $w . "&freeze=" . $f . "&param=" . $param; ?> <FORM action="alti2.php<?php echo $poststr0.'&al='.$xal; ?>" method="post"> 気温<INPUT size="8" type="text" name="t_dry" istyle="4" mode="numeric" tabindex="1" style="text-align : right;" value="<?php echo $xt1; ?>">℃<BR> 標高<INPUT size="8" type="text" name="al" istyle="4" mode="numeric" tabindex="2" style="text-align : right;" value="<?php echo $xal; ?>">m<BR> <INPUT type="submit" accesskey="#" tabindex="3" name="btn_calc" value=" CALC "> <INPUT type="reset" accesskey="*" name="btn_clr" value=" C "><BR> </FORM> <P><A href="./<?php echo $poststr0 ?>">【そのまま戻る】</A></P> </BODY> </HTML>
alti2.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META name="GENERATOR" content="IBM WebSphere Homepage Builder Version 6.0.2.1 for Windows"> <META name="GENERATOR" content="WZ EDITOR Version 4.00E"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>確認</TITLE> </HEAD> <BODY bgcolor="#eeee99"> <?php $t1 = $_POST['t_dry']; $t2 = $_GET['t2']; $p0 = $_GET['p0']; $w = $_GET['wind']; $f = $_GET['freeze']; $param = $_GET['param']; $al = $_POST['al']; $pp = 1013.25 / (pow(10 , $al / (18410.0 * (1 + 0.0036610 * $t1)))); $xpp = sprintf ("%1.2f" , $pp); $xt1 = sprintf ("%1.1f" , $t1); $xt2 = sprintf ("%1.1f" , $t2); $xp0 = sprintf ("%1.2f" , $p0); $xal = sprintf ("%1.1f" , $al); printf ("気温 : %3.1f ℃<br>" , $t1); printf ("標高 : %4.1f m<br>↓<br>" , $al); printf ("気圧(概算) : %3.2f hPa<br><br>" , $xpp); $poststr0 = "?t1=" . $xt1 . "&t2=" . $xt2 . "&p0=" . $xpp . "&wind=" . $w . "&freeze=" . $f . "&param=" . $param ; $poststr1 = "?t1=" . $xt1 . "&t2=" . $xt2 . "&p0=" . $xp0 . "&wind=" . $w . "&freeze=" . $f . "&param=" . $param ; ?> <a href="./<?php echo $poststr0 ?>">【この値で湿度計算】</a><br> <a href="./<?php echo $poststr1 ?>">【破棄して湿度計算】</a><br> <a href="alti.php<?php echo $poststr1 ?>">【標高換算へ戻る】</a><br> </BODY> </HTML>
以上3ファイル
おまけ
単体で動く Ver.1 はこちら(若干軽量)
index.php としてどっかに置いて使う。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META name="GENERATOR" content="IBM WebSphere Homepage Builder Version 6.0.2.1 for Windows"> <META name="GENERATOR" content="WZ EDITOR Version 4.00E"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>湿度計算 PHP版</TITLE> </HEAD> <BODY bgcolor="#cceeee"> <H2>湿度計算シート</H2> <P><font color="#cc3399">PHP版(携帯対応)</font><br></P> <?php $def_t1 = 25.0; $def_t2 = 23.0; $def_p0 = 1013.25; $cw = $_GET['wind']; $cf = $_GET['freeze']; if ((stristr ($cw , "off") == false) && (stristr ($cw , "no") == false) && ($cw != "") || ($_POST['chk_wind'] != "" )) { $st_wind = "checked"; } else { $st_wind = ""; } if ((stristr ($cf , "off") == false) && (stristr ($cf , "no") == false) && ($cf != "") || ($_POST['chk_freeze'] != "" )) { $st_freeze = "checked"; } else { $st_freeze = ""; } if ((isset($_POST['p0'])) || ((isset($_GET['t1'])) && (isset($_GET['t2'])))) { if (isset($_GET['t1'])) { $t1 = (float) $_GET['t1']; } else { $t1 = (float) $_POST['t_dry']; } if (isset($_GET['t2'])) { $t2 = (float) $_GET['t2']; } else { $t2 = (float) $_POST['t_wet']; } if (isset($_GET['p0'])) { $p0 = (float) $_GET['p0']; } elseif (isset($_POST['p0'])) { $p0 = (float) $_POST['p0']; } else { $p0 = $def_p0; } $w = $st_wind; $f = $st_freeze; printf ("乾球示度(DRY) : %3.1f ℃<br>" , $t1); printf ("湿球示度(WET) : %3.1f ℃<br>" , $t2); printf ("気圧 : %4.2f hPa<br>" , $p0); if($w) {echo ("<font color='#cc0033'><b> +通風</b></font> ");} if($f) {echo ("<font color='#990033'><b> +凍結</b></font>");} if($f or $w) {echo ("<br>");} if ($f) { $a = 9.5; $b = 265.5; if ($w) { $k = 0.44; // 蒸気圧乗数 $m = 755; // 通風乗数 } else { $k = 0.0007; $m = 1; } } else { $a = 7.5; $b = 237.3; if ($w) { $k = 0.5; $m = 755; } else { $k = 0.0008; $m = 1; } } $e_t1 = 6.11 * pow(10 , 7.5 * $t1 /(237.3 + $t1)); // 飽和水蒸気圧(t1℃,vs水) $e_t2 = 6.11 * pow(10 , $a * $t2 /($b + $t2)); // 飽和水蒸気圧(t2℃,vs水or氷) $e_now = $e_t2 - $k * $p0 * ($t1 - $t2) / $m; // 現在の水蒸気圧 $rh = $e_now / $e_t1 * 100.0; // 相対湿度 if ($e_now == 6.11) { $t_dp = 0; } elseif ($e_now <= 0) {$t_dp = -273.15;} else { $t_dp = $b / (($a / log10($e_now / 6.11)) - 1); } // 露点温度 $s = 622 * $e_now / ($p0 - 0.378 * $e_now); // 比湿 [g/kg(湿り空気)] $h_abs_v = 216.7 * $e_now / (273.15 + $t1); // 容積絶対湿度 [g/m^3] $h_abs_w = (18.015 * $e_now) / (29.064 * ($p0 - $e_now)); // 重量絶対湿度 [kg/kgDA] $di_rh = 0.81 * $t1 + 0.01 * $rh * (0.99 * $t1 - 14.3) + 46.3; // 不快指数 if ($di_rh <= 55) $c_rh = "寒い"; elseif ($di_rh <= 60) $c_rh = "肌寒い"; elseif ($di_rh <= 65) $c_rh = "何も感じない"; elseif ($di_rh <= 70) $c_rh = "快い"; elseif ($di_rh <= 75) $c_rh = "暑くない"; elseif ($di_rh <= 80) $c_rh = "やや暑い"; elseif ($di_rh <= 85) $c_rh = "暑くて汗が出る"; else $c_rh = "我慢できぬ暑さ"; print ("<br>"); printf ("<font color='#000099'><b>相対湿度 : %3.2f %</b></font><br>", $rh); printf ("<font color='#880033'>不快指数 : %3d (%s)</font><br>", $di_rh , $c_rh); printf ("<font color='#008833'>露点温度 : %3.1f ℃</font><br>", $t_dp); printf ("重量絶対湿度 : %1.5f kg/kgDA<br>", $h_abs_w); printf ("容積絶対湿度 : %4.2f g/m^3<br>", $h_abs_v); printf ("<font color='#660099'>比湿(vs全大気) : %4.2f g/kg</font><br>", $s); printf ("水蒸気分圧 : %4.2f hPa<br><hr>", $e_now); } if (isset($_GET['t1'])) { $xt1 = htmlspecialchars($_GET['t1']);} elseif (($t1 + $t2 == 0) || !(isset($t1))) { $xt1 = (string) $def_t1; } else { $xt1 = (string) $t1; } if (isset($_GET['t2'])) { $xt2 = htmlspecialchars($_GET['t2']);} elseif (($t1 + $t2 == 0) || !(isset($t2))) { $xt2 = (string) $def_t2; } else { $xt2 = (string) $t2; } if (isset($_GET['p0'])) { $xp0 = htmlspecialchars($_GET['p0']);} elseif ($p0 == 0) { $xp0 = (string) $def_p0; } else { $xp0 = (string) $p0 ; } $xt1 = sprintf("%1.1f" , htmlspecialchars($xt1)); $xt2 = sprintf("%1.1f" , htmlspecialchars($xt2)); $xp0 = sprintf("%3.2f" , htmlspecialchars($xp0)); $al = 18410.0 * log10(1013.25 / (float) $xp0) * (1 + 0.0036610 * (float) $xt1); if (($al < -3000) || ($al >10000)) { $al = 0.0; } $xal = sprintf ("%1.1f" , $al); $poststr0 = "?t1=" . $xt1 . "&t2=" . $xt2 . "&p0=" . $xp0 . "&wind=" . $w . "&freeze=" . $f; ?> <FORM action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 乾球(DRY)<INPUT size="8" type="text" name="t_dry" tabindex="1" istyle="4" mode="numeric" style="text-align : right;" value="<?php echo $xt1 ?>">℃<BR> 湿球(WET)<INPUT size="8" type="text" name="t_wet" tabindex="2" istyle="4" mode="numeric" style="text-align : right;" value="<?php echo $xt2 ?>">℃<BR> <INPUT type="submit" accesskey="#" tabindex="3" name="btn_calc" value=" CALC "> <!-- <INPUT type="reset" accesskey="*" name="btn_clr" value=" C "> --><BR> <INPUT type="checkbox" name="chk_wind" tabindex="4" <?php echo $st_wind ?>>通風条件<BR> <INPUT type="checkbox" name="chk_freeze" tabindex="5" <?php echo $st_freeze ?>>凍結条件 <BR>気圧<INPUT size="10" type="text" name="p0" istyle="4" mode="numeric" tabindex="6" style="text-align : right;" value="<?php echo $xp0 ?>">hPa<BR> (┗ <A href="alti.php<?php echo $poststr0; ?>">標高換算</A><?php printf(" : %1.1f m" , $al); ?>) </FORM> <hr> <P><IMG src="BBY_icn4.gif" width="32" height="32" border="0"> <font size="-1"> <A href="http://d.hatena.ne.jp/owl/">熾火研究所</A>謹製 v1.4</font><br> <A href="http://www010.upp.so-net.ne.jp/catwalk/humid/">★Javascript版はこちら</A> </P> <P><A href="http://hum.uah.jp/"><IMG src="qr_hum_php_uah.gif" height="87" width="87" border="0"></A> </P> </BODY> </HTML>