文書更新:2017年09月12日(火) 午後9時52分43秒

Home > 備忘録 > 言語関連 > php に関すること > 外部コマンドの実行( 22 )

shell_exec()と等価なバッククォート演算子(``)を利用します。

プライベートアドレスを取得

function GetPrivateIp() {
	preg_match_all("/inet(.*?)cast/",`ifconfig`,$data,PREG_SET_ORDER);	//shell_exec()と等価なバッククォート演算子
	preg_match_all("/\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/",$data[0][0],$ip,PREG_SET_ORDER);
	return $ip[0][0];
}

サーバーの連続稼働時間を取得

  1. /proc/uptime ファイルを利用する
  2.  この方法では秒まで取得できます。
    function GetElapsedTime(){
    	$uptime=`cat /proc/uptime|cut -d' ' -f1`;	//スペースで分割し、第1フィールドを取得する
    	$days=floor($uptime/86400);
    	$hour=floor($uptime/3600)%24;
    	$min=floor($uptime/60)%60;
    	$sec=$uptime%60;
    	if($days==0&&$hour==0&&$min==0)	return "{$sec}秒";
    	if($days==0&&$hour==0)	return "{$min}分{$sec}秒";
    	if($days==0)	return "{$hour}時間{$min}分{$sec}秒";
    	return "{$days}日 {$hour}時間{$min}分{$sec}秒";
    }
  3. uptime コマンドを利用する
  4. function GetElapsedTime(){
    	$uptime=`uptime`;	//shell_exec()と等価なバッククォート演算子
    	if(preg_match('/up\s(\d+)\sdays?,\s+(\d{1,2}):(\d{2})/',$uptime,$str)){	//1日以上かつ1時間以上
    		$days=intval($str[1]);
    		$hour=intval($str[2]);
    		$min=intval($str[3]);
    	}elseif(preg_match('/up\s(\d+)\sdays?,\s(\d+)\smin/',$uptime,$str)){	//1日以上かつ1時間未満
    		$days=intval($str[1]);
    		$hour=0;
    		$min=intval($str[2]);
    	}elseif(preg_match('/up\s+(\d{1,2}):(\d{2})/',$uptime,$str)){	//1日未満かつ1時間以上
    		$days=0;
    		$hour=intval($str[1]);
    		$min=intval($str[2]);
    	}elseif(preg_match('/up\s(\d+)\smin/',$uptime,$str)){	//1日未満かつ1時間以上
    		$days=0;
    		$hour=0;
    		$min=intval($str[1]);
    	}else{
    		return false;
    	}
    	if($days==0&&$hour==0)	return "{$min}分";
    	if($days==0)	return "{$hour}時間{$min}分";
    	return "{$days}日 {$hour}時間{$min}分";
    }