Bearsampp 2026.7.28
Loading...
Searching...
No Matches
class.path.php
Go to the documentation of this file.
1<?php
2/*
3 *
4 * * Copyright (c) 2022-2025 Bearsampp
5 * * License: GNU General Public License version 3 or later; see LICENSE.txt
6 * * Website: https://bearsampp.com
7 * * Github: https://github.com/Bearsampp
8 *
9 */
10
24class Path
25{
32 public static function getModuleRootPath($module)
33 {
34 return $module->rootPath;
35 }
36
43 public static function getModuleCurrentPath($module)
44 {
45 return $module->currentPath;
46 }
47
54 public static function getModuleSymlinkPath($module)
55 {
56 return $module->symlinkPath;
57 }
58
63 private static $pathFormatCache = [];
64
69 private static $rootPath;
70
75 private static $corePath;
76
84 public static function init($rootPath, $corePath)
85 {
86 self::$rootPath = str_replace('\\', '/', rtrim($rootPath, '/\\'));
87 self::$corePath = str_replace('\\', '/', rtrim($corePath, '/\\'));
88 }
89
94 private static $pathFormatCacheMaxSize = 500;
95
100 private static $pathFormatStats = [
101 'unix_hits' => 0,
102 'unix_misses' => 0,
103 'windows_hits' => 0,
104 'windows_misses' => 0,
105 ];
106
118 public static function formatWindowsPath($path)
119 {
120 if (empty($path)) {
121 return $path;
122 }
123
124 $cacheKey = 'w_' . $path;
125 if (isset(self::$pathFormatCache[$cacheKey])) {
126 self::$pathFormatStats['windows_hits']++;
127 return self::$pathFormatCache[$cacheKey];
128 }
129
130 self::$pathFormatStats['windows_misses']++;
131
132 $result = str_replace('/', '\\', $path);
133
134 if (count(self::$pathFormatCache) < self::$pathFormatCacheMaxSize) {
135 self::$pathFormatCache[$cacheKey] = $result;
136 } else {
137 $removeCount = (int)(self::$pathFormatCacheMaxSize * 0.1);
138 self::$pathFormatCache = array_slice(self::$pathFormatCache, $removeCount, null, true);
139 self::$pathFormatCache[$cacheKey] = $result;
140 }
141
142 return $result;
143 }
144
156 public static function formatUnixPath($path)
157 {
158 if (empty($path)) {
159 return $path;
160 }
161
162 $cacheKey = 'u_' . $path;
163 if (isset(self::$pathFormatCache[$cacheKey])) {
164 self::$pathFormatStats['unix_hits']++;
165 return self::$pathFormatCache[$cacheKey];
166 }
167
168 self::$pathFormatStats['unix_misses']++;
169
170 $result = str_replace('\\', '/', $path);
171
172 if (count(self::$pathFormatCache) < self::$pathFormatCacheMaxSize) {
173 self::$pathFormatCache[$cacheKey] = $result;
174 } else {
175 $removeCount = (int)(self::$pathFormatCacheMaxSize * 0.1);
176 self::$pathFormatCache = array_slice(self::$pathFormatCache, $removeCount, null, true);
177 self::$pathFormatCache[$cacheKey] = $result;
178 }
179
180 return $result;
181 }
182
189 public static function getPathFormatStats()
190 {
191 return self::$pathFormatStats;
192 }
193
201 public static function changePath($filesToScan, $rootPath = null)
202 {
204
205 $result = array(
206 'countChangedOcc' => 0,
207 'countChangedFiles' => 0
208 );
209
211 $unixOldPath = Path::formatUnixPath($bearsamppCore->getLastPathContent());
212 $windowsOldPath = Path::formatWindowsPath($bearsamppCore->getLastPathContent());
213 $unixCurrentPath = Path::formatUnixPath($rootPath);
214 $windowsCurrentPath = Path::formatWindowsPath($rootPath);
215
216 foreach ($filesToScan as $fileToScan) {
217 $tmpCountChangedOcc = 0;
218 $fileContentOr = file_get_contents($fileToScan);
219
220 if ($fileContentOr === false) {
221 Log::error("changePath(): Failed to read file: " . $fileToScan);
222 continue;
223 }
224
225 $fileContent = $fileContentOr;
226
227 // old path
228 if (stripos($fileContent, $unixOldPath) !== false) {
229 $fileContent = str_ireplace($unixOldPath, $unixCurrentPath, $fileContent, $countChanged);
230 $tmpCountChangedOcc += $countChanged;
231 }
232 if (stripos($fileContent, $windowsOldPath) !== false) {
233 $fileContent = str_ireplace($windowsOldPath, $windowsCurrentPath, $fileContent, $countChanged);
234 $tmpCountChangedOcc += $countChanged;
235 }
236
237 // placeholders
238 if (strpos($fileContent, Core::PATH_LIN_PLACEHOLDER) !== false) {
239 $fileContent = str_replace(Core::PATH_LIN_PLACEHOLDER, $unixCurrentPath, $fileContent, $countChanged);
240 $tmpCountChangedOcc += $countChanged;
241 }
242 if (strpos($fileContent, Core::PATH_WIN_PLACEHOLDER) !== false) {
243 $fileContent = str_replace(Core::PATH_WIN_PLACEHOLDER, $windowsCurrentPath, $fileContent, $countChanged);
244 $tmpCountChangedOcc += $countChanged;
245 }
246
247 if ($fileContentOr != $fileContent) {
248 if (file_put_contents($fileToScan, $fileContent) !== false) {
249 $result['countChangedOcc'] += $tmpCountChangedOcc;
250 $result['countChangedFiles'] += 1;
251 } else {
252 Log::error("changePath(): Failed to write to file: " . $fileToScan);
253 }
254 }
255 }
256
257 Log::debug('changePath() completed: ' . $result['countChangedFiles'] . ' files changed, ' . $result['countChangedOcc'] . ' total occurrences');
258
259 return $result;
260 }
261
268 public static function clearPathFormatCache()
269 {
270 self::$pathFormatCache = [];
271 self::$pathFormatStats = [
272 'unix_hits' => 0,
273 'unix_misses' => 0,
274 'windows_hits' => 0,
275 'windows_misses' => 0,
276 ];
277 }
278
284 public static function getPathFormatCacheSize()
285 {
286 return count(self::$pathFormatCache);
287 }
288
295 public static function aetrayPath($path)
296 {
298 $path = str_replace($rootPath, '', $path);
299 $path = ltrim(self::formatUnixPath($path), '/');
300 return '%AeTrayMenuPath%' . $path;
301 }
302
309 public static function getRootPath($aetrayPath = false)
310 {
311 return $aetrayPath ? self::aetrayPath(self::$rootPath) : self::$rootPath;
312 }
313
320 public static function getAjaxPath($aetrayPath = false)
321 {
322 return self::getHomepagePath($aetrayPath) . '/ajax';
323 }
324
331 public static function getAliasPath($aetrayPath = false)
332 {
333 return self::getRootPath($aetrayPath) . '/alias';
334 }
335
342 public static function getAppsPath($aetrayPath = false)
343 {
344 return self::getRootPath($aetrayPath) . '/apps';
345 }
346
353 public static function getBatchLogFilePath($aetrayPath = false)
354 {
355 return self::getLogsPath($aetrayPath) . '/bearsampp-batch.log';
356 }
357
364 public static function getBinPath($aetrayPath = false)
365 {
366 return self::getRootPath($aetrayPath) . '/bin';
367 }
368
375 public static function getConfigFilePath($aetrayPath = false)
376 {
377 return self::getRootPath($aetrayPath) . '/bearsampp.conf';
378 }
379
386 public static function getCorePath($aetrayPath = false)
387 {
388 return $aetrayPath ? self::aetrayPath(self::$corePath) : self::$corePath;
389 }
390
396 public static function getProcessName()
397 {
398 return 'bearsampp';
399 }
400
407 public static function getLocalUrl($request = null)
408 {
409 global $bearsamppBins;
410 $isHttps = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
411 $scheme = $isHttps ? 'https://' : 'http://';
412 $host = (isset($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : 'localhost';
413
414 $port = 80;
415 if (isset($bearsamppBins) && $bearsamppBins->getApache() !== null) {
416 $port = $isHttps ? $bearsamppBins->getApache()->getSslPort() : $bearsamppBins->getApache()->getPort();
417 }
418
419 $portSuffix = '';
420 if ($isHttps) {
421 if ($port != 443) {
422 $portSuffix = ':' . $port;
423 }
424 } else {
425 if ($port != 80) {
426 $portSuffix = ':' . $port;
427 }
428 }
429
430 return $scheme . $host . $portSuffix . (!empty($request) ? '/' . $request : '');
431 }
432
439 public static function getErrorLogFilePath($aetrayPath = false)
440 {
441 return self::getLogsPath($aetrayPath) . '/bearsampp-error.log';
442 }
443
450 public static function getExeFilePath($aetrayPath = false)
451 {
452 return self::getRootPath($aetrayPath) . '/bearsampp.exe';
453 }
454
461 public static function getHomepageFilePath($aetrayPath = false)
462 {
463 return self::getWwwPath($aetrayPath) . '/index.php';
464 }
465
472 public static function getHomepageLogFilePath($aetrayPath = false)
473 {
474 return self::getLogsPath($aetrayPath) . '/bearsampp-homepage.log';
475 }
476
483 public static function getHomepagePath($aetrayPath = false)
484 {
485 return self::getResourcesPath($aetrayPath) . '/homepage';
486 }
487
494 public static function getHostsEditorPath($aetrayPath = false)
495 {
496 return self::getLibsPath($aetrayPath) . '/hostseditor';
497 }
498
505 public static function getHostsEditorExe($aetrayPath = false)
506 {
507 return self::getHostsEditorPath($aetrayPath) . '/' . Core::HOSTSEDITOR_EXE;
508 }
509
516 public static function getIconsPath($aetrayPath = false)
517 {
518 return self::getImagesPath($aetrayPath) . '/icons';
519 }
520
527 public static function getImagesPath($aetrayPath = false)
528 {
529 return self::getHomepagePath($aetrayPath) . '/img';
530 }
531
538 public static function getIniFilePath($aetrayPath = false)
539 {
540 return self::getRootPath($aetrayPath) . '/bearsampp.ini';
541 }
542
549 public static function getisRootFilePath($aetrayPath = false)
550 {
551 return self::getCorePath($aetrayPath) . '/' . Core::isRoot_FILE;
552 }
553
560 public static function getLangsPath($aetrayPath = false)
561 {
562 return self::getCorePath($aetrayPath) . '/langs';
563 }
564
571 public static function getLastPath($aetrayPath = false)
572 {
573 return self::getResourcesPath($aetrayPath) . '/' . Core::LAST_PATH;
574 }
575
582 public static function getLibsPath($aetrayPath = false)
583 {
584 return self::getCorePath($aetrayPath) . '/libs';
585 }
586
593 public static function getLnPath($aetrayPath = false)
594 {
595 return self::getLibsPath($aetrayPath) . '/ln';
596 }
597
604 public static function getLnExe($aetrayPath = false)
605 {
606 return self::getLnPath($aetrayPath) . '/' . Core::LN_EXE;
607 }
608
615 public static function getLogFilePath($aetrayPath = false)
616 {
617 return self::getLogsPath($aetrayPath) . '/bearsampp.log';
618 }
619
626 public static function getLogsPath($aetrayPath = false)
627 {
628 return self::getRootPath($aetrayPath) . '/logs';
629 }
630
637 public static function getNssmPath($aetrayPath = false)
638 {
639 return self::getLibsPath($aetrayPath) . '/nssm';
640 }
641
648 public static function getNssmExe($aetrayPath = false)
649 {
650 return self::getNssmPath($aetrayPath) . '/' . Core::NSSM_EXE;
651 }
652
658 public static function getNssmEnvPaths()
659 {
660 global $bearsamppBins, $bearsamppTools;
661
662 $paths = '';
663
664 // Add paths for enabled bins
665 if (isset($bearsamppBins)) {
666 if ($bearsamppBins->getApache() && $bearsamppBins->getApache()->isEnable()) {
667 $paths .= self::getModuleSymlinkPath($bearsamppBins->getApache()) . '/bin;';
668 }
669 if ($bearsamppBins->getPhp() && $bearsamppBins->getPhp()->isEnable()) {
670 $paths .= self::getModuleSymlinkPath($bearsamppBins->getPhp()) . ';';
671 $paths .= self::getModuleSymlinkPath($bearsamppBins->getPhp()) . '/pear;';
672 $paths .= self::getModuleSymlinkPath($bearsamppBins->getPhp()) . '/deps;';
673 $paths .= self::getModuleSymlinkPath($bearsamppBins->getPhp()) . '/imagick;';
674 }
675 if ($bearsamppBins->getNodejs() && $bearsamppBins->getNodejs()->isEnable()) {
676 $paths .= self::getModuleSymlinkPath($bearsamppBins->getNodejs()) . ';';
677 }
678 if ($bearsamppBins->getMysql() && $bearsamppBins->getMysql()->isEnable()) {
679 $paths .= self::getModuleSymlinkPath($bearsamppBins->getMysql()) . '/bin;';
680 }
681 if ($bearsamppBins->getMariadb() && $bearsamppBins->getMariadb()->isEnable()) {
682 $paths .= self::getModuleSymlinkPath($bearsamppBins->getMariadb()) . '/bin;';
683 }
684 if ($bearsamppBins->getPostgresql() && $bearsamppBins->getPostgresql()->isEnable()) {
685 $paths .= self::getModuleSymlinkPath($bearsamppBins->getPostgresql()) . '/bin;';
686 }
687 }
688
689 // Add paths for enabled tools
690 if (isset($bearsamppTools)) {
691 if ($bearsamppTools->getComposer() && $bearsamppTools->getComposer()->isEnable()) {
692 $paths .= self::getModuleSymlinkPath($bearsamppTools->getComposer()) . ';';
693 $paths .= self::getModuleSymlinkPath($bearsamppTools->getComposer()) . '/vendor/bin;';
694 }
695 if ($bearsamppTools->getGhostscript() && $bearsamppTools->getGhostscript()->isEnable()) {
696 $paths .= self::getModuleSymlinkPath($bearsamppTools->getGhostscript()) . '/bin;';
697 }
698 if ($bearsamppTools->getGit() && $bearsamppTools->getGit()->isEnable()) {
699 $paths .= self::getModuleSymlinkPath($bearsamppTools->getGit()) . '/bin;';
700 }
701 if ($bearsamppTools->getNgrok() && $bearsamppTools->getNgrok()->isEnable()) {
702 $paths .= self::getModuleSymlinkPath($bearsamppTools->getNgrok()) . ';';
703 }
704 if ($bearsamppTools->getPerl() && $bearsamppTools->getPerl()->isEnable()) {
705 $paths .= self::getModuleSymlinkPath($bearsamppTools->getPerl()) . '/perl/site/bin;';
706 $paths .= self::getModuleSymlinkPath($bearsamppTools->getPerl()) . '/perl/bin;';
707 $paths .= self::getModuleSymlinkPath($bearsamppTools->getPerl()) . '/c/bin;';
708 }
709 if ($bearsamppTools->getPython() && $bearsamppTools->getPython()->isEnable()) {
710 $paths .= self::getModuleSymlinkPath($bearsamppTools->getPython()) . '/bin;';
711 }
712 if ($bearsamppTools->getRuby() && $bearsamppTools->getRuby()->isEnable()) {
713 $paths .= self::getModuleSymlinkPath($bearsamppTools->getRuby()) . '/bin;';
714 }
715 }
716
717 return self::formatWindowsPath($paths);
718 }
719
726 public static function getNssmLogFilePath($aetrayPath = false)
727 {
728 return self::getLogsPath($aetrayPath) . '/bearsampp-nssm.log';
729 }
730
737 public static function getOpenSslConf($aetrayPath = false)
738 {
739 return self::getOpenSslPath($aetrayPath) . '/' . Core::OPENSSL_CONF;
740 }
741
748 public static function getOpenSslExe($aetrayPath = false)
749 {
750 return self::getOpenSslPath($aetrayPath) . '/' . Core::OPENSSL_EXE;
751 }
752
759 public static function getOpenSslPath($aetrayPath = false)
760 {
761 return self::getLibsPath($aetrayPath) . '/openssl';
762 }
763
770 public static function getPhpPath($aetrayPath = false)
771 {
772 return self::getLibsPath($aetrayPath) . '/php';
773 }
774
781 public static function getPhpExe($aetrayPath = false)
782 {
783 return self::getPhpPath($aetrayPath) . '/' . Core::PHP_EXE;
784 }
785
791 public static function getPowerShellPath()
792 {
793 if (is_dir('C:\Windows\System32\WindowsPowerShell')) {
794 return Util::findFile('C:\Windows\System32\WindowsPowerShell', 'powershell.exe');
795 }
796
797 return false;
798 }
799
806 public static function getPwgenPath($aetrayPath = false)
807 {
808 return self::getLibsPath($aetrayPath) . '/pwgen';
809 }
810
817 public static function getPwgenExe($aetrayPath = false)
818 {
819 return self::getPwgenPath($aetrayPath) . '/' . Core::PWGEN_EXE;
820 }
821
828 public static function getRegistryLogFilePath($aetrayPath = false)
829 {
830 return self::getLogsPath($aetrayPath) . '/bearsampp-registry.log';
831 }
832
838 public static function getStartupLnkPath()
839 {
840 $startupPath = Win32Native::getSpecialFolderPath('Startup');
841 return $startupPath ? $startupPath . '/' . APP_TITLE . '.lnk' : false;
842 }
843
850 public static function getResourcesPath($aetrayPath = false)
851 {
852 return self::getCorePath($aetrayPath) . '/resources';
853 }
854
861 public static function getScript($type)
862 {
863 return self::getScriptsPath() . '/' . $type;
864 }
865
872 public static function getScriptsPath($aetrayPath = false)
873 {
874 return self::getCorePath($aetrayPath) . '/scripts';
875 }
876
883 public static function getServicesLogFilePath($aetrayPath = false)
884 {
885 return self::getLogsPath($aetrayPath) . '/bearsampp-services.log';
886 }
887
894 public static function getSetEnvPath($aetrayPath = false)
895 {
896 return self::getLibsPath($aetrayPath) . '/setenv';
897 }
898
905 public static function getSetEnvExe($aetrayPath = false)
906 {
907 return self::getSetEnvPath($aetrayPath) . '/' . Core::SETENV_EXE;
908 }
909
916 public static function getSslConfPath($aetrayPath = false)
917 {
918 return self::getSslPath($aetrayPath) . '/openssl.cnf';
919 }
920
927 public static function getSslPath($aetrayPath = false)
928 {
929 return self::getRootPath($aetrayPath) . '/ssl';
930 }
931
938 public static function getStartupLogFilePath($aetrayPath = false)
939 {
940 return self::getLogsPath($aetrayPath) . '/bearsampp-startup.log';
941 }
942
949 public static function getTmpPath($aetrayPath = false)
950 {
951 return self::getCorePath($aetrayPath) . '/tmp';
952 }
953
960 public static function getToolsPath($aetrayPath = false)
961 {
962 return self::getRootPath($aetrayPath) . '/tools';
963 }
964
971 public static function getMkcertPath($aetrayPath = false)
972 {
973 return self::getLibsPath($aetrayPath) . '/mkcert';
974 }
975
982 public static function getMkcertExe($aetrayPath = false)
983 {
984 return self::getMkcertPath($aetrayPath) . '/mkcert.exe';
985 }
986
992 public static function getMkcertRootCaName()
993 {
994 return 'rootCA.pem';
995 }
996
1003 public static function getVhostsPath($aetrayPath = false)
1004 {
1005 return self::getRootPath($aetrayPath) . '/vhosts';
1006 }
1007
1013 public static function getWebIconsPath()
1014 {
1015 return self::getWebImagesPath() . '/icons';
1016 }
1017
1023 public static function getWebImagesPath()
1024 {
1025 return self::getWebResourcesPath() . '/img';
1026 }
1027
1033 public static function getWebResourcesPath()
1034 {
1035 return rtrim(md5(APP_TITLE), '/');
1036 }
1037
1043 public static function getWebResourcesUrl()
1044 {
1045 global $bearsamppBins;
1046 $request = self::getWebResourcesPath();
1047 $isHttps = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
1048 $scheme = $isHttps ? 'https://' : 'http://';
1049 $host = (isset($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : 'localhost';
1050
1051 $port = 80;
1052 if (isset($bearsamppBins) && $bearsamppBins->getApache() !== null) {
1053 $port = $isHttps ? $bearsamppBins->getApache()->getSslPort() : $bearsamppBins->getApache()->getPort();
1054 }
1055
1056 $portSuffix = '';
1057 if ($isHttps) {
1058 if ($port != 443) {
1059 $portSuffix = ':' . $port;
1060 }
1061 } else {
1062 if ($port != 80) {
1063 $portSuffix = ':' . $port;
1064 }
1065 }
1066
1067 return $scheme . $host . $portSuffix . (!empty($request) ? '/' . $request : '');
1068 }
1069
1076 public static function getWinbinderLogFilePath($aetrayPath = false)
1077 {
1078 return self::getLogsPath($aetrayPath) . '/bearsampp-winbinder.log';
1079 }
1080
1087 public static function getWwwPath($aetrayPath = false)
1088 {
1089 return self::getRootPath($aetrayPath) . '/www';
1090 }
1091}
$result
global $bearsamppBins
global $bearsamppRoot
$port
global $bearsamppCore
const OPENSSL_CONF
const PHP_EXE
const PWGEN_EXE
const isRoot_FILE
const PATH_LIN_PLACEHOLDER
const NSSM_EXE
const SETENV_EXE
const LN_EXE
const PATH_WIN_PLACEHOLDER
const HOSTSEDITOR_EXE
const OPENSSL_EXE
const LAST_PATH
static debug($data, $file=null)
static error($data, $file=null)
static getHomepageFilePath($aetrayPath=false)
static getNssmPath($aetrayPath=false)
static getScriptsPath($aetrayPath=false)
static getExeFilePath($aetrayPath=false)
static getBatchLogFilePath($aetrayPath=false)
static getPathFormatCacheSize()
static getSslConfPath($aetrayPath=false)
static clearPathFormatCache()
static getHostsEditorExe($aetrayPath=false)
static getAjaxPath($aetrayPath=false)
static $rootPath
static getCorePath($aetrayPath=false)
static getWebResourcesPath()
static getHomepagePath($aetrayPath=false)
static getAliasPath($aetrayPath=false)
static getPwgenPath($aetrayPath=false)
static getSslPath($aetrayPath=false)
static getRootPath($aetrayPath=false)
static getLogFilePath($aetrayPath=false)
static getStartupLogFilePath($aetrayPath=false)
static getIconsPath($aetrayPath=false)
static getWebImagesPath()
static init($rootPath, $corePath)
static getProcessName()
static aetrayPath($path)
static getServicesLogFilePath($aetrayPath=false)
static getToolsPath($aetrayPath=false)
static getSetEnvExe($aetrayPath=false)
static getOpenSslExe($aetrayPath=false)
static getLogsPath($aetrayPath=false)
static getResourcesPath($aetrayPath=false)
static getConfigFilePath($aetrayPath=false)
static getWebResourcesUrl()
static getMkcertExe($aetrayPath=false)
static getLocalUrl($request=null)
static getWwwPath($aetrayPath=false)
static getNssmEnvPaths()
static $corePath
static formatWindowsPath($path)
static changePath($filesToScan, $rootPath=null)
static getVhostsPath($aetrayPath=false)
static getOpenSslPath($aetrayPath=false)
static getMkcertPath($aetrayPath=false)
static getNssmLogFilePath($aetrayPath=false)
static formatUnixPath($path)
static $pathFormatCacheMaxSize
static getPhpExe($aetrayPath=false)
static getRegistryLogFilePath($aetrayPath=false)
static getHostsEditorPath($aetrayPath=false)
static $pathFormatStats
static getModuleSymlinkPath($module)
static getPathFormatStats()
static getScript($type)
static getWebIconsPath()
static getisRootFilePath($aetrayPath=false)
static getOpenSslConf($aetrayPath=false)
static getBinPath($aetrayPath=false)
static getPwgenExe($aetrayPath=false)
static getTmpPath($aetrayPath=false)
static getLibsPath($aetrayPath=false)
static getLastPath($aetrayPath=false)
static getModuleCurrentPath($module)
static getHomepageLogFilePath($aetrayPath=false)
static getLnExe($aetrayPath=false)
static getLangsPath($aetrayPath=false)
static getSetEnvPath($aetrayPath=false)
static getModuleRootPath($module)
static getStartupLnkPath()
static getNssmExe($aetrayPath=false)
static getPhpPath($aetrayPath=false)
static getErrorLogFilePath($aetrayPath=false)
static getImagesPath($aetrayPath=false)
static getPowerShellPath()
static $pathFormatCache
static getAppsPath($aetrayPath=false)
static getMkcertRootCaName()
static getWinbinderLogFilePath($aetrayPath=false)
static getIniFilePath($aetrayPath=false)
static getLnPath($aetrayPath=false)
static findFile($startPath, $findFile)
static getSpecialFolderPath($folderName)
const APP_TITLE
Definition root.php:13