PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.1.4
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.1.4
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / core / SettingsServer.php
matomo / app / core Last commit date
API 2 years ago Access 2 years ago Application 2 years ago Archive 2 years ago ArchiveProcessor 2 years ago Archiver 2 years ago AssetManager 2 years ago Auth 2 years ago Category 2 years ago Changes 2 years ago CliMulti 2 years ago Columns 2 years ago Concurrency 2 years ago Config 2 years ago Container 2 years ago CronArchive 2 years ago DataAccess 2 years ago DataFiles 2 years ago DataTable 2 years ago Db 1 year ago DeviceDetector 2 years ago Email 2 years ago Exception 2 years ago Http 2 years ago Intl 2 years ago Log 2 years ago Mail 2 years ago Measurable 2 years ago Menu 2 years ago Metrics 2 years ago Notification 2 years ago Period 1 year ago Plugin 2 years ago ProfessionalServices 2 years ago Report 2 years ago ReportRenderer 2 years ago Scheduler 2 years ago Segment 2 years ago Session 2 years ago Settings 2 years ago Tracker 1 year ago Translation 2 years ago Twig 2 years ago UpdateCheck 2 years ago Updater 1 year ago Updates 1 year ago Validators 2 years ago View 2 years ago ViewDataTable 2 years ago Visualization 2 years ago Widget 2 years ago .htaccess 2 years ago Access.php 2 years ago Archive.php 2 years ago ArchiveProcessor.php 2 years ago AssetManager.php 2 years ago Auth.php 2 years ago AuthResult.php 2 years ago BaseFactory.php 2 years ago Cache.php 2 years ago CacheId.php 2 years ago CliMulti.php 2 years ago Common.php 2 years ago Config.php 2 years ago Console.php 2 years ago Context.php 2 years ago Cookie.php 2 years ago CronArchive.php 2 years ago DI.php 2 years ago DataArray.php 2 years ago DataTable.php 2 years ago Date.php 2 years ago Db.php 1 year ago DbHelper.php 1 year ago Development.php 2 years ago ErrorHandler.php 2 years ago EventDispatcher.php 2 years ago ExceptionHandler.php 2 years ago FileIntegrity.php 2 years ago Filechecks.php 2 years ago Filesystem.php 2 years ago FrontController.php 2 years ago Http.php 2 years ago IP.php 2 years ago Log.php 2 years ago LogDeleter.php 2 years ago Mail.php 2 years ago Metrics.php 2 years ago NoAccessException.php 2 years ago Nonce.php 2 years ago Notification.php 2 years ago NumberFormatter.php 2 years ago Option.php 2 years ago Period.php 2 years ago Piwik.php 2 years ago Plugin.php 2 years ago Profiler.php 2 years ago ProxyHeaders.php 2 years ago ProxyHttp.php 2 years ago QuickForm2.php 2 years ago RankingQuery.php 2 years ago ReportRenderer.php 2 years ago Request.php 2 years ago Segment.php 2 years ago Sequence.php 2 years ago Session.php 2 years ago SettingsPiwik.php 2 years ago SettingsServer.php 2 years ago Singleton.php 2 years ago Site.php 2 years ago SiteContentDetector.php 2 years ago SupportedBrowser.php 2 years ago TCPDF.php 2 years ago Theme.php 2 years ago Timer.php 2 years ago Tracker.php 2 years ago Twig.php 2 years ago Unzip.php 2 years ago UpdateCheck.php 2 years ago Updater.php 2 years ago UpdaterErrorException.php 2 years ago Updates.php 2 years ago Url.php 2 years ago UrlHelper.php 1 year ago Version.php 1 year ago View.php 2 years ago bootstrap.php 2 years ago dispatch.php 2 years ago testMinimumPhpVersion.php 2 years ago
SettingsServer.php
238 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 */
9 namespace Piwik;
10
11 /**
12 * Contains helper methods that can be used to get information regarding the
13 * server, its settings and currently used PHP settings.
14 *
15 */
16 class SettingsServer
17 {
18 /**
19 * Returns true if the current script execution was triggered by the cron archiving script.
20 *
21 * Helpful for error handling: directly throw error without HTML (eg. when DB is down).
22 *
23 * @return bool
24 * @api
25 */
26 public static function isArchivePhpTriggered()
27 {
28 return !empty($_GET['trigger']) && $_GET['trigger'] == 'archivephp' && \Piwik\Piwik::hasUserSuperUserAccess();
29 }
30 /**
31 * Returns true if the current request is a Tracker request.
32 *
33 * @return bool true if the current request is a Tracking API Request (ie. piwik.php)
34 */
35 public static function isTrackerApiRequest()
36 {
37 return !empty($GLOBALS['PIWIK_TRACKER_MODE']);
38 }
39 /**
40 * Mark the current request as a Tracker API request
41 */
42 public static function setIsTrackerApiRequest()
43 {
44 $GLOBALS['PIWIK_TRACKER_MODE'] = true;
45 }
46 /**
47 * Set the current request is not a tracker API request
48 */
49 public static function setIsNotTrackerApiRequest()
50 {
51 $GLOBALS['PIWIK_TRACKER_MODE'] = false;
52 }
53 /**
54 * Returns true if Matomo is running within Matomo for WordPress.
55 *
56 * @return bool true if Matomo is running in WordPress, false if Matomo is running as part of On-Premise
57 * @api
58 */
59 public static function isMatomoForWordPress()
60 {
61 return defined('ABSPATH') && function_exists('\\add_action');
62 }
63 /**
64 * Returns `true` if running on Microsoft IIS 7 (or above), `false` if otherwise.
65 *
66 * @return bool
67 * @api
68 */
69 public static function isIIS()
70 {
71 $iis = isset($_SERVER['SERVER_SOFTWARE']) && preg_match('/^Microsoft-IIS\\/(.+)/', $_SERVER['SERVER_SOFTWARE'], $matches) && version_compare($matches[1], '7') >= 0;
72 return $iis;
73 }
74 /**
75 * Returns `true` if running on a Windows operating system, `false` if otherwise.
76 *
77 * @since 0.6.5
78 * @return bool
79 * @api
80 */
81 public static function isWindows()
82 {
83 if (PHP_OS_FAMILY == "Unknown") {
84 return DIRECTORY_SEPARATOR === '\\';
85 }
86 return PHP_OS_FAMILY === "Windows";
87 }
88 /**
89 * Returns `true` if this PHP version/build supports timezone manipulation
90 * (e.g., php >= 5.2, or compiled with **EXPERIMENTAL_DATE_SUPPORT=1** for
91 * php < 5.2).
92 *
93 * @return bool
94 * @api
95 */
96 public static function isTimezoneSupportEnabled()
97 {
98 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');
99 }
100 /**
101 * Returns `true` if the GD PHP extension is available, `false` if otherwise.
102 *
103 * _Note: ImageGraph and the sparkline report visualization depend on the GD extension._
104 *
105 * @return bool
106 * @api
107 */
108 public static function isGdExtensionEnabled()
109 {
110 static $gd = null;
111 if (is_null($gd)) {
112 $gd = false;
113 $extensions = @get_loaded_extensions();
114 if (is_array($extensions)) {
115 $gd = in_array('gd', $extensions) && function_exists('imageftbbox');
116 }
117 }
118 return $gd;
119 }
120 /**
121 * Raise PHP memory limit if below the minimum required
122 *
123 * @return bool true if set; false otherwise
124 */
125 public static function raiseMemoryLimitIfNecessary()
126 {
127 if (self::isArchivePhpTriggered()) {
128 // core:archive command: no time limit
129 self::setMaxExecutionTime(0);
130 }
131 $memoryLimit = self::getMemoryLimitValue();
132 if ($memoryLimit === false) {
133 return false;
134 }
135 $minimumMemoryLimit = \Piwik\Config::getInstance()->General['minimum_memory_limit'];
136 if (self::isArchivePhpTriggered()) {
137 // core:archive command: high memory limit
138 $minimumMemoryLimitWhenArchiving = \Piwik\Config::getInstance()->General['minimum_memory_limit_when_archiving'];
139 if ($memoryLimit < $minimumMemoryLimitWhenArchiving) {
140 return self::setMemoryLimit($minimumMemoryLimitWhenArchiving);
141 }
142 return false;
143 }
144 if ($memoryLimit < $minimumMemoryLimit) {
145 return self::setMemoryLimit($minimumMemoryLimit);
146 }
147 return false;
148 }
149 /**
150 * Set PHP memory limit
151 *
152 * Note: system settings may prevent scripts from overriding the master value
153 *
154 * @param int $minimumMemoryLimit
155 * @return bool true if set; false otherwise
156 */
157 protected static function setMemoryLimit($minimumMemoryLimit)
158 {
159 // in Megabytes
160 $currentValue = self::getMemoryLimitValue();
161 if ($currentValue === false || $currentValue < $minimumMemoryLimit && @ini_set('memory_limit', $minimumMemoryLimit . 'M')) {
162 return true;
163 }
164 return false;
165 }
166 /**
167 * Get php memory_limit (in Megabytes)
168 *
169 * Prior to PHP 5.2.1, or on Windows, --enable-memory-limit is not a
170 * compile-time default, so ini_get('memory_limit') may return false.
171 *
172 * @return int|bool memory limit in megabytes, or false if there is no limit
173 */
174 public static function getMemoryLimitValue()
175 {
176 if (($memory = ini_get('memory_limit')) > 0) {
177 return self::getMegaBytesFromShorthandByte($memory);
178 }
179 // no memory limit
180 return false;
181 }
182 /**
183 * Get php post_max_size (in Megabytes)
184 *
185 * @return int|bool max upload size in megabytes, or false if there is no limit
186 */
187 public static function getPostMaxUploadSize()
188 {
189 if (($maxPostSize = ini_get('post_max_size')) > 0) {
190 return self::getMegaBytesFromShorthandByte($maxPostSize);
191 }
192 // no max upload size
193 return false;
194 }
195 /**
196 * @see http://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
197 * @param $value
198 * @return false|float|int
199 */
200 private static function getMegaBytesFromShorthandByte($value)
201 {
202 $value = str_replace(' ', '', $value);
203 $shorthandByteOption = substr($value, -1);
204 switch ($shorthandByteOption) {
205 case 'G':
206 case 'g':
207 return substr($value, 0, -1) * 1024;
208 case 'M':
209 case 'm':
210 return substr($value, 0, -1);
211 case 'K':
212 case 'k':
213 return substr($value, 0, -1) / 1024;
214 }
215 if (is_numeric($value)) {
216 return (int) $value / 1048576;
217 }
218 return false;
219 }
220 /**
221 * Set maximum script execution time.
222 *
223 * @param int $executionTime max execution time in seconds (0 = no limit)
224 */
225 public static function setMaxExecutionTime($executionTime)
226 {
227 // in the event one or the other is disabled...
228 @ini_set('max_execution_time', $executionTime);
229 if (function_exists('set_time_limit')) {
230 @set_time_limit($executionTime);
231 }
232 }
233 public static function isMac()
234 {
235 return defined('PHP_OS') && PHP_OS === 'Darwin';
236 }
237 }
238