= 0; return $iis; } /** * Returns `true` if running on a Windows operating system, `false` if otherwise. * * @since 0.6.5 * @return bool * @api */ public static function isWindows() { if (PHP_OS_FAMILY == "Unknown") { return DIRECTORY_SEPARATOR === '\\'; } return PHP_OS_FAMILY === "Windows"; } /** * Returns `true` if this PHP version/build supports timezone manipulation * (e.g., php >= 5.2, or compiled with **EXPERIMENTAL_DATE_SUPPORT=1** for * php < 5.2). * * @return bool * @api */ public static function isTimezoneSupportEnabled() { return function_exists('date_create') && function_exists('date_default_timezone_set') && function_exists('timezone_identifiers_list') && function_exists('timezone_open') && function_exists('timezone_offset_get'); } /** * Returns `true` if the GD PHP extension is available, `false` if otherwise. * * _Note: ImageGraph and the sparkline report visualization depend on the GD extension._ * * @return bool * @api */ public static function isGdExtensionEnabled() { static $gd = null; if (is_null($gd)) { $gd = false; $extensions = @get_loaded_extensions(); if (is_array($extensions)) { $gd = in_array('gd', $extensions) && function_exists('imageftbbox'); } } return $gd; } /** * Raise PHP memory limit if below the minimum required * * @return bool true if set; false otherwise */ public static function raiseMemoryLimitIfNecessary() { if (self::isArchivePhpTriggered()) { // core:archive command: no time limit self::setMaxExecutionTime( 0 ); } $memoryLimit = self::getMemoryLimitValue(); if ($memoryLimit === false) { return false; } $minimumMemoryLimit = Config::getInstance()->General['minimum_memory_limit']; if (self::isArchivePhpTriggered()) { // core:archive command: high memory limit $minimumMemoryLimitWhenArchiving = Config::getInstance()->General['minimum_memory_limit_when_archiving']; if ($memoryLimit < $minimumMemoryLimitWhenArchiving) { return self::setMemoryLimit($minimumMemoryLimitWhenArchiving); } return false; } if ($memoryLimit < $minimumMemoryLimit) { return self::setMemoryLimit($minimumMemoryLimit); } return false; } /** * Set PHP memory limit * * Note: system settings may prevent scripts from overriding the master value * * @param int $minimumMemoryLimit * @return bool true if set; false otherwise */ protected static function setMemoryLimit($minimumMemoryLimit) { // in Megabytes $currentValue = self::getMemoryLimitValue(); if ($currentValue === false || ($currentValue < $minimumMemoryLimit && @ini_set('memory_limit', $minimumMemoryLimit . 'M')) ) { return true; } return false; } /** * Get php memory_limit (in Megabytes) * * Prior to PHP 5.2.1, or on Windows, --enable-memory-limit is not a * compile-time default, so ini_get('memory_limit') may return false. * * @return int|bool memory limit in megabytes, or false if there is no limit */ public static function getMemoryLimitValue() { if (($memory = ini_get('memory_limit')) > 0) { return self::getMegaBytesFromShorthandByte($memory); } // no memory limit return false; } /** * Get php post_max_size (in Megabytes) * * @return int|bool max upload size in megabytes, or false if there is no limit */ public static function getPostMaxUploadSize() { if (($maxPostSize = ini_get('post_max_size')) > 0) { return self::getMegaBytesFromShorthandByte($maxPostSize); } // no max upload size return false; } /** * @see http://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes * @param $value * @return false|float|int */ private static function getMegaBytesFromShorthandByte($value) { $value = str_replace(' ', '', $value); $shorthandByteOption = substr($value, -1); switch ($shorthandByteOption) { case 'G': case 'g': return substr($value, 0, -1) * 1024; case 'M': case 'm': return substr($value, 0, -1); case 'K': case 'k': return substr($value, 0, -1) / 1024; } if (is_numeric($value)) { return (int) $value / 1048576; } return false; } /** * Set maximum script execution time. * * @param int $executionTime max execution time in seconds (0 = no limit) */ public static function setMaxExecutionTime($executionTime) { // in the event one or the other is disabled... @ini_set('max_execution_time', $executionTime); if (function_exists('set_time_limit')) { @set_time_limit($executionTime); } } public static function isMac() { return defined('PHP_OS') && PHP_OS === 'Darwin'; } }