Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattab <matthieu.aubry@gmail.com>2013-09-14 06:37:21 +0400
committermattab <matthieu.aubry@gmail.com>2013-09-14 06:37:21 +0400
commit8d11a25fa7f41212584a58998c59884a4b9836d4 (patch)
tree39d6e3892346288619987f32a562f7e102c6f34c /core/SettingsServer.php
parent4e910af4d770e19bcc7f953840662ee8a4c08b20 (diff)
Moving PHP/server settings getter/setter to SettingsServer class
Diffstat (limited to 'core/SettingsServer.php')
-rw-r--r--core/SettingsServer.php208
1 files changed, 208 insertions, 0 deletions
diff --git a/core/SettingsServer.php b/core/SettingsServer.php
new file mode 100644
index 0000000000..58208714b8
--- /dev/null
+++ b/core/SettingsServer.php
@@ -0,0 +1,208 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ * @category Piwik
+ * @package Piwik
+ */
+namespace Piwik;
+
+/**
+ * Class SettingsServer holds the logic related to reading server/php settings
+ *
+ * @package Piwik
+ */
+class SettingsServer
+{
+ /**
+ * Is the current script execution triggered by misc/cron/archive.php ?
+ *
+ * Helpful for error handling: directly throw error without HTML (eg. when DB is down)
+ * @return bool
+ */
+ public static function isArchivePhpTriggered()
+ {
+ return !empty($_GET['trigger'])
+ && $_GET['trigger'] == 'archivephp';
+ }
+
+ /**
+ * Returns true if PHP was invoked from command-line interface (shell)
+ *
+ * @since added in 0.4.4
+ * @return bool true if PHP invoked as a CGI or from CLI
+ */
+ public static function isPhpCliMode()
+ {
+ $remoteAddr = @$_SERVER['REMOTE_ADDR'];
+ return PHP_SAPI == 'cli' ||
+ (!strncmp(PHP_SAPI, 'cgi', 3) && empty($remoteAddr));
+ }
+
+ /**
+ * Returns true if running on Microsoft IIS 7 (or above)
+ *
+ * @return bool
+ */
+ public static function isIIS()
+ {
+ $iis = isset($_SERVER['SERVER_SOFTWARE']) &&
+ preg_match('/^Microsoft-IIS\/(.+)/', $_SERVER['SERVER_SOFTWARE'], $matches) &&
+ version_compare($matches[1], '7') >= 0;
+
+ return $iis;
+ }
+
+ /**
+ * Returns true if running on an Apache web server
+ *
+ * @return bool
+ */
+ public static function isApache()
+ {
+ $apache = isset($_SERVER['SERVER_SOFTWARE']) &&
+ !strncmp($_SERVER['SERVER_SOFTWARE'], 'Apache', 6);
+
+ return $apache;
+ }
+
+ /**
+ * Returns true if running on a Windows operating system
+ *
+ * @since 0.6.5
+ * @return bool true if PHP detects it is running on Windows; else false
+ */
+ public static function isWindows()
+ {
+ return DIRECTORY_SEPARATOR === '\\';
+ }
+
+ /**
+ * Determine 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 True if timezones supported; false otherwise
+ */
+ 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');
+ }
+
+ /**
+ * Is GD php extension (sparklines, graphs) available?
+ *
+ * @return bool
+ */
+ public static function isGdExtensionEnabled()
+ {
+ static $gd = null;
+ if (is_null($gd)) {
+ $extensions = @get_loaded_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()
+ {
+ $memoryLimit = self::getMemoryLimitValue();
+ if ($memoryLimit === false) {
+ return false;
+ }
+ $minimumMemoryLimit = Config::getInstance()->General['minimum_memory_limit'];
+
+ if (self::isArchivePhpTriggered()
+ && Piwik::isUserIsSuperUser()
+ ) {
+ // archive.php: no time limit, high memory limit
+ self::setMaxExecutionTime(0);
+ $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.
+ *
+ * @see http://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
+ * @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) {
+ // handle shorthand byte options (case-insensitive)
+ $shorthandByteOption = substr($memory, -1);
+ switch ($shorthandByteOption) {
+ case 'G':
+ case 'g':
+ return substr($memory, 0, -1) * 1024;
+ case 'M':
+ case 'm':
+ return substr($memory, 0, -1);
+ case 'K':
+ case 'k':
+ return substr($memory, 0, -1) / 1024;
+ }
+ return $memory / 1048576;
+ }
+
+ // no memory limit
+ 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);
+ @set_time_limit($executionTime);
+ }
+} \ No newline at end of file