| <?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 ); |
| } |
| } |
| ?> |