PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.0.7
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.0.7
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 2 years 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 2 years 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 2 years ago Translation 2 years ago Twig 2 years ago UpdateCheck 2 years ago Updater 2 years ago Updates 2 years 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 2 years ago DbHelper.php 2 years 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 2 years ago Version.php 2 years ago View.php 2 years ago bootstrap.php 2 years ago dispatch.php 2 years ago testMinimumPhpVersion.php 2 years ago
SettingsServer.php
239 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 *
9 */
10 namespace Piwik;
11
12 /**
13 * Contains helper methods that can be used to get information regarding the
14 * server, its settings and currently used PHP settings.
15 *
16 */
17 class SettingsServer
18 {
19 /**
20 * Returns true if the current script execution was triggered by the cron archiving script.
21 *
22 * Helpful for error handling: directly throw error without HTML (eg. when DB is down).
23 *
24 * @return bool
25 * @api
26 */
27 public static function isArchivePhpTriggered()
28 {
29 return !empty($_GET['trigger']) && $_GET['trigger'] == 'archivephp' && \Piwik\Piwik::hasUserSuperUserAccess();
30 }
31 /**
32 * Returns true if the current request is a Tracker request.
33 *
34 * @return bool true if the current request is a Tracking API Request (ie. piwik.php)
35 */
36 public static function isTrackerApiRequest()
37 {
38 return !empty($GLOBALS['PIWIK_TRACKER_MODE']);
39 }
40 /**
41 * Mark the current request as a Tracker API request
42 */
43 public static function setIsTrackerApiRequest()
44 {
45 $GLOBALS['PIWIK_TRACKER_MODE'] = true;
46 }
47 /**
48 * Set the current request is not a tracker API request
49 */
50 public static function setIsNotTrackerApiRequest()
51 {
52 $GLOBALS['PIWIK_TRACKER_MODE'] = false;
53 }
54 /**
55 * Returns true if Matomo is running within Matomo for WordPress.
56 *
57 * @return bool true if Matomo is running in WordPress, false if Matomo is running as part of On-Premise
58 * @api
59 */
60 public static function isMatomoForWordPress()
61 {
62 return defined('ABSPATH') && function_exists('\\add_action');
63 }
64 /**
65 * Returns `true` if running on Microsoft IIS 7 (or above), `false` if otherwise.
66 *
67 * @return bool
68 * @api
69 */
70 public static function isIIS()
71 {
72 $iis = isset($_SERVER['SERVER_SOFTWARE']) && preg_match('/^Microsoft-IIS\\/(.+)/', $_SERVER['SERVER_SOFTWARE'], $matches) && version_compare($matches[1], '7') >= 0;
73 return $iis;
74 }
75 /**
76 * Returns `true` if running on a Windows operating system, `false` if otherwise.
77 *
78 * @since 0.6.5
79 * @return bool
80 * @api
81 */
82 public static function isWindows()
83 {
84 if (PHP_OS_FAMILY == "Unknown") {
85 return DIRECTORY_SEPARATOR === '\\';
86 }
87 return PHP_OS_FAMILY === "Windows";
88 }
89 /**
90 * Returns `true` if this PHP version/build supports timezone manipulation
91 * (e.g., php >= 5.2, or compiled with **EXPERIMENTAL_DATE_SUPPORT=1** for
92 * php < 5.2).
93 *
94 * @return bool
95 * @api
96 */
97 public static function isTimezoneSupportEnabled()
98 {
99 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');
100 }
101 /**
102 * Returns `true` if the GD PHP extension is available, `false` if otherwise.
103 *
104 * _Note: ImageGraph and the sparkline report visualization depend on the GD extension._
105 *
106 * @return bool
107 * @api
108 */
109 public static function isGdExtensionEnabled()
110 {
111 static $gd = null;
112 if (is_null($gd)) {
113 $gd = false;
114 $extensions = @get_loaded_extensions();
115 if (is_array($extensions)) {
116 $gd = in_array('gd', $extensions) && function_exists('imageftbbox');
117 }
118 }
119 return $gd;
120 }
121 /**
122 * Raise PHP memory limit if below the minimum required
123 *
124 * @return bool true if set; false otherwise
125 */
126 public static function raiseMemoryLimitIfNecessary()
127 {
128 if (self::isArchivePhpTriggered()) {
129 // core:archive command: no time limit
130 self::setMaxExecutionTime(0);
131 }
132 $memoryLimit = self::getMemoryLimitValue();
133 if ($memoryLimit === false) {
134 return false;
135 }
136 $minimumMemoryLimit = \Piwik\Config::getInstance()->General['minimum_memory_limit'];
137 if (self::isArchivePhpTriggered()) {
138 // core:archive command: high memory limit
139 $minimumMemoryLimitWhenArchiving = \Piwik\Config::getInstance()->General['minimum_memory_limit_when_archiving'];
140 if ($memoryLimit < $minimumMemoryLimitWhenArchiving) {
141 return self::setMemoryLimit($minimumMemoryLimitWhenArchiving);
142 }
143 return false;
144 }
145 if ($memoryLimit < $minimumMemoryLimit) {
146 return self::setMemoryLimit($minimumMemoryLimit);
147 }
148 return false;
149 }
150 /**
151 * Set PHP memory limit
152 *
153 * Note: system settings may prevent scripts from overriding the master value
154 *
155 * @param int $minimumMemoryLimit
156 * @return bool true if set; false otherwise
157 */
158 protected static function setMemoryLimit($minimumMemoryLimit)
159 {
160 // in Megabytes
161 $currentValue = self::getMemoryLimitValue();
162 if ($currentValue === false || $currentValue < $minimumMemoryLimit && @ini_set('memory_limit', $minimumMemoryLimit . 'M')) {
163 return true;
164 }
165 return false;
166 }
167 /**
168 * Get php memory_limit (in Megabytes)
169 *
170 * Prior to PHP 5.2.1, or on Windows, --enable-memory-limit is not a
171 * compile-time default, so ini_get('memory_limit') may return false.
172 *
173 * @return int|bool memory limit in megabytes, or false if there is no limit
174 */
175 public static function getMemoryLimitValue()
176 {
177 if (($memory = ini_get('memory_limit')) > 0) {
178 return self::getMegaBytesFromShorthandByte($memory);
179 }
180 // no memory limit
181 return false;
182 }
183 /**
184 * Get php post_max_size (in Megabytes)
185 *
186 * @return int|bool max upload size in megabytes, or false if there is no limit
187 */
188 public static function getPostMaxUploadSize()
189 {
190 if (($maxPostSize = ini_get('post_max_size')) > 0) {
191 return self::getMegaBytesFromShorthandByte($maxPostSize);
192 }
193 // no max upload size
194 return false;
195 }
196 /**
197 * @see http://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
198 * @param $value
199 * @return false|float|int
200 */
201 private static function getMegaBytesFromShorthandByte($value)
202 {
203 $value = str_replace(' ', '', $value);
204 $shorthandByteOption = substr($value, -1);
205 switch ($shorthandByteOption) {
206 case 'G':
207 case 'g':
208 return substr($value, 0, -1) * 1024;
209 case 'M':
210 case 'm':
211 return substr($value, 0, -1);
212 case 'K':
213 case 'k':
214 return substr($value, 0, -1) / 1024;
215 }
216 if (is_numeric($value)) {
217 return (int) $value / 1048576;
218 }
219 return false;
220 }
221 /**
222 * Set maximum script execution time.
223 *
224 * @param int $executionTime max execution time in seconds (0 = no limit)
225 */
226 public static function setMaxExecutionTime($executionTime)
227 {
228 // in the event one or the other is disabled...
229 @ini_set('max_execution_time', $executionTime);
230 if (function_exists('set_time_limit')) {
231 @set_time_limit($executionTime);
232 }
233 }
234 public static function isMac()
235 {
236 return defined('PHP_OS') && PHP_OS === 'Darwin';
237 }
238 }
239