[Phpsysinfo-subversion] SF.net SVN: phpsysinfo:[122] includes
Brought to you by:
namiltd
From: <Big...@us...> - 2009-01-26 13:15:47
|
Revision: 122 http://phpsysinfo.svn.sourceforge.net/phpsysinfo/?rev=122&view=rev Author: BigMichi1 Date: 2009-01-26 13:15:43 +0000 (Mon, 26 Jan 2009) Log Message: ----------- documentation include mbstring check convert to utf-8 with mbstring functions Modified Paths: -------------- includes/common_functions.php includes/xml.class.php Modified: includes/common_functions.php =================================================================== --- includes/common_functions.php 2009-01-22 12:54:30 UTC (rev 121) +++ includes/common_functions.php 2009-01-26 13:15:43 UTC (rev 122) @@ -221,15 +221,12 @@ * See bug #1787137 */ function checkForExtensions() { - $extensions = array ('simplexml', 'pcre', 'xml', 'xsl'); + $extensions = array ('simplexml', 'pcre', 'xml', 'xsl', 'mbstring'); $text = ""; $error = false; $text .= "<?xml version='1.0'?>\n"; $text .= "<phpsysinfo>\n"; $text .= " <Error>\n"; - if(PHP_OS == 'WINNT') { - $extensions[] = 'iconv'; - } foreach ($extensions as $extension) { if (!extension_loaded($extension)) { $text .= " <Function>checkForExtensions</Function>\n"; Modified: includes/xml.class.php =================================================================== --- includes/xml.class.php 2009-01-22 12:54:30 UTC (rev 121) +++ includes/xml.class.php 2009-01-26 13:15:43 UTC (rev 122) @@ -1,106 +1,148 @@ <?php -/*************************************************************************** - * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * - * http://phpsysinfo.sourceforge.net/ * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ -// -// $Id$ -// +/** + * XML Generation class + * + * @license http://opensource.org/licenses/gpl-2.0.php + * @package psi + */ + +/** + * class for generation of the xml + * + * @author Michael Cramer (Big...@us...) + * @version $Id$ + * @copyright Copyright (C) 2008 by phpSysInfo + * @package psi + */ class xml { + /** + * Sysinfo object where the information retrieval methods are included + * + * @access private + * @var Sysinfo + */ private $sysinfo; - private $mbinfo; - private $hddtemp; - private $upsinfo; + + /** + * xml object with the xml content + * + * @access private + * @var SimpleXMLElement + */ private $xml; + + /** + * object for error handling + * + * @access private + * @var Error + */ private $errors; + + /** + * array with all enabled plugins (name) + * + * @access private + * @var array + */ private $plugins; + + /** + * generate a xml for a plugin or for the main app + * + * @access private + * @var boolean + */ private $plugin_request = false; + + /** + * generate the entire xml with all plugins or only a part of the xml (main or plugin) + * + * @access private + * @var boolean + */ private $complete_request = false; + + /** + * doing some initial tasks + * - generate the xml structure with the right header elements + * - get the error object for error output + * - get a instance of the sysinfo object + * + * @param string name of the plugin + * @param boolean generate xml with all plugins or not + */ public function __construct($pluginname = "", $complete = false) { ($pluginname == "") ? $this->plugin_request = false : $this->plugin_request = true; ($complete) ? $this->complete_request = true : $this->complete_request = false; - $this->errors = Error :: singleton(); - if (!$this->plugin_request || $this->complete_request) { + $this->errors = Error::singleton(); + if(!$this->plugin_request || $this->complete_request) { $this->sysinfo = new sysinfo(); - if (PSI_MBINFO) { - $this->mbinfo = new mbinfo; - } - if (PSI_HDDTEMP) { - $this->hddtemp = new hddtemp; - } - if (PSI_UPSINFO) { - $this->upsinfo = new upsinfo; - } } $this->xml = simplexml_load_string("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpsysinfo xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"phpsysinfo.xsd\"></phpsysinfo>"); $generation = $this->xml->addChild('Generation'); $generation->addAttribute('version', PSI_VERSION); $generation->addAttribute('timestamp', time()); $options = $this->xml->addChild('Options'); - $options->addChild('tempFormat', PSI_TEMP_FORMAT); - $options->addChild('byteFormat', PSI_BYTE_FORMAT); - $options->addChild('refresh', PSI_REFRESH ? PSI_REFRESH : 'false'); - $options->addChild('showPickListTemplate', PSI_SHOW_PICKLIST_TEMPLATE ? PSI_SHOW_PICKLIST_TEMPLATE : 'false'); - $options->addChild('showPickListLang', PSI_SHOW_PICKLIST_LANG ? PSI_SHOW_PICKLIST_LANG : 'false'); + $options->addChild('tempFormat', defined('PSI_TEMP_FORMAT') ? PSI_TEMP_FORMAT : 'c'); + $options->addChild('byteFormat', defined('PSI_BYTE_FORMAT') ? PSI_BYTE_FORMAT : 'auto_binary'); + $options->addChild('refresh', defined('PSI_REFRESH') ? PSI_REFRESH : 'false'); + $options->addChild('showPickListTemplate', defined('PSI_SHOW_PICKLIST_TEMPLATE') ? PSI_SHOW_PICKLIST_TEMPLATE : 'false'); + $options->addChild('showPickListLang', defined('PSI_SHOW_PICKLIST_LANG') ? PSI_SHOW_PICKLIST_LANG : 'false'); $plug = $options->addChild('Used_Plugins'); - if ((!$this->plugin_request || $this->complete_request) && PSI_PLUGINS !== false) { - $this->plugins = explode(",", PSI_PLUGINS); - foreach ($this->plugins as $plugin) { + if((!$this->plugin_request || $this->complete_request) && PSI_PLUGINS !== false) { + $this->plugins = preg_split("/[\s]?,[\s]?/", PSI_PLUGINS, -1, PREG_SPLIT_NO_EMPTY); + foreach($this->plugins as $plugin) { $plug->addChild('Plugin', $plugin); } } else { - $this->plugins = array ( - $pluginname - ); + $this->plugins = array($pluginname); } } + + /** + * generate common information + * + * @access private + */ private function buildVitals() { $strLoadavg = ''; $arrBuf = $this->sysinfo->loadavg(PSI_LOAD_BAR); - foreach ($arrBuf['avg'] as $strValue) { + foreach($arrBuf['avg'] as $strValue) { $strLoadavg .= $strValue . ' '; } $vitals = $this->xml->addChild('Vitals'); - if (PSI_USE_VHOST === true) { - $vitals->addChild('Hostname', utf8_encode(trim(htmlspecialchars($this->sysinfo->vhostname())))); + if(PSI_USE_VHOST === true) { + $vitals->addChild('Hostname', $this->toUTF8(htmlspecialchars($this->sysinfo->vhostname()))); $vitals->addChild('IPAddr', $this->sysinfo->vip_addr()); } else { - $vitals->addChild('Hostname', utf8_encode(trim(htmlspecialchars($this->sysinfo->chostname())))); + $vitals->addChild('Hostname', $this->toUTF8(htmlspecialchars($this->sysinfo->chostname()))); $vitals->addChild('IPAddr', $this->sysinfo->ip_addr()); } - $vitals->addChild('Kernel', utf8_encode(trim(htmlspecialchars($this->sysinfo->kernel())))); - $vitals->addChild('Distro', utf8_encode(trim(htmlspecialchars($this->sysinfo->distro())))); - $vitals->addChild('Distroicon', utf8_encode(trim(htmlspecialchars($this->sysinfo->distroicon())))); + $vitals->addChild('Kernel', $this->toUTF8(htmlspecialchars($this->sysinfo->kernel()))); + $vitals->addChild('Distro', $this->toUTF8(htmlspecialchars($this->sysinfo->distro()))); + $vitals->addChild('Distroicon', $this->toUTF8(htmlspecialchars($this->sysinfo->distroicon()))); $vitals->addChild('Uptime', $this->sysinfo->uptime()); $vitals->addChild('Users', $this->sysinfo->users()); $vitals->addChild('LoadAvg', $strLoadavg); - if (isset ($arrBuf['cpupercent'])) { + if(isset($arrBuf['cpupercent'])) { $vitals->addChild('CPULoad', round($arrBuf['cpupercent'], 2)); } } + + /** + * generate the network information + * + * @access private + */ private function buildNetwork() { $arrNet = $this->sysinfo->network(); $network = $this->xml->addChild('Network'); - $hideDevices = explode(',', PSI_HIDE_NETWORK_INTERFACE); - foreach ($arrNet as $strDev => $arrStats) { - if (!in_array($strDev, $hideDevices)) { + $hideDevices = preg_split("/[\s]?,[\s]?/", PSI_HIDE_NETWORK_INTERFACE, -1, PREG_SPLIT_NO_EMPTY); + foreach($arrNet as $strDev => $arrStats) { + if(!in_array($strDev, $hideDevices)) { $device = $network->addChild('NetDevice'); - $device->addChild('Name', utf8_encode(trim(htmlspecialchars($strDev)))); + $device->addChild('Name', $this->toUTF8(htmlspecialchars($strDev))); $device->addChild('RxBytes', $arrStats['rx_bytes']); $device->addChild('TxBytes', $arrStats['tx_bytes']); $device->addChild('Err', $arrStats['errs']); @@ -108,6 +150,12 @@ } } } + + /** + * generate the hardware information + * + * @access private + */ private function buildHardware() { $hardware = $this->xml->addChild('Hardware'); $cpu = $hardware->addChild('CPU'); @@ -117,63 +165,69 @@ $usb = $hardware->addChild('USB'); $arrSys = $this->sysinfo->cpu_info(); $arrBuf = finddups($this->sysinfo->pci()); - if (count($arrBuf)) { + if(count($arrBuf)) { for ($i = 0, $max = sizeof($arrBuf); $i < $max; $i++) { if ($arrBuf[$i]) { $tmp = $pci->addChild('Device'); - $tmp->addChild('Name', utf8_encode(trim(htmlspecialchars($arrBuf[$i])))); + $tmp->addChild('Name', $this->toUTF8($arrBuf[$i])); } } } $arrBuf = $this->sysinfo->ide(); - if (count($arrBuf)) { - foreach ($arrBuf as $strKey => $arrValue) { + if(count($arrBuf)) { + foreach($arrBuf as $strKey => $arrValue) { $tmp = $ide->addChild('Device'); - $tmp->addChild('Name', $strKey . ': ' . utf8_encode(trim(htmlspecialchars($arrValue['model'])))); - if (isset ($arrValue['capacity'])) { + $tmp->addChild('Name', $strKey . ': ' . $this->toUTF8($arrValue['model'])); + if(isset($arrValue['capacity'])) { $tmp->addChild('Capacity', $arrValue['capacity']); } } } $arrBuf = $this->sysinfo->scsi(); - if (count($arrBuf)) { - foreach ($arrBuf as $strKey => $arrValue) { + if(count($arrBuf)) { + foreach($arrBuf as $strKey => $arrValue) { $tmp = $scsi->addChild('Device'); - if ($strKey >= '0' && $strKey <= '9') { - $tmp->addChild('Name', utf8_encode(trim(htmlspecialchars($arrValue['model'])))); + if($strKey >= '0' && $strKey <= '9') { + $tmp->addChild('Name', $this->toUTF8($arrValue['model'])); } else { - $tmp->addChild('Name', $strKey . ': ' . utf8_encode(trim(htmlspecialchars($arrValue['model'])))); + $tmp->addChild('Name', $strKey . ': ' . $this->toUTF8($arrValue['model'])); } - if (isset ($arrrValue['capacity'])) { + if(isset ($arrrValue['capacity'])) { $tmp->addChild('Capacity', $arrValue['capacity']); } } } $arrBuf = finddups($this->sysinfo->usb()); - if (count($arrBuf)) { - for ($i = 0, $max = sizeof($arrBuf); $i < $max; $i++) { - if (trim($arrBuf[$i]) != "") { + if(count($arrBuf)) { + for($i = 0, $max = sizeof($arrBuf); $i < $max; $i++) { + if(trim($arrBuf[$i]) != "") { $tmp = $usb->addChild('Device'); - $tmp->addChild('Name', utf8_encode(trim(htmlspecialchars($arrBuf[$i])))); + $tmp->addChild('Name', $this->toUTF8($arrBuf[$i])); } } } $cpu->addChild('Number', $arrSys['cpus']); - $cpu->addChild('Model', utf8_encode(trim(htmlspecialchars($arrSys['model'])))); - if (isset ($arrSys['temp'])) { + $cpu->addChild('Model', $this->toUTF8($arrSys['model'])); + if(isset ($arrSys['temp'])) { $cpu->addChild('Cputemp', $arrSys['temp']); } $cpu->addChild('Cpuspeed', $arrSys['cpuspeed']); - if (isset ($arrSys['busspeed'])) { + if(isset ($arrSys['busspeed'])) { $cpu->addChild('Busspeed', $arrSys['busspeed']); } - if (isset ($arrSys['cache'])) { + if(isset ($arrSys['cache'])) { $cpu->addChild('Cache', $arrSys['cache']); } - if (isset ($arrSys['bogomips'])) { + if(isset ($arrSys['bogomips'])) { $cpu->addChild('Bogomips', $arrSys['bogomips']); } } + + /** + * generate the memory information + * + * @access private + */ private function buildMemory() { $arrMem = $this->sysinfo->memory(); $i = 0; @@ -202,7 +256,7 @@ $swapMount->addChild('MountPointID', $i++); $swapMount->addChild('Type', 'Swap'); $dev = $swapMount->addChild('Device'); - $dev->addChild('Name', utf8_encode(trim(htmlspecialchars($arrDevice['dev'])))); + $dev->addChild('Name', $this->toUTF8($arrDevice['dev'])); $swapMount->addChild('Percent', $arrDevice['percent']); $swapMount->addChild('Free', $arrDevice['free']); $swapMount->addChild('Used', $arrDevice['used']); @@ -210,103 +264,130 @@ } } } + + /** + * generate the filesysteminformation + * + * @access private + */ private function buildFilesystems() { $hideMounts = array (); $hideFstypes = array (); $hideDisks = array (); - if (PSI_HIDE_MOUNTS != "") { + if(PSI_HIDE_MOUNTS != "") { $hideMounts = explode(',', PSI_HIDE_MOUNTS); } - if (PSI_HIDE_FS_TYPES != "") { + if(PSI_HIDE_FS_TYPES != "") { $hideFstypes = explode(',', PSI_HIDE_FS_TYPES); } - if (PSI_HIDE_DISKS != "") { + if(PSI_HIDE_DISKS != "") { $hideDisks = explode(',', PSI_HIDE_DISKS); } $arrFs = $this->sysinfo->filesystems(); $fs = $this->xml->addChild('FileSystem'); - for ($i = 0, $max = sizeof($arrFs); $i < $max; $i++) { - if (!in_array($arrFs[$i]['mount'], $hideMounts, true) && !in_array($arrFs[$i]['fstype'], $hideFstypes, true) && !in_array($arrFs[$i]['disk'], $hideDisks, true)) { + for($i = 0, $max = sizeof($arrFs); $i < $max; $i++) { + if(!in_array($arrFs[$i]['mount'], $hideMounts, true) && !in_array($arrFs[$i]['fstype'], $hideFstypes, true) && !in_array($arrFs[$i]['disk'], $hideDisks, true)) { $mount = $fs->addChild('Mount'); $mount->addchild('MountPointID', $i); - if (PSI_SHOW_MOUNT_POINT === true) { - $mount->addchild('MountPoint', utf8_encode(trim(htmlspecialchars($arrFs[$i]['mount'])))); + if(PSI_SHOW_MOUNT_POINT === true) { + $mount->addchild('MountPoint', $this->toUTF8($arrFs[$i]['mount'])); } $mount->addchild('Type', $arrFs[$i]['fstype']); $dev = $mount->addchild('Device'); - $dev->addChild('Name', utf8_encode(trim(htmlspecialchars($arrFs[$i]['disk'])))); + $dev->addChild('Name', $this->toUTF8($arrFs[$i]['disk'])); $mount->addchild('Percent', $arrFs[$i]['percent']); $mount->addchild('Free', $arrFs[$i]['free']); $mount->addchild('Used', $arrFs[$i]['used']); $mount->addchild('Size', $arrFs[$i]['size']); - if (isset ($arrFs[$i]['options'])) { + if(isset ($arrFs[$i]['options'])) { $mount->addchild('MountOptions', $arrFs[$i]['options']); } - if (isset ($arrFs[$i]['inodes'])) { + if(isset ($arrFs[$i]['inodes'])) { $mount->addchild('Inodes', $arrFs[$i]['inodes']); } } } } + + /** + * generate the motherboard information + * + * @access private + */ private function buildMbinfo() { + $mbinfo_data = new mbinfo(); $mbinfo = $this->xml->addChild('MBinfo'); - $arrBuff = $this->mbinfo->temperature(); + $arrBuff = $mbinfo_data->temperature(); if (sizeof($arrBuff) > 0) { $temp = $mbinfo->addChild('Temperature'); foreach ($arrBuff as $arrValue) { $item = $temp->addChild('Item'); - $item->addChild('Label', utf8_encode(trim(htmlspecialchars($arrValue['label'])))); + $item->addChild('Label', $arrValue['label']); $item->addChild('Value', $arrValue['value']); $item->addChild('Limit', $arrValue['limit']); } } - $arrBuff = $this->mbinfo->fans(); + $arrBuff = $mbinfo_data->fans(); if (sizeof($arrBuff) > 0) { $fan = $mbinfo->addChild('Fans'); foreach ($arrBuff as $arrValue) { $item = $fan->addChild('Item'); - $item->addChild('Label', utf8_encode(trim(htmlspecialchars($arrValue['label'])))); + $item->addChild('Label', $this->toUTF8($arrValue['label'])); $item->addChild('Value', $arrValue['value']); $item->addChild('Min', $arrValue['min']); } } - $arrBuff = $this->mbinfo->voltage(); + $arrBuff = $mbinfo_data->voltage(); if (sizeof($arrBuff) > 0) { $volt = $mbinfo->addChild('Voltage'); foreach ($arrBuff as $arrValue) { $item = $volt->addChild('Item'); - $item->addChild('Label', utf8_encode(trim(htmlspecialchars($arrValue['label'])))); + $item->addChild('Label', $this->toUTF8($arrValue['label'])); $item->addChild('Value', $arrValue['value']); $item->addChild('Min', $arrValue['min']); $item->addChild('Max', $arrValue['max']); } } } + + /** + * generate the hddtemp information + * + * @access private + */ private function buildHddtemp() { - $arrBuf = $this->hddtemp->temperature(); + $hddtemp_data = new hddtemp(); + $arrBuf = $hddtemp_data->temperature(); $hddtemp = $this->xml->addChild('HDDTemp'); - for ($i = 0, $max = sizeof($arrBuf); $i < $max; $i++) { + for($i = 0, $max = sizeof($arrBuf); $i < $max; $i++) { $item = $hddtemp->addChild('Item'); - $item->addChild('Label', utf8_encode(trim(htmlspecialchars($arrBuf[$i]['label'])))); + $item->addChild('Label', $this->toUTF8($arrBuf[$i]['label'])); $item->addChild('Value', $arrBuf[$i]['value']); - $item->addChild('Model', utf8_encode(trim(htmlspecialchars($arrBuf[$i]['model'])))); + $item->addChild('Model', $this->toUTF8($arrBuf[$i]['model'])); } } + + /** + * generate the ups information + * + * @access private + */ private function buildUpsinfo() { - $arrBuf = $this->upsinfo->info(); - if (isset ($arrBuf) && !empty ($arrBuf)) { + $upsinfo_data = new upsinfo(); + $arrBuf = $upsinfo_data->info(); + if(isset($arrBuf) && !empty($arrBuf)) { $upsinfo = $this->xml->addChild('UPSinfo'); - for ($i = 0, $max = sizeof($arrBuf); $i < $max; $i++) { + for($i = 0, $max = sizeof($arrBuf); $i < $max; $i++) { $item = $upsinfo->addChild('Ups'); - $item->addChild('Name', utf8_encode(trim(htmlspecialchars($arrBuf[$i]['name'])))); - $item->addChild('Model', utf8_encode(trim(htmlspecialchars($arrBuf[$i]['model'])))); - $item->addChild('Mode', utf8_encode(trim(htmlspecialchars($arrBuf[$i]['mode'])))); - $item->addChild('StartTime', utf8_encode(trim(htmlspecialchars($arrBuf[$i]['start_time'])))); - $item->addChild('Status', utf8_encode(trim(htmlspecialchars($arrBuf[$i]['status'])))); - $item->addChild('UPSTemperature', utf8_encode(trim(htmlspecialchars($arrBuf[$i]['temperature'])))); + $item->addChild('Name', $this->toUTF8($arrBuf[$i]['name'])); + $item->addChild('Model', $this->toUTF8($arrBuf[$i]['model'])); + $item->addChild('Mode', $arrBuf[$i]['mode']); + $item->addChild('StartTime', $arrBuf[$i]['start_time']); + $item->addChild('Status', $this->toUTF8($arrBuf[$i]['status'])); + $item->addChild('UPSTemperature', $this->toUTF8($arrBuf[$i]['temperature'])); $item->addChild('OutagesCount', $arrBuf[$i]['outages_count']); - $item->addChild('LastOutage', utf8_encode(trim(htmlspecialchars($arrBuf[$i]['last_outage'])))); - $item->addChild('LastOutageFinish', utf8_encode(trim(htmlspecialchars($arrBuf[$i]['last_outage_finish'])))); + $item->addChild('LastOutage', $this->toUTF8($arrBuf[$i]['last_outage'])); + $item->addChild('LastOutageFinish', $this->toUTF8($arrBuf[$i]['last_outage_finish'])); $item->addChild('LineVoltage', $arrBuf[$i]['line_voltage']); $item->addChild('LoadPercent', $arrBuf[$i]['load_percent']); $item->addChild('BatteryVoltage', $arrBuf[$i]['battery_voltage']); @@ -315,6 +396,12 @@ } } } + + /** + * generate the xml document + * + * @access public + */ public function buildXml() { if (!$this->plugin_request || $this->complete_request) { $this->buildVitals(); @@ -335,14 +422,33 @@ $this->buildPlugins(); $this->errors->ErrorsAddToXML($this->xml); } + + /** + * print the xml content as xml document with the correct headers for webservers + * + * @access public + */ public function printXml() { header("Cache-Control: no-cache, must-revalidate\n"); header("Content-Type: text/xml\n\n"); echo $this->xml->asXML(); } + + /** + * get the xml content as string + * + * @access public + * @return string + */ public function getXml() { return $this->xml->asXML(); } + + /** + * include xml-trees of the plugins to the main xml + * + * @access private + */ private function buildPlugins() { $pluginroot = $this->xml->addChild("Plugins"); if ($this->plugin_request || $this->complete_request) { @@ -355,11 +461,30 @@ } } } + + /** + * append a xml-tree to another xml-tree + * + * @access private + * @var SimpleXMLElement parent to which should be appended + * @var SimpleXMLElement child that should be appended + */ private function combinexml(SimpleXMLElement $parent, SimpleXMLElement $new_child) { $node1 = dom_import_simplexml($parent); $dom_sxe = dom_import_simplexml($new_child); $node2 = $node1->ownerDocument->importNode($dom_sxe, true); $node1->appendChild($node2); } + + /** + * convert a string into an UTF-8 string + * + * @access private + * @var string string to convert + * @return string UTF-8 string + */ + private function toUTF8($str) { + return htmlspecialchars(mb_detect_encoding($str) == 'UTF-8' ? trim($str) : trim(mb_convert_encoding($str, 'UTF-8'))); + } } ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |