/* 何も引数をつけないで呼ぶと稼働時間を出力します。稼働
* 時間は/proc/uptimeから引っ張ってます。
*
* ?type=jsをつけて呼ぶとjavascriptを出力します。このス
* クリプトはidがday,hour,mini,secのところにそれぞれ日、
* 時間、分、秒を表示します。1秒毎に表示が更新されます。
*/
/************************使い方***************************
*
* uptimeを表示したいページのheadのなかに
*
* を挿入。もちろんuptime.phpの部分はこのファイルのこと。
* さらに表示したい部分に
* --日と--時間--分--秒間
* と入れる。ここをお好みで。
* これで完了。
*/
/***********************注意******************************
*
* このファイルと表示するページのドメインが違うと表示でき
* ないかもしれません。多分ブラウザがエラーを出します。これ
* は多分仕様です(ーー;)
* ひとつのページに2箇所以上表示できません。これは表示部
* 分をgetElementByIdで取得してるためです。
*/
/*
* 作成:まさる
* masaru@tamurake.myhome.cx
* http://tamurake.myhome.cx/uptime/index.html
*
*/
/*
* 20060802 経過時間を取得するときに$_Request["type"]が定義
* されていないというエラーを直した。
* 20060731 サーバーから経過時間を取得する方法をPOSTからGET
* に変更。IEのためにキャッシュを使用しないように明
* 示的に指定。
*/
if(isset($_REQUEST["type"])&& $_REQUEST["type"]== "js"){
disp_js();
}else{
/* uptimeを出力 */
define ("UPTIMEFILE","/proc/uptime");
$time = file_get_contents (UPTIMEFILE);
$time = sscanf($time,"%d");
echo $time[0];
}
function disp_js(){
/* スクリプトを出力 */
$url = $_SERVER["PHP_SELF"];
?>
setInterval ( "uptime()",1000 ) ;
var ut_second = -10;
function createXmlHttp() {
//ref:http://www.hawk.34sp.com/stdpls/xml/xmlhttprequest.html
return this.XMLHttpRequest ?
new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
}
function flash(n){
var url=" echo $url ;?>";
var xmlhttp = createXmlHttp();
xmlhttp.onreadystatechange =function(){
if (xmlhttp.readyState == 4) {
disptime(xmlhttp.responseText);
//h.innerHTML=xmlhttp.responseText;
}
};
xmlhttp.open("GET",url , true);
xmlhttp.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("If-Modified-Since","null");
//ref:http://www.semblog.org/msano/archives/000386.html
xmlhttp.send("");
}
function disptime(n){
var d = document.getElementById("day");
var h = document.getElementById("hour");
var m = document.getElementById("mini");
var s = document.getElementById("sec");
var sec = n%60;
s.innerHTML=sec;
ut_second = sec;
n = (n-sec)/60;
var min = n%60;
m.innerHTML=min;
n = (n-min)/60;
var hou = n%24;
h.innerHTML=hou;
n = (n-hou)/24;
var day = n;
d.innerHTML=day;
}
function uptime(){
ut_second +=1;
if(ut_second == -9 || ut_second == 60){ //更新頻度をあげたい場合はここを変更
flash();
//alert("sync");
}else if(ut_second < 0 || ut_second >=60){ //安全策(?)同期に1秒以上かかったりした場合のため
flash();
}else{
var s = document.getElementById("sec");
s.innerHTML = ut_second;
}
}
}
?>