/SystemInformation/src/info.php
PHP | 402 lines | 198 code | 21 blank | 183 comment | 29 complexity | 7ff0ab6633a86b231e47d91592ed1f58 MD5 | raw file
- <?php
- /**
- * File containing the ezcSystemInfo class.
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * @package SystemInformation
- * @version //autogen//
- * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
- */
- /**
- * Provides access to common system variables.
- *
- * Variables not available from PHP directly are fetched using readers
- * specific for each supported system. Corresponding reader is automatically
- * detected, attached and forced to scan system info during initialization.
- * An exception is thrown if the reader can't scan the system info.
- *
- * Available readers are:
- * - {@link ezcSystemInfoLinuxReader} reader
- * - {@link ezcSystemInfoMacReader} reader
- * - {@link ezcSystemInfoFreeBsdReader} reader
- * - {@link ezcSystemInfoWindowsReader} reader
- *
- * Readers for other systems can be added by
- * implementing the {@link ezcSystemInfoReader} interface.
- *
- * The ezcSystemInfo class has the following properties:
- *
- * Reader independent, these properties are available even if system reader was not initialized.
- * @property string $osType
- * OS type (e.g 'unix') or null.
- * @property string $osName
- * OS name (e.g 'Linux') or null.
- * @property string $fileSystemType
- * Filesystem type (e.g 'linux') or null.
- * @property string $lineSeparator
- * Symbols which is used for line separators on the current OS.
- * @property string $backupFileName
- * Backup filename for this platform, '.bak' for win32 and '~' for unix and mac.
- * @property array $phpVersion
- * Array with PHP version (e.g. array(5,1,1) ).
- * @property ezcSystemInfoAccelerator $phpAccelerator
- * Structure with PHP accelerator info or null.
- * {@link ezcSystemInfoAccelerator}.
- * @property bool $isShellExecution
- * The flag which indicates if the script was executed over the web or the shell/command line.
- *
- * Reader dependent, these properties are not available if reader was not initialized and didn't scan OS:
- * @property integer $cpuCount
- * Number of CPUs in system or null.
- * @property string $cpuType
- * CPU type string (e.g 'AMD Sempron(tm) Processor 3000+') or null.
- * @property float $cpuSpeed
- * CPU speed as float (e.g 1808.743) in Mhz or null.
- * @property integer $memorySize
- * Memory Size in bytes int (e.g. 528424960) or null.
- *
- * Example:
- * <code>
- * $info = ezcSystemInfo::getInstance();
- * echo 'Processors: ', $info->cpuCount, "\n";
- * echo 'CPU Type: ', $info->cpuType, "\n";
- * echo 'CPU Speed: ', $info->cpuSpeed, "\n";
- * </code>
- *
- * @package SystemInformation
- * @version //autogentag//
- * @mainclass
- */
- class ezcSystemInfo
- {
- /**
- * Instance of the singleton ezcSystemInfo object.
- *
- * Use the getInstance() method to retrieve the instance.
- *
- * @var ezcSystemInfo
- */
- private static $instance = null;
- /**
- * Contains object that provide info about the underlying OS.
- *
- * @var ezcSystemInfoReader
- */
- private $systemInfoReader = null;
- /**
- * Contains string with the type of the underlying OS
- * or empty string if OS can't be detected.
- *
- * @var string
- */
- private $osType = null;
- /**
- * Contains string with the name of the underlying OS
- * or empty string if OS can't be detected.
- *
- * @var string
- */
- private $osName = null;
- /**
- * Contains string with the filesystem type of the underlying OS
- * or empty string if OS can't be detected.
- *
- * @var string
- */
- private $fileSystemType = null;
- /**
- * Contains string with the line separator of the underlying OS
- * or empty string if OS can't be detected.
- *
- * @var string
- */
- private $lineSeparator = null;
- /**
- * Contains string with the backup file name of the underlying OS
- * or empty string if OS can't be detected.
- *
- * @var string
- */
- private $backupFileName = null;
- /**
- * Returns the single instance of the ezcSystemInfo class.
- *
- * @throws ezcSystemInfoReaderCantScanOSException
- * If system variables can't be received from OS.
- * @return ezcSystemInfo
- */
- public static function getInstance()
- {
- if ( is_null( self::$instance ) )
- {
- self::$instance = new self();
- }
- return self::$instance;
- }
- /**
- * Constructs ezcSystemInfo object, inits it with corresponding underlying OS data.
- *
- * @throws ezcSystemInfoReaderCantScanOSException
- * If system variables can't be received from OS.
- */
- private function __construct()
- {
- $this->init();
- }
- /**
- * Detects underlying system and sets system properties.
- *
- * @throws ezcSystemInfoReaderCantScanOSException
- * If system variables can't be received from OS.
- */
- private function init()
- {
- $this->setSystemInfoReader();
- }
- /**
- * Sets the systemInfoReader depending on the OS and fills in the system
- * information internally.
- *
- * Returns true if it was able to set appropriate systemInfoReader
- * or false if failed.
- *
- * @throws ezcSystemInfoReaderCantScanOSException
- * If system variables can't be received from OS.
- * @return bool
- */
- private function setSystemInfoReader()
- {
- // Determine OS
- $uname = php_uname( 's' );
- if ( substr( $uname, 0, 7 ) == 'Windows' )
- {
- $this->systemInfoReader = new ezcSystemInfoWindowsReader( $uname );
- $this->osType = 'win32';
- $this->osName = 'Windows';
- $this->fileSystemType = 'win32';
- $this->lineSeparator= "\r\n";
- $this->backupFileName = '.bak';
- }
- else if ( substr( $uname, 0, 6 ) == 'Darwin' )
- {
- $this->systemInfoReader = new ezcSystemInfoMacReader();
- $this->osType = 'mac';
- $this->osName = 'Mac OS X';
- $this->fileSystemType = 'unix';
- $this->lineSeparator= "\n";
- $this->backupFileName = '~';
- }
- else
- {
- $this->osType = 'unix';
- if ( strtolower( $uname ) == 'linux' )
- {
- $this->systemInfoReader = new ezcSystemInfoLinuxReader();
- $this->osName = 'Linux';
- $this->fileSystemType = 'unix';
- $this->lineSeparator= "\n";
- $this->backupFileName = '~';
- }
- else if ( strtolower( substr( $uname, 0, 7 ) ) == 'freebsd' )
- {
- $this->systemInfoReader = new ezcSystemInfoFreeBsdReader();
- $this->osName = 'FreeBSD';
- $this->fileSystemType = 'unix';
- $this->lineSeparator= "\n";
- $this->backupFileName = '~';
- }
- else
- {
- $this->systemInfoReader = null;
- return false;
- }
- }
- return true;
- }
- /**
- * Detects if a PHP accelerator is running and what type it is.
- *
- * @return ezcSystemInfoAccelerator or null if no PHP accelerator detected
- */
- public static function phpAccelerator()
- {
- $phpAcceleratorInfo = null;
- if ( ezcBaseFeatures::hasExtensionSupport( "Turck MMCache" ) )
- {
- $phpAcceleratorInfo = new ezcSystemInfoAccelerator(
- "Turck MMCache", // name
- "http://turck-mmcache.sourceforge.net", // url
- true, // isEnabled
- false, // version int
- false // version string
- );
- }
- if ( ezcBaseFeatures::hasExtensionSupport( "eAccelerator" ) )
- {
- $phpAcceleratorInfo = new ezcSystemInfoAccelerator(
- "eAccelerator", // name
- "http://sourceforge.net/projects/eaccelerator/", // url
- true, // isEnabled
- false, // version int
- phpversion( 'eAccelerator' ) // version string
- );
- }
- if ( ezcBaseFeatures::hasExtensionSupport( "apc" ) )
- {
- $phpAcceleratorInfo = new ezcSystemInfoAccelerator(
- "APC", // name
- "http://pecl.php.net/package/APC", // url
- ( ini_get( 'apc.enabled' ) != 0 ), // isEnabled
- false, // version int
- phpversion( 'apc' ) // version string
- );
- }
- if ( ezcBaseFeatures::hasExtensionSupport( "Zend Performance Suite" ) )
- {
- $phpAcceleratorInfo = new ezcSystemInfoAccelerator(
- "Zend Performance Suite", // name
- "http://www.zend.com/en/products/platform/", // url
- true, // isEnabled
- false, // version int
- false // version string
- );
- }
- if ( ezcBaseFeatures::hasExtensionSupport( 'XCache' ) )
- {
- $phpAcceleratorInfo = new ezcSystemInfoAccelerator(
- "XCache", // name
- "http://xcache.lighttpd.net/", // url
- true, // isEnabled
- false, // version int
- phpversion( 'XCache' ) // version string
- );
- }
- return $phpAcceleratorInfo;
- }
- /**
- * Determines if the script was executed over the web or the shell/command line.
- *
- * @return bool
- */
- public static function isShellExecution()
- {
- $sapiType = php_sapi_name();
- if ( $sapiType == 'cli' )
- {
- return true;
- }
- // For CGI we have to check, if the script has been executed over shell.
- // Currently it looks like the HTTP_HOST variable is the most reasonable to check.
- if ( substr( $sapiType, 0, 3 ) == 'cgi' )
- {
- if ( !isset( $_SERVER['HTTP_HOST'] ) )
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- return false;
- }
- /**
- * Returns the PHP version as an array with the version elements.
- *
- * @return array(string)
- */
- public static function phpVersion()
- {
- return explode( '.', phpVersion() );
- }
- /**
- * Property read access.
- *
- * @throws ezcBasePropertyNotFoundException
- * If the the desired property is not found.
- * @param string $property Name of the property.
- * @return mixed Value of the property or null.
- * @ignore
- */
- public function __get( $property )
- {
- if ( $this->systemInfoReader == null &&
- ( $property == 'cpuType' ||
- $property == 'cpuCount' ||
- $property == 'cpuSpeed' ||
- $property == 'memorySize'
- )
- )
- {
- return null;
- }
- switch ( $property )
- {
- case 'osType':
- return $this->osType;
- case 'osName':
- return $this->osName;
- case 'fileSystemType':
- return $this->fileSystemType;
- case 'cpuCount':
- return $this->systemInfoReader->getCpuCount();
- case 'cpuType':
- return $this->systemInfoReader->cpuType();
- case 'cpuSpeed':
- return $this->systemInfoReader->cpuSpeed();
- case 'memorySize':
- return $this->systemInfoReader->memorySize();
- case 'lineSeparator':
- return $this->lineSeparator;
- case 'backupFileName':
- return $this->backupFileName;
- case 'phpVersion':
- return $this->phpVersion();
- case 'phpAccelerator':
- return $this->phpAccelerator();
- case 'isShellExecution':
- return $this->isShellExecution();
- default:
- break;
- }
- throw new ezcBasePropertyNotFoundException( $property );
- }
- }
- ?>