Bitrix-D7 23.9
 
Загрузка...
Поиск...
Не найдено
helper.php
1<?
3
12class Helper
13{
14 private static $options = array();
15 private static $isAjaxRequest = null;
16 private static $ajaxRandom = null;
17
22 public static function getRequestUri()
23 {
24 if (self::isSpaMode())
25 {
26 return ($options["SPA_REQUEST_URI"] ?? "/");
27 }
28 else
29 {
30 return ($_SERVER["REQUEST_URI"] ?? '');
31 }
32 }
33
41 public static function getHttpHost($host = null)
42 {
43 return preg_replace("/:(80|443)$/", "", $host === null ? ($_SERVER["HTTP_HOST"] ?? '') : $host);
44 }
45
50 public static function getDomains()
51 {
52 $options = self::getOptions();
53 $domains = array();
54 if (isset($options["DOMAINS"]) && is_array($options["DOMAINS"]))
55 {
56 $domains = array_values($options["DOMAINS"]);
57 }
58
59 return array_map(array(__CLASS__, "getHttpHost"), $domains);
60 }
61
62 public static function getSpaPostfixByUri($requestUri)
63 {
64 $options = self::getOptions();
65 $requestUri = ($p = mb_strpos($requestUri, "?")) === false? $requestUri : mb_substr($requestUri, 0, $p);
66
67 if (isset($options["SPA_MAP"]) && is_array($options["SPA_MAP"]))
68 {
69 foreach ($options["SPA_MAP"] as $mask => $postfix)
70 {
71 if (preg_match($mask, $requestUri))
72 {
73 return $postfix;
74 }
75 }
76 }
77
78 return null;
79 }
80
81 public static function getSpaPostfix()
82 {
83 $options = self::getOptions();
84 if (isset($options["SPA_MAP"]) && is_array($options["SPA_MAP"]))
85 {
86 return array_values($options["SPA_MAP"]);
87 }
88
89 return array();
90 }
91
92 public static function getRealPrivateKey($privateKey = null, $postfix = null)
93 {
94 if (self::isSpaMode())
95 {
96 $postfix = $postfix === null ? self::getSpaPostfixByUri($_SERVER["REQUEST_URI"]) : $postfix;
97 if ($postfix !== null)
98 {
99 $privateKey .= $postfix;
100 }
101 }
102
103 return $privateKey;
104 }
105
106 public static function getUserPrivateKey()
107 {
108 $options = self::getOptions();
109 if (isset($options["COOKIE_PK"]) && array_key_exists($options["COOKIE_PK"], $_COOKIE))
110 {
111 return $_COOKIE[$options["COOKIE_PK"]];
112 }
113
114 return null;
115 }
116
117 public static function setUserPrivateKey($prefix, $expire = 0)
118 {
119 $options = self::getOptions();
120 if (isset($options["COOKIE_PK"]) && $options["COOKIE_PK"] <> '')
121 {
122 setcookie($options["COOKIE_PK"], $prefix, $expire, "/", false, false, true);
123 }
124 }
125
126 public static function deleteUserPrivateKey()
127 {
128 $options = self::getOptions();
129 if (isset($options["COOKIE_PK"]) && $options["COOKIE_PK"] <> '')
130 {
131 setcookie($options["COOKIE_PK"], "", 0, "/");
132 }
133 }
134
140 public static function isAjaxRequest()
141 {
142 if (self::$isAjaxRequest === null)
143 {
144 self::$isAjaxRequest =
145 (isset($_SERVER["HTTP_BX_ACTION_TYPE"]) && $_SERVER["HTTP_BX_ACTION_TYPE"] === "get_dynamic") ||
146 (defined("actionType") && constant("actionType") === "get_dynamic");
147 }
148
149 return self::$isAjaxRequest;
150 }
151
152 public static function isAppCacheRequest()
153 {
154 return
155 (isset($_SERVER["HTTP_BX_CACHE_MODE"]) && $_SERVER["HTTP_BX_CACHE_MODE"] === "APPCACHE") ||
156 (defined("CACHE_MODE") && constant("CACHE_MODE") === "APPCACHE");
157 }
158
159 public static function isCompositeRequest()
160 {
161 return
162 (isset($_SERVER["HTTP_BX_CACHE_MODE"]) && $_SERVER["HTTP_BX_CACHE_MODE"] === "HTMLCACHE") ||
163 (defined("CACHE_MODE") && constant("CACHE_MODE") === "HTMLCACHE");
164 }
165
171 public static function isBitrixFolder()
172 {
173 $folders = array(BX_ROOT, BX_PERSONAL_ROOT);
174 $requestUri = "/".ltrim($_SERVER["REQUEST_URI"], "/");
175 foreach ($folders as $folder)
176 {
177 $folder = rtrim($folder, "/")."/";
178 if (strncmp($requestUri, $folder, mb_strlen($folder)) == 0)
179 {
180 return true;
181 }
182 }
183
184 return false;
185 }
186
187 public static function isSpaMode()
188 {
189 $options = self::getOptions();
190
191 return isset($options["SPA_MODE"]) && $options["SPA_MODE"] === "Y";
192 }
193
202 public static function gzdecode($data)
203 {
204 if (function_exists("gzdecode"))
205 {
206 return gzdecode($data);
207 }
208
209 $data = substr($data, 10, -8);
210 if ($data !== "")
211 {
212 $data = gzinflate($data);
213 }
214
215 return $data;
216 }
217
223 public static function getAjaxRandom()
224 {
225 if (self::$ajaxRandom === null)
226 {
227 self::$ajaxRandom = self::removeRandParam();
228 }
229
230 return self::$ajaxRandom;
231 }
232
238 public static function removeRandParam()
239 {
240 if (!array_key_exists("bxrand", $_GET) || !preg_match("/^[0-9]+$/", $_GET["bxrand"]))
241 {
242 return false;
243 }
244
245 self::$ajaxRandom = $_GET["bxrand"];
246
247 unset($_GET["bxrand"]);
248 unset($_REQUEST["bxrand"]);
249
250 if (isset($_SERVER["REQUEST_URI"]))
251 {
252 $_SERVER["REQUEST_URI"] = preg_replace(
253 "/((?<=\\?)bxrand=\\d+&?|&bxrand=\\d+\$)/",
254 "",
255 $_SERVER["REQUEST_URI"]
256 );
257 $_SERVER["REQUEST_URI"] = rtrim($_SERVER["REQUEST_URI"], "?&");
258 }
259
260 if (isset($_SERVER["QUERY_STRING"]))
261 {
262 $_SERVER["QUERY_STRING"] = preg_replace("/[?&]?bxrand=[0-9]+/", "", $_SERVER["QUERY_STRING"]);
263 $_SERVER["QUERY_STRING"] = trim($_SERVER["QUERY_STRING"], "&");
264 if (isset($GLOBALS["QUERY_STRING"]))
265 {
266 $GLOBALS["QUERY_STRING"] = $_SERVER["QUERY_STRING"];
267 }
268 }
269
270 return self::$ajaxRandom;
271 }
272
287 public static function convertUriToPath($uri, $host = null, $privateKey = null)
288 {
289 $uri = "/".trim($uri, "/");
290 $parts = explode("?", $uri, 2);
291
292 $uriPath = $parts[0];
293 $uriPath = preg_replace("~/index\\.(php|html)$~i", "", $uriPath);
294 $uriPath = rtrim(str_replace("..", "__", $uriPath), "/");
295 $uriPath .= "/index";
296
297 $queryString = isset($parts[1]) ? self::removeIgnoredParams($parts[1]) : "";
298 $queryString = str_replace(".", "_", $queryString);
299
300 $host = self::getHttpHost($host);
301 if ($host <> '')
302 {
303 $host = "/".$host;
304 $host = preg_replace("/:(\\d+)\$/", "-\\1", $host);
305 }
306
307 $privateKey = preg_replace("~[^a-z0-9/_]~i", "", (string)$privateKey);
308 if ($privateKey <> '')
309 {
310 $privateKey = "/".trim($privateKey, "/");
311 }
312
313 $cacheKey = $host.$uriPath."@".$queryString.$privateKey.".html";
314
315 return str_replace(array("?", "*"), "_", $cacheKey);
316 }
317
318 public static function removeIgnoredParams($queryString)
319 {
320 if (!is_string($queryString) || $queryString === "")
321 {
322 return "";
323 }
324
325 $params = array();
326 parse_str($queryString, $params);
327
328 $options = self::getOptions();
329 $ignoredParams = isset($options["~IGNORED_PARAMETERS"]) && is_array($options["~IGNORED_PARAMETERS"])
330 ? $options["~IGNORED_PARAMETERS"] : array();
331
332 if (empty($ignoredParams) || empty($params))
333 {
334 return $queryString;
335 }
336
337 foreach ($params as $key => $value)
338 {
339 foreach ($ignoredParams as $ignoredParam)
340 {
341 if (strcasecmp($ignoredParam, $key) == 0)
342 {
343 unset($params[$key]);
344 break;
345 }
346 }
347 }
348
349 return http_build_query($params, "", "&");
350 }
351
356 public static function isOn()
357 {
358 return file_exists(self::getEnabledFilePath());
359 }
360
365 public static function isCompositeEnabled()
366 {
367 return self::isOn();
368 }
369
370 public static function getEnabledFilePath()
371 {
372 return $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/html_pages/.enabled";
373 }
374
375 public static function getConfigFilePath()
376 {
377 return $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/html_pages/.config.php";
378 }
379
380 public static function getSizeFilePath()
381 {
382 return $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/html_pages/.size";
383 }
384
392 public static function setOptions($arOptions = array())
393 {
394 $arOptions = array_merge(self::getOptions(), $arOptions);
395 self::compileOptions($arOptions);
396
397 $fileName = self::getConfigFilePath();
398 $tempFileName = $fileName.md5(mt_rand()).".tmp";
399 self::makeDirPath($fileName);
400
401 $fh = fopen($tempFileName, "wb");
402 if ($fh !== false)
403 {
404 $content = "<?\n\$arHTMLPagesOptions = array(\n";
405 foreach ($arOptions as $key => $value)
406 {
407 if (is_integer($key))
408 {
409 $phpKey = $key;
410 }
411 else
412 {
413 $phpKey = "\"".self::escapePHPString($key)."\"";
414 }
415
416 if (is_array($value))
417 {
418 $content .= "\t".$phpKey." => array(\n";
419 foreach ($value as $key2 => $val)
420 {
421 if (is_integer($key2))
422 {
423 $phpKey2 = $key2;
424 }
425 else
426 {
427 $phpKey2 = "\"".self::escapePHPString($key2)."\"";
428 }
429
430 $content .= "\t\t".$phpKey2." => \"".self::escapePHPString($val)."\",\n";
431 }
432 $content .= "\t),\n";
433 }
434 else
435 {
436 $content .= "\t".$phpKey." => \"".self::escapePHPString($value)."\",\n";
437 }
438 }
439
440 $content .= ");\n?>";
441 $written = fwrite($fh, $content);
442 $len = strlen($content);
443 if ($written === $len)
444 {
445 fclose($fh);
446 if (file_exists($fileName))
447 {
448 unlink($fileName);
449 }
450 rename($tempFileName, $fileName);
451 @chmod($fileName, defined("BX_FILE_PERMISSIONS") ? BX_FILE_PERMISSIONS : 0664);
452 }
453 else
454 {
455 fclose($fh);
456 if (file_exists($tempFileName))
457 {
458 unlink($tempFileName);
459 }
460 }
461
462 self::$options = array();
463 }
464 }
465
466 public static function makeDirPath($path)
467 {
468 $path = str_replace(array("\\", "//"), "/", $path);
469
470 //remove file name
471 if (mb_substr($path, -1) != "/")
472 {
473 $p = mb_strrpos($path, "/");
474 $path = mb_substr($path, 0, $p);
475 }
476
477 $path = rtrim($path, "/");
478
479 if ($path == "")
480 {
481 //current folder always exists
482 return true;
483 }
484
485 if (!file_exists($path))
486 {
487 return mkdir($path, defined("BX_DIR_PERMISSIONS") ? BX_DIR_PERMISSIONS : 0755, true);
488 }
489
490 return is_dir($path);
491 }
492
493 public static function escapePHPString($str)
494 {
495 $from = array("\\", "\$", "\"");
496 $to = array("\\\\", "\\\$", "\\\"");
497 return str_replace($from, $to, $str);
498 }
499
504 public static function getOptions()
505 {
506 if (!empty(self::$options))
507 {
508 return self::$options;
509 }
510
511 $arHTMLPagesOptions = array();
512 $fileName = self::getConfigFilePath();
513 if (file_exists($fileName))
514 {
515 include($fileName);
516 }
517
518 $compile = !empty(array_diff(self::getCompiledOptions(), array_keys($arHTMLPagesOptions)));
519 $arHTMLPagesOptions = $arHTMLPagesOptions + self::getDefaultOptions();
520 if ($compile)
521 {
522 self::compileOptions($arHTMLPagesOptions);
523 }
524
525 if (isset($arHTMLPagesOptions["AUTO_COMPOSITE"]) && $arHTMLPagesOptions["AUTO_COMPOSITE"] === "Y")
526 {
527 $arHTMLPagesOptions["FRAME_MODE"] = "Y";
528 $arHTMLPagesOptions["FRAME_TYPE"] = "DYNAMIC_WITH_STUB";
529 $arHTMLPagesOptions["AUTO_UPDATE"] = "Y";
530 }
531
532 self::$options = $arHTMLPagesOptions;
533
534 return self::$options;
535 }
536
537 public static function resetOptions()
538 {
539 self::setOptions(self::getDefaultOptions());
540 }
541
542 private static function getDefaultOptions()
543 {
544 return array(
545 "INCLUDE_MASK" => "/*",
546 "EXCLUDE_MASK" => "/bitrix/*; /404.php; ",
547 "FILE_QUOTA" => 100,
548 "BANNER_BGCOLOR" => "#E94524",
549 "BANNER_STYLE" => "white",
550 "STORAGE" => "files",
551 "ONLY_PARAMETERS" => "id; ELEMENT_ID; SECTION_ID; PAGEN_1; ",
552 "IGNORED_PARAMETERS" =>
553 "utm_source; utm_medium; utm_campaign; utm_content; fb_action_ids; ".
554 "utm_term; yclid; gclid; _openstat; from; ".
555 "referrer1; r1; referrer2; r2; referrer3; r3; ",
556 "WRITE_STATISTIC" => "Y",
557 "EXCLUDE_PARAMS" => "ncc; ",
558 "COMPOSITE" => "Y"
559 );
560 }
561
562 private static function getCompiledOptions()
563 {
564 return array(
565 "INCLUDE_MASK",
566 "~INCLUDE_MASK",
567 "EXCLUDE_MASK",
568 "~EXCLUDE_MASK",
569 "FILE_QUOTA",
570 "~FILE_QUOTA",
571 "~GET",
572 "ONLY_PARAMETERS",
573 "IGNORED_PARAMETERS",
574 "~IGNORED_PARAMETERS",
575 "INDEX_ONLY",
576 "EXCLUDE_PARAMS",
577 "~EXCLUDE_PARAMS",
578 );
579 }
580
581 public static function compileOptions(&$arOptions)
582 {
583 $arOptions["~INCLUDE_MASK"] = array();
584 $inc = str_replace(
585 array("\\", ".", "?", "*", "'"),
586 array("/", "\\.", ".", ".*?", "\\'"),
587 $arOptions["INCLUDE_MASK"]
588 );
589 $arIncTmp = explode(";", $inc);
590 foreach ($arIncTmp as $mask)
591 {
592 $mask = trim($mask);
593 if ($mask <> '')
594 {
595 $arOptions["~INCLUDE_MASK"][] = "'^".$mask."$'";
596 }
597 }
598
599 $arOptions["~EXCLUDE_MASK"] = array();
600 $exc = str_replace(
601 array("\\", ".", "?", "*", "'"),
602 array("/", "\\.", ".", ".*?", "\\'"),
603 $arOptions["EXCLUDE_MASK"]
604 );
605 $arExcTmp = explode(";", $exc);
606 foreach ($arExcTmp as $mask)
607 {
608 $mask = trim($mask);
609 if ($mask <> '')
610 {
611 $arOptions["~EXCLUDE_MASK"][] = "'^".$mask."$'";
612 }
613 }
614
615 if (intval($arOptions["FILE_QUOTA"]) > 0)
616 {
617 $arOptions["~FILE_QUOTA"] = doubleval($arOptions["FILE_QUOTA"]) * 1024.0 * 1024.0;
618 }
619 else
620 {
621 $arOptions["~FILE_QUOTA"] = 0.0;
622 }
623
624 $arOptions["INDEX_ONLY"] = isset($arOptions["NO_PARAMETERS"]) && ($arOptions["NO_PARAMETERS"] === "Y");
625 $arOptions["~GET"] = array();
626 $onlyParams = explode(";", $arOptions["ONLY_PARAMETERS"]);
627 foreach ($onlyParams as $str)
628 {
629 $str = trim($str);
630 if ($str <> '')
631 {
632 $arOptions["~GET"][] = $str;
633 }
634 }
635
636 $arOptions["~IGNORED_PARAMETERS"] = array();
637 $ignoredParams = explode(";", $arOptions["IGNORED_PARAMETERS"]);
638 foreach ($ignoredParams as $str)
639 {
640 $str = trim($str);
641 if ($str <> '')
642 {
643 $arOptions["~IGNORED_PARAMETERS"][] = $str;
644 }
645 }
646
647 $arOptions["~EXCLUDE_PARAMS"] = array();
648 $excludeParams = explode(";", $arOptions["EXCLUDE_PARAMS"]);
649 foreach ($excludeParams as $str)
650 {
651 $str = trim($str);
652 if ($str <> '')
653 {
654 $arOptions["~EXCLUDE_PARAMS"][] = $str;
655 }
656 }
657
658 if (defined("BX_STARTED"))
659 {
660 $arOptions["COMPRESS"] = false;
661 $arOptions["STORE_PASSWORD"] = \COption::GetOptionString("main", "store_password", "Y");
662 $cookie_prefix = \COption::GetOptionString('main', 'cookie_name', 'BITRIX_SM');
663 $arOptions["COOKIE_LOGIN"] = $cookie_prefix.'_LOGIN';
664 $arOptions["COOKIE_PASS"] = $cookie_prefix.'_UIDH';
665 $arOptions["COOKIE_NCC"] = $cookie_prefix.'_NCC';
666 $arOptions["COOKIE_CC"] = $cookie_prefix.'_CC';
667 $arOptions["COOKIE_PK"] = $cookie_prefix.'_PK';
668 }
669 }
670
675 public static function getCacheFileSize()
676 {
677 $result = false;
678 $fileName = self::getSizeFilePath();
679 if (file_exists($fileName) && ($contents = file_get_contents($fileName)) !== false)
680 {
681 $result = doubleval($contents);
682 }
683
684 return $result;
685 }
686
687 public static function updateCacheFileSize($bytes = 0.0)
688 {
689 $options = self::getOptions();
690 if ($options["WRITE_STATISTIC"] === "N")
691 {
692 return;
693 }
694
695 $fileName = self::getSizeFilePath();
696 if (($handle = @fopen($fileName, "c+")) === false)
697 {
698 return;
699 }
700
701 if (@flock($handle, LOCK_EX))
702 {
703 $cacheSize = $bytes === false ? 0 : doubleval(fgets($handle)) + doubleval($bytes);
704 $cacheSize = $cacheSize > 0 ? $cacheSize : 0;
705
706 fseek($handle, 0);
707 ftruncate($handle, 0);
708 fwrite($handle, $cacheSize);
709 flock($handle, LOCK_UN);
710 }
711
712 fclose($handle);
713 }
714
721 public static function readStatistic()
722 {
723 $result = false;
724 $fileName = self::getEnabledFilePath();
725 if (file_exists($fileName) && ($contents = file_get_contents($fileName)) !== false)
726 {
727 $fileValues = explode(",", $contents);
728 $result = array(
729 "HITS" => intval($fileValues[0]),
730 "MISSES" => intval($fileValues[1]),
731 "QUOTA" => intval($fileValues[2]),
732 "POSTS" => intval($fileValues[3]),
733 "FILE_SIZE" => doubleval($fileValues[4]),
734 );
735 }
736
737 return $result;
738 }
739
752 public static function writeStatistic($hits = 0, $writings = 0, $quota = 0, $posts = 0, $files = 0.0)
753 {
754 $options = self::getOptions();
755 if ($options["WRITE_STATISTIC"] === "N")
756 {
757 return;
758 }
759
760 $fileName = self::getEnabledFilePath();
761 if (!file_exists($fileName) || ($fp = @fopen($fileName, "r+")) === false)
762 {
763 return;
764 }
765
766 if (@flock($fp, LOCK_EX))
767 {
768 $fileValues = explode(",", fgets($fp));
769 $cacheSize = (isset($fileValues[4]) ? doubleval($fileValues[4]) + doubleval($files) : doubleval($files));
770 $newFileValues = array(
771 $hits === false ? 0 : (isset($fileValues[0]) ? intval($fileValues[0]) + $hits : $hits),
772 $writings === false ? 0 : (isset($fileValues[1]) ? intval($fileValues[1]) + $writings : $writings),
773 $quota === false ? 0 : (isset($fileValues[2]) ? intval($fileValues[2]) + $quota : $quota),
774 $posts === false ? 0 : (isset($fileValues[3]) ? intval($fileValues[3]) + $posts : $posts),
775 $files === false ? 0 : ($cacheSize > 0 ? $cacheSize : 0),
776 );
777
778 fseek($fp, 0);
779 ftruncate($fp, 0);
780 fwrite($fp, implode(",", $newFileValues));
781 flock($fp, LOCK_UN);
782 }
783
784 fclose($fp);
785 }
786
795 public static function checkQuota($requiredFreeSpace = 0)
796 {
797 $compositeOptions = self::getOptions();
798 $cacheQuota = doubleval($compositeOptions["~FILE_QUOTA"]);
799
800 $cacheSize = self::getCacheFileSize();
801 $cacheSize = $cacheSize !== false ? $cacheSize : 0.0;
802
803 return ($cacheSize + doubleval($requiredFreeSpace)) < $cacheQuota;
804 }
805
811 public static function updateQuota($bytes)
812 {
813 if ($bytes == 0.0)
814 {
815 return;
816 }
817
819 }
820
821 //This method exists because of SiteUpdate features.
822 //When you reinstall updates (main 17.1.0 with previous ones).
823 public static function __callStatic($name, $arguments)
824 {
825 if (mb_strtoupper($name) === mb_strtoupper("OnUserLogin"))
826 {
827 \Bitrix\Main\Composite\Engine::onUserLogin();
828 }
829 elseif (mb_strtoupper($name) === mb_strtoupper("OnUserLogout"))
830 {
831 \Bitrix\Main\Composite\Engine::onUserLogout();
832 }
833 }
834
839 public static function getDomainName($url)
840 {
841 $url = filter_var($url, FILTER_SANITIZE_URL);
842 $url = trim($url, " \t\n\r\0\x0B/\\");
843 $components = parse_url($url);
844 if (isset($components["host"]) && !empty($components["host"]))
845 {
846 return $components["host"];
847 }
848 elseif (isset($components["path"]) && !empty($components["path"]))
849 {
850 return $components["path"];
851 }
852 else
853 {
854 return $url;
855 }
856 }
857
858 //region Deprecated Methods
859
866 public static function setEnabled($status, $setDefaults = true)
867 {
868 if ($status)
869 {
870 Engine::install($setDefaults);
871 }
872 else
873 {
875 }
876 }
877
884 public static function cleanAll()
885 {
886 $bytes = Data\FileStorage::deleteRecursive("/");
887
888 if (class_exists("cdiskquota"))
889 {
890 \CDiskQuota::updateDiskQuota("file", $bytes, "delete");
891 }
892
893 self::updateQuota(-$bytes);
894 }
895
896 //endregion
897}
898
899if (!class_exists("CHTMLPagesCache", false))
900{
901 class_alias("Bitrix\\Main\\Composite\\Helper", "CHTMLPagesCache");
902}
static install($setDefaults=true)
Definition engine.php:1263
static setEnabled($status, $setDefaults=true)
Definition helper.php:866
static removeIgnoredParams($queryString)
Definition helper.php:318
static updateCacheFileSize($bytes=0.0)
Definition helper.php:687
static setUserPrivateKey($prefix, $expire=0)
Definition helper.php:117
static makeDirPath($path)
Definition helper.php:466
static __callStatic($name, $arguments)
Definition helper.php:823
static convertUriToPath($uri, $host=null, $privateKey=null)
Definition helper.php:287
static getHttpHost($host=null)
Definition helper.php:41
static getRealPrivateKey($privateKey=null, $postfix=null)
Definition helper.php:92
static checkQuota($requiredFreeSpace=0)
Definition helper.php:795
static updateQuota($bytes)
Definition helper.php:811
static setOptions($arOptions=array())
Definition helper.php:392
static getSpaPostfixByUri($requestUri)
Definition helper.php:62
static escapePHPString($str)
Definition helper.php:493
static compileOptions(&$arOptions)
Definition helper.php:581
static writeStatistic($hits=0, $writings=0, $quota=0, $posts=0, $files=0.0)
Definition helper.php:752
$GLOBALS['____1444769544']
Definition license.php:1