Rev 3037 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log
<?php/*** Basic OS Class** PHP version 5** @category PHP* @package PSI OS class* @author Michael Cramer <BigMichi1@users.sourceforge.net>* @copyright 2009 phpSysInfo* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version* @version SVN: $Id: class.OS.inc.php 699 2012-09-15 11:57:13Z namiltd $* @link http://phpsysinfo.sourceforge.net*//*** Basic OS functions for all OS classes** @category PHP* @package PSI OS class* @author Michael Cramer <BigMichi1@users.sourceforge.net>* @copyright 2009 phpSysInfo* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version* @version Release: 3.0* @link http://phpsysinfo.sourceforge.net*/abstract class OS implements PSI_Interface_OS{/*** object for error handling** @var PSI_Error*/protected $error;/*** block name** @var string*/protected $blockname = false;/*** @var System*/protected $sys;/*** build the global Error object*/public function __construct($blockname = false){$this->error = PSI_Error::singleton();$this->sys = new System();$this->blockname = $blockname;}/*** get os specific encoding** @see PSI_Interface_OS::getEncoding()** @return string*/public function getEncoding(){return PSI_SYSTEM_CODEPAGE;}/*** get os specific language** @see PSI_Interface_OS::getLanguage()** @return string*/public function getLanguage(){return PSI_SYSTEM_LANG;}/*** get block name** @see PSI_Interface_OS::getBlockName()** @return string*/public function getBlockName(){return $this->blockname;}/*** Number of Users** @return void*/protected function _users(){if (CommonFunctions::executeProgram('who', '', $strBuf, PSI_DEBUG)) {if (strlen($strBuf) > 0) {$lines = preg_split('/\n/', $strBuf);$this->sys->setUsers(count($lines));}} elseif (CommonFunctions::executeProgram('uptime', '', $buf, PSI_DEBUG) && preg_match("/,\s+(\d+)\s+user[s]?,/", $buf, $ar_buf)) {//} elseif (CommonFunctions::executeProgram('uptime', '', $buf) && preg_match("/,\s+(\d+)\s+user[s]?,\s+load average[s]?:\s+(.*),\s+(.*),\s+(.*)$/", $buf, $ar_buf)) {$this->sys->setUsers($ar_buf[1]);} else {$processlist = glob('/proc/*/cmdline', GLOB_NOSORT);if (is_array($processlist) && (($total = count($processlist)) > 0)) {$count = 0;$buf = "";for ($i = 0; $i < $total; $i++) {if (CommonFunctions::rfts($processlist[$i], $buf, 0, 4096, false)) {$name = str_replace(chr(0), ' ', trim($buf));if (preg_match("/^-/", $name)) {$count++;}}}if ($count > 0) {$this->sys->setUsers($count);}}}}/*** IP of the Host** @return void*/protected function _ip(){if (PSI_USE_VHOST === true) {if ((CommonFunctions::readenv('SERVER_ADDR', $result) || CommonFunctions::readenv('LOCAL_ADDR', $result)) //is server address defined&& !strstr($result, '.') && strstr($result, ':')) { //is IPv6, quick version of preg_match('/\(([[0-9A-Fa-f\:]+)\)/', $result)$dnsrec = dns_get_record($this->sys->getHostname(), DNS_AAAA);if (isset($dnsrec[0]['ipv6'])) { //is DNS IPv6 record$this->sys->setIp($dnsrec[0]['ipv6']); //from DNS (avoid IPv6 NAT translation)} else {$this->sys->setIp(preg_replace('/^::ffff:/i', '', $result)); //from SERVER_ADDR or LOCAL_ADDR}} else {$this->sys->setIp(gethostbyname($this->sys->getHostname())); //IPv4 only}} else {if (CommonFunctions::readenv('SERVER_ADDR', $result) || CommonFunctions::readenv('LOCAL_ADDR', $result)) {$this->sys->setIp(preg_replace('/^::ffff:/i', '', $result));} else {$this->sys->setIp(gethostbyname($this->sys->getHostname()));}}}/*** get the filled or unfilled (with default values) System object** @see PSI_Interface_OS::getSys()** @return System*/final public function getSys(){$this->build();if (!$this->blockname || $this->blockname==='vitals') {$this->_ip();}return $this->sys;}}