perf.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651
  1. <?php
  2. /* Copyright (C) 2013-2019 Laurent Destailleur <eldy@users.sourceforge.net>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  16. */
  17. /**
  18. * \file htdocs/admin/system/perf.php
  19. * \brief Page to show Performance information
  20. */
  21. // Load Dolibarr environment
  22. require '../../main.inc.php';
  23. require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
  24. require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
  25. require_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
  26. require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
  27. // Load translation files required by the page
  28. $langs->loadLangs(array("install", "other", "admin", "products"));
  29. if (!$user->admin) {
  30. accessforbidden();
  31. }
  32. if (GETPOST('action', 'aZ09') == 'donothing') {
  33. exit;
  34. }
  35. /*
  36. * View
  37. */
  38. $form = new Form($db);
  39. $nowstring = dol_print_date(dol_now(), 'dayhourlog');
  40. llxHeader();
  41. print load_fiche_titre($langs->trans("PerfDolibarr"), '', 'title_setup');
  42. print '<span class="opacitymedium">'.$langs->trans("YouMayFindPerfAdviceHere", 'https://wiki.dolibarr.org/index.php/FAQ_Increase_Performance').'</span>';
  43. print ' &nbsp; &nbsp; ';
  44. print '<a href="'.$_SERVER["PHP_SELF"].'">';
  45. print img_picto($langs->trans("Reload"), 'refresh').' ';
  46. print $langs->trans("Reload");
  47. print '</a>';
  48. print '<br>';
  49. print '<br>';
  50. print '<hr>';
  51. // Recupere la version de PHP
  52. $phpversion = version_php();
  53. print "<br><strong>PHP</strong> - ".$langs->trans("Version").": ".$phpversion."<br>\n";
  54. // Recupere la version du serveur web
  55. print "<br><strong>Web server</strong> - ".$langs->trans("Version").": ".$_SERVER["SERVER_SOFTWARE"]."<br>\n";
  56. // XDebug
  57. print '<br>';
  58. print '<strong>'.$langs->trans("XDebug").'</strong>: ';
  59. $test = !function_exists('xdebug_is_enabled');
  60. if ($test) {
  61. print img_picto('', 'tick.png').' '.$langs->trans("NotInstalled").' <span class="opacitymedium">'.$langs->trans("NotSlowedDownByThis").'</span>';
  62. } else {
  63. print img_picto('', 'warning').' '.$langs->trans("ModuleActivated", $langs->transnoentities("XDebug"));
  64. print ' - '.$langs->trans("MoreInformation").' <a href="'.DOL_URL_ROOT.'/admin/system/xdebug.php">XDebug admin page</a>';
  65. }
  66. print '<br>';
  67. // Module log
  68. print '<br>';
  69. print '<strong>'.$langs->trans("Syslog").'</strong>: ';
  70. $test = !isModEnabled('syslog');
  71. if ($test) {
  72. print img_picto('', 'tick.png').' '.$langs->trans("NotInstalled").' <span class="opacitymedium">'.$langs->trans("NotSlowedDownByThis").'</span>';
  73. } else {
  74. if (getDolGlobalInt('SYSLOG_LEVEL') > LOG_NOTICE) {
  75. print img_picto('', 'warning').' '.$langs->trans("ModuleActivatedWithTooHighLogLevel", $langs->transnoentities("Syslog"));
  76. } else {
  77. print img_picto('', 'tick.png').' '.$langs->trans("ModuleSyslogActivatedButLevelNotTooVerbose", $langs->transnoentities("Syslog"), getDolGlobalInt('SYSLOG_LEVEL'));
  78. }
  79. //print ' '.$langs->trans("MoreInformation").' <a href="'.DOL_URL_ROOT.'/admin/system/xdebug.php'.'">XDebug admin page</a>';
  80. }
  81. print '<br>';
  82. // Module debugbar
  83. print '<br>';
  84. print '<strong>'.$langs->trans("DebugBar").'</strong>: ';
  85. $test = !isModEnabled('debugbar');
  86. if ($test) {
  87. print img_picto('', 'tick.png').' '.$langs->trans("NotInstalled").' <span class="opacitymedium">'.$langs->trans("NotSlowedDownByThis").'</span>';
  88. } else {
  89. print img_picto('', 'warning').' '.$langs->trans("ModuleActivated", $langs->transnoentities("DebugBar"));
  90. //print ' '.$langs->trans("MoreInformation").' <a href="'.DOL_URL_ROOT.'/admin/system/xdebug.php'.'">XDebug admin page</a>';
  91. }
  92. print '<br>';
  93. // Applicative cache
  94. print '<br>';
  95. print '<strong>'.$langs->trans("ApplicativeCache").'</strong>: ';
  96. $test = isModEnabled('memcached');
  97. if ($test) {
  98. if (!empty($conf->global->MEMCACHED_SERVER)) {
  99. print $langs->trans("MemcachedAvailableAndSetup");
  100. print ' '.$langs->trans("MoreInformation").' <a href="'.dol_buildpath('/memcached/admin/memcached.php', 1).'">Memcached module admin page</a>';
  101. } else {
  102. print $langs->trans("MemcachedModuleAvailableButNotSetup");
  103. print ' <a href="'.dol_buildpath('/memcached/admin/memcached.php', 1).'">Memcached module admin page</a>';
  104. }
  105. } else {
  106. print $langs->trans("MemcachedNotAvailable");
  107. }
  108. print '</br>';
  109. // OPCode cache
  110. print '<br>';
  111. print '<strong>'.$langs->trans("OPCodeCache").'</strong>: ';
  112. $foundcache = 0;
  113. $test = function_exists('xcache_info');
  114. if (!$foundcache && $test) {
  115. $foundcache++;
  116. print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "XCache");
  117. print ' '.$langs->trans("MoreInformation").' <a href="'.DOL_URL_ROOT.'/admin/system/xcache.php">Xcache admin page</a>';
  118. }
  119. $test = function_exists('eaccelerator_info');
  120. if (!$foundcache && $test) {
  121. $foundcache++;
  122. print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "Eaccelerator");
  123. }
  124. $test = function_exists('opcache_get_status');
  125. if (!$foundcache && $test) {
  126. $foundcache++;
  127. print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "ZendOPCache"); // Should be by default starting with PHP 5.5
  128. //$tmp=opcache_get_status();
  129. //var_dump($tmp);
  130. }
  131. $test = function_exists('apc_cache_info');
  132. if (!$foundcache && $test) {
  133. //var_dump(apc_cache_info());
  134. if (ini_get('apc.enabled')) {
  135. $foundcache++;
  136. print img_picto('', 'tick.png').' '.$langs->trans("APCInstalled");
  137. } else {
  138. print img_picto('', 'warning').' '.$langs->trans("APCCacheInstalledButDisabled");
  139. }
  140. }
  141. if (!$foundcache) {
  142. print $langs->trans("NoOPCodeCacheFound");
  143. }
  144. print '<br>';
  145. // Use of preload bootstrap
  146. if (ini_get('opcache.preload')) {
  147. print '<br>';
  148. print '<strong>'.$langs->trans("PreloadOPCode").'</strong>: ';
  149. print ini_get('opcache.preload');
  150. } else {
  151. print '<br>';
  152. print '<strong>'.$langs->trans("PreloadOPCode").'</strong>: ';
  153. print $langs->trans("No");
  154. }
  155. print '<br>';
  156. // HTTPCacheStaticResources
  157. print '<script type="text/javascript">
  158. jQuery(document).ready(function() {
  159. var getphpurl;
  160. var cachephpstring;
  161. var compphpstring;
  162. getphpurl = $.ajax({
  163. type: "GET",
  164. data: { token: \''.currentToken().'\' },
  165. url: \''.DOL_URL_ROOT.'/public/notice.php\',
  166. cache: false,
  167. /* async: false, */
  168. /* crossDomain: true,*/
  169. success: function () {
  170. cachephpstring=getphpurl.getResponseHeader(\'Cache-Control\');
  171. /* alert(\'php:\'+getphpurl.getAllResponseHeaders()); */
  172. /*alert(\'php:\'+cachephpstring);*/
  173. if (cachephpstring == null || cachephpstring.indexOf("no-cache") !== -1)
  174. {
  175. jQuery("#httpcachephpok").hide();
  176. jQuery("#httpcachephpko").show();
  177. }
  178. else
  179. {
  180. jQuery("#httpcachephpok").show();
  181. jQuery("#httpcachephpko").hide();
  182. }
  183. compphpstring=getphpurl.getResponseHeader(\'Content-Encoding\');
  184. /* alert(\'php:\'+getphpurl.getAllResponseHeaders()); */
  185. /*alert(\'php:\'+compphpstring);*/
  186. if (compphpstring == null || (compphpstring.indexOf("gzip") == -1 && compphpstring.indexOf("deflate") == -1 && compphpstring.indexOf("br") == -1))
  187. {
  188. jQuery("#httpcompphpok").hide();
  189. jQuery("#httpcompphpko").show();
  190. }
  191. else
  192. {
  193. jQuery("#httpcompphpok").show();
  194. jQuery("#httpcompphpko").hide();
  195. }
  196. }
  197. })
  198. var getcssurl;
  199. var cachecssstring;
  200. var compcssstring;
  201. getcssurl = $.ajax({
  202. type: "GET",
  203. data: { token: \'notrequired\' },
  204. url: \''.DOL_URL_ROOT.'/includes/jquery/css/base/jquery-ui.css\',
  205. cache: false,
  206. /* async: false, */
  207. /* crossDomain: true, */
  208. success: function () {
  209. cachecssstring=getcssurl.getResponseHeader(\'Cache-Control\');
  210. /* alert(\'css:\'+getcssurl.getAllResponseHeaders()); */
  211. /*alert(\'css:\'+cachecssstring);*/
  212. if (cachecssstring != null && cachecssstring.indexOf("no-cache") !== -1)
  213. {
  214. jQuery("#httpcachecssok").hide();
  215. jQuery("#httpcachecssko").show();
  216. }
  217. else
  218. {
  219. jQuery("#httpcachecssok").show();
  220. jQuery("#httpcachecssko").hide();
  221. }
  222. compcssstring=getcssurl.getResponseHeader(\'Content-Encoding\');
  223. /* alert(\'php:\'+getcssurl.getAllResponseHeaders()); */
  224. /*alert(\'php:\'+compcssstring);*/
  225. if (compcssstring == null || (compcssstring.indexOf("gzip") == -1 && compcssstring.indexOf("deflate") == -1 && compcssstring.indexOf("br") == -1))
  226. {
  227. jQuery("#httpcompcssok").hide();
  228. jQuery("#httpcompcssko").show();
  229. }
  230. else
  231. {
  232. jQuery("#httpcompcssok").show();
  233. jQuery("#httpcompcssko").hide();
  234. }
  235. }
  236. })
  237. var getcssphpurl;
  238. var cachecssphpstring;
  239. var compcssphpstring;
  240. getcssphpurl = $.ajax({
  241. type: "GET",
  242. data: { token: \''.currentToken().'\' },
  243. url: \''.DOL_URL_ROOT.'/theme/eldy/style.css.php\',
  244. cache: false,
  245. /* async: false, */
  246. /* crossDomain: true,*/
  247. success: function () {
  248. cachecssphpstring=getcssphpurl.getResponseHeader(\'Cache-Control\');
  249. /* alert(\'cssphp:\'+getcssphpurl.getAllResponseHeaders()); */
  250. /*alert(\'cssphp:\'+cachecssphpstring);*/
  251. if (cachecssphpstring != null && cachecssphpstring.indexOf("no-cache") !== -1)
  252. {
  253. jQuery("#httpcachecssphpok").hide();
  254. jQuery("#httpcachecssphpko").show();
  255. }
  256. else
  257. {
  258. jQuery("#httpcachecssphpok").show();
  259. jQuery("#httpcachecssphpko").hide();
  260. }
  261. compcssphpstring=getcssphpurl.getResponseHeader(\'Content-Encoding\');
  262. /* alert(\'php:\'+getcssphpurl.getAllResponseHeaders()); */
  263. /*alert(\'php:\'+compcssphpstring);*/
  264. if (compcssphpstring == null || (compcssphpstring.indexOf("gzip") == -1 && compcssphpstring.indexOf("deflate") == -1 && compcssphpstring.indexOf("br") == -1))
  265. {
  266. jQuery("#httpcompcssphpok").hide();
  267. jQuery("#httpcompcssphpko").show();
  268. }
  269. else
  270. {
  271. jQuery("#httpcompcssphpok").show();
  272. jQuery("#httpcompcssphpko").hide();
  273. }
  274. }
  275. })
  276. var getimgurl;
  277. var cacheimgstring;
  278. var compimgstring;
  279. getimgurl = $.ajax({
  280. type: "GET",
  281. data: { token: \'notrequired\' },
  282. url: \''.DOL_URL_ROOT.'/theme/eldy/img/help.png\',
  283. cache: false,
  284. /* async: false, */
  285. /* crossDomain: true,*/
  286. success: function () {
  287. cacheimgstring=getimgurl.getResponseHeader(\'Cache-Control\');
  288. /* alert(\'img:\'+getimgurl.getAllResponseHeaders()); */
  289. /*alert(\'img:\'+cacheimgstring);*/
  290. if (cacheimgstring != null && cacheimgstring.indexOf("no-cache") !== -1)
  291. {
  292. jQuery("#httpcacheimgok").hide();
  293. jQuery("#httpcacheimgko").show();
  294. }
  295. else
  296. {
  297. jQuery("#httpcacheimgok").show();
  298. jQuery("#httpcacheimgko").hide();
  299. }
  300. compimgstring=getimgurl.getResponseHeader(\'Content-Encoding\');
  301. /* alert(\'php:\'+getimgurl.getAllResponseHeaders()); */
  302. /*alert(\'php:\'+compimgstring);*/
  303. if (compimgstring == null || (compimgstring.indexOf("gzip") == -1 && compimgstring.indexOf("deflate") == -1 && compimgstring.indexOf("br") == -1))
  304. {
  305. jQuery("#httpcompimgok").hide();
  306. jQuery("#httpcompimgko").show();
  307. }
  308. else
  309. {
  310. jQuery("#httpcompimgok").show();
  311. jQuery("#httpcompimgko").hide();
  312. }
  313. }
  314. })
  315. var getjsurl;
  316. var cachejsstring;
  317. var compjsstring;
  318. getjsurl = $.ajax({
  319. type: "GET",
  320. data: { token: \'notrequired\' },
  321. url: \''.DOL_URL_ROOT.'/core/js/lib_rare.js\',
  322. cache: false,
  323. /* async: false, */
  324. /* crossDomain: true,*/
  325. success: function () {
  326. cachejsstring=getjsurl.getResponseHeader(\'Cache-Control\');
  327. /*alert(\'js:\'+getjsurl.getAllResponseHeaders());*/
  328. /*alert(\'js:\'+cachejsstring);*/
  329. if (cachejsstring != null && cachejsstring.indexOf("no-cache") !== -1)
  330. {
  331. jQuery("#httpcachejsok").hide();
  332. jQuery("#httpcachejsko").show();
  333. }
  334. else
  335. {
  336. jQuery("#httpcachejsok").show();
  337. jQuery("#httpcachejsko").hide();
  338. }
  339. compjsstring=getjsurl.getResponseHeader(\'Content-Encoding\');
  340. /* alert(\'js:\'+getjsurl.getAllResponseHeaders()); */
  341. /*alert(\'js:\'+compjsstring);*/
  342. if (compjsstring == null || (compjsstring.indexOf("gzip") == -1 && compjsstring.indexOf("deflate") == -1 && compjsstring.indexOf("br") == -1))
  343. {
  344. jQuery("#httpcompjsok").hide();
  345. jQuery("#httpcompjsko").show();
  346. }
  347. else
  348. {
  349. jQuery("#httpcompjsok").show();
  350. jQuery("#httpcompjsko").hide();
  351. }
  352. }
  353. })
  354. var getjsphpurl;
  355. var cachejsphpstring;
  356. var compjsphpstring;
  357. getjsphpurl = $.ajax({
  358. type: "GET",
  359. data: { token: \''.currentToken().'\' },
  360. url: \''.DOL_URL_ROOT.'/core/js/lib_head.js.php\',
  361. cache: false,
  362. /* async: false, */
  363. /* crossDomain: true,*/
  364. success: function () {
  365. cachejsphpstring=getjsphpurl.getResponseHeader(\'Cache-Control\');
  366. /* alert(\'jsphp:\'+getjsphpurl.getAllResponseHeaders()); */
  367. /*alert(\'jsphp:\'+cachejsphpstring);*/
  368. if (cachejsphpstring != null && cachejsphpstring.indexOf("no-cache") !== -1)
  369. {
  370. jQuery("#httpcachejsphpok").hide();
  371. jQuery("#httpcachejsphpko").show();
  372. }
  373. else
  374. {
  375. jQuery("#httpcachejsphpok").show();
  376. jQuery("#httpcachejsphpko").hide();
  377. }
  378. compjsphpstring=getjsphpurl.getResponseHeader(\'Content-Encoding\');
  379. /* alert(\'php:\'+getjsphpurl.getAllResponseHeaders()); */
  380. /*alert(\'php:\'+compjsphpstring);*/
  381. if (compjsphpstring == null || (compjsphpstring.indexOf("gzip") == -1 && compjsphpstring.indexOf("deflate") == -1 && compjsphpstring.indexOf("br") == -1))
  382. {
  383. jQuery("#httpcompjsphpok").hide();
  384. jQuery("#httpcompjsphpko").show();
  385. }
  386. else
  387. {
  388. jQuery("#httpcompjsphpok").show();
  389. jQuery("#httpcompjsphpko").hide();
  390. }
  391. }
  392. })
  393. });
  394. </script>';
  395. print '<br>';
  396. print '<strong>'.$langs->trans("HTTPCacheStaticResources").' - ';
  397. print $form->textwithpicto($langs->trans("CacheByServer"), $langs->trans("CacheByServerDesc"));
  398. print ':</strong><br>';
  399. // No cache on PHP
  400. //print '<div id="httpcachephpok">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'php (.php)').'</div>';
  401. //print '<div id="httpcachephpko">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeNotCached",'php (.php)').'</div>';
  402. // Cache on rest
  403. print '<div id="httpcachecssok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCached", 'css (.css)').'</div>';
  404. print '<div id="httpcachecssko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCached", 'css (.css)').'</div>';
  405. print '<div id="httpcachecssphpok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCached", 'css (.css.php)').'</div>';
  406. print '<div id="httpcachecssphpko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCached", 'css (.css.php)').'</div>';
  407. print '<div id="httpcacheimgok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCached", 'img (.png)').'</div>';
  408. print '<div id="httpcacheimgko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCached", 'img (.png)').'</div>';
  409. print '<div id="httpcachejsok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCached", 'javascript (.js)').'</div>';
  410. print '<div id="httpcachejsko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCached", 'javascript (.js)').'</div>';
  411. print '<div id="httpcachejsphpok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCached", 'javascript (.js.php)').'</div>';
  412. print '<div id="httpcachejsphpko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCached", 'javascript (.js.php)').'</div>';
  413. print '<br>';
  414. print '<strong>'.$langs->trans("HTTPCacheStaticResources").' - ';
  415. print $langs->trans("CacheByClient").':</strong><br>';
  416. print $langs->trans("TestNotPossibleWithCurrentBrowsers").'<br>';
  417. // Compressions
  418. print '<br>';
  419. print '<strong>';
  420. print $form->textwithpicto($langs->trans("CompressionOfResources"), $langs->trans("CompressionOfResourcesDesc"));
  421. print '</strong>: ';
  422. print '<br>';
  423. // on PHP
  424. print '<div id="httpcompphpok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCompressed", 'php (.php)').'</div>';
  425. print '<div id="httpcompphpko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCompressed", 'php (.php)').'</div>';
  426. // on rest
  427. print '<div id="httpcompcssok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCompressed", 'css (.css)').'</div>';
  428. print '<div id="httpcompcssko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCompressed", 'css (.css)').'</div>';
  429. print '<div id="httpcompcssphpok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCompressed", 'css (.css.php)').'</div>';
  430. print '<div id="httpcompcssphpko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCompressed", 'css (.css.php)').'</div>';
  431. //print '<div id="httpcompimgok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCompressed",'img (.png)').'</div>';
  432. //print '<div id="httpcompimgko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'img (.png)').'</div>';
  433. print '<div id="httpcompjsok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCompressed", 'javascript (.js)').'</div>';
  434. print '<div id="httpcompjsko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCompressed", 'javascript (.js)').'</div>';
  435. print '<div id="httpcompjsphpok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCompressed", 'javascript (.js.php)').'</div>';
  436. print '<div id="httpcompjsphpko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCompressed", 'javascript (.js.php)').'</div>';
  437. // Database driver
  438. print '<br>';
  439. print '<strong>'.$langs->trans("DriverType").'</strong>: ';
  440. print '<br>';
  441. if ($conf->db->type == 'mysql' || $conf->db->type == 'mysqli') {
  442. $test = ($conf->db->type == 'mysqli');
  443. if ($test) {
  444. print img_picto('', 'tick.png').' '.$langs->trans("YouUseBestDriver", $conf->db->type);
  445. } else {
  446. print img_picto('', 'warning.png').' '.$langs->trans("YouDoNotUseBestDriver", $conf->db->type, 'mysqli');
  447. }
  448. print '<br>';
  449. }
  450. print '<br>';
  451. print '<strong>'.$langs->trans("ComboListOptim").'</strong>: ';
  452. print '<br>';
  453. // Product combo list
  454. $sql = "SELECT COUNT(*) as nb";
  455. $sql .= " FROM ".MAIN_DB_PREFIX."product as p";
  456. $resql = $db->query($sql);
  457. if ($resql) {
  458. $limitforoptim = 5000;
  459. $num = $db->num_rows($resql);
  460. $obj = $db->fetch_object($resql);
  461. $nb = $obj->nb;
  462. if ($nb > $limitforoptim) {
  463. if (empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)) {
  464. print img_picto('', 'warning.png').' '.$langs->trans("YouHaveXObjectUseComboOptim", $nb, $langs->transnoentitiesnoconv("ProductsOrServices"), 'PRODUIT_USE_SEARCH_TO_SELECT');
  465. } else {
  466. print img_picto('', 'tick.png').' '.$langs->trans("YouHaveXObjectAndSearchOptimOn", $nb, $langs->transnoentitiesnoconv("ProductsOrServices"), 'PRODUIT_USE_SEARCH_TO_SELECT', $conf->global->PRODUIT_USE_SEARCH_TO_SELECT);
  467. }
  468. } else {
  469. print img_picto('', 'tick.png').' '.$langs->trans("NbOfObjectIsLowerThanNoPb", $nb, $langs->transnoentitiesnoconv("ProductsOrServices"));
  470. }
  471. print '<br>';
  472. $db->free($resql);
  473. }
  474. // Thirdparty combo list
  475. $sql = "SELECT COUNT(*) as nb";
  476. $sql .= " FROM ".MAIN_DB_PREFIX."societe as s";
  477. $resql = $db->query($sql);
  478. if ($resql) {
  479. $limitforoptim = 5000;
  480. $num = $db->num_rows($resql);
  481. $obj = $db->fetch_object($resql);
  482. $nb = $obj->nb;
  483. if ($nb > $limitforoptim) {
  484. if (empty($conf->global->COMPANY_USE_SEARCH_TO_SELECT)) {
  485. print img_picto('', 'warning.png').' '.$langs->trans("YouHaveXObjectUseComboOptim", $nb, $langs->transnoentitiesnoconv("ThirdParties"), 'COMPANY_USE_SEARCH_TO_SELECT');
  486. } else {
  487. print img_picto('', 'tick.png').' '.$langs->trans("YouHaveXObjectAndSearchOptimOn", $nb, $langs->transnoentitiesnoconv("ThirdParties"), 'COMPANY_USE_SEARCH_TO_SELECT', $conf->global->COMPANY_USE_SEARCH_TO_SELECT);
  488. }
  489. } else {
  490. print img_picto('', 'tick.png').' '.$langs->trans("NbOfObjectIsLowerThanNoPb", $nb, $langs->transnoentitiesnoconv("ThirdParties"));
  491. }
  492. print '<br>';
  493. $db->free($resql);
  494. }
  495. // Contact combo list
  496. $sql = "SELECT COUNT(*) as nb";
  497. $sql .= " FROM ".MAIN_DB_PREFIX."socpeople as s";
  498. $resql = $db->query($sql);
  499. if ($resql) {
  500. $limitforoptim = 5000;
  501. $num = $db->num_rows($resql);
  502. $obj = $db->fetch_object($resql);
  503. $nb = $obj->nb;
  504. if ($nb > $limitforoptim) {
  505. if (empty($conf->global->CONTACT_USE_SEARCH_TO_SELECT)) {
  506. print img_picto('', 'warning.png').' '.$langs->trans("YouHaveXObjectUseComboOptim", $nb, $langs->transnoentitiesnoconv("Contacts"), 'CONTACT_USE_SEARCH_TO_SELECT');
  507. } else {
  508. print img_picto('', 'tick.png').' '.$langs->trans("YouHaveXObjectAndSearchOptimOn", $nb, $langs->transnoentitiesnoconv("Contacts"), 'CONTACT_USE_SEARCH_TO_SELECT', $conf->global->CONTACT_USE_SEARCH_TO_SELECT);
  509. }
  510. } else {
  511. print img_picto('', 'tick.png').' '.$langs->trans("NbOfObjectIsLowerThanNoPb", $nb, $langs->transnoentitiesnoconv("Contacts"));
  512. }
  513. print '<br>';
  514. $db->free($resql);
  515. }
  516. // Contact combo list
  517. $sql = "SELECT COUNT(*) as nb";
  518. $sql .= " FROM ".MAIN_DB_PREFIX."projet as s";
  519. $resql = $db->query($sql);
  520. if ($resql) {
  521. $limitforoptim = 5000;
  522. $num = $db->num_rows($resql);
  523. $obj = $db->fetch_object($resql);
  524. $nb = $obj->nb;
  525. if ($nb > $limitforoptim) {
  526. if (empty($conf->global->PROJECT_USE_SEARCH_TO_SELECT)) {
  527. print img_picto('', 'warning.png').' '.$langs->trans("YouHaveXObjectUseComboOptim", $nb, $langs->transnoentitiesnoconv("Projects"), 'PROJECT_USE_SEARCH_TO_SELECT');
  528. } else {
  529. print img_picto('', 'tick.png').' '.$langs->trans("YouHaveXObjectAndSearchOptimOn", $nb, $langs->transnoentitiesnoconv("Projects"), 'PROJECT_USE_SEARCH_TO_SELECT', $conf->global->PROJECT_USE_SEARCH_TO_SELECT);
  530. }
  531. } else {
  532. print img_picto('', 'tick.png').' '.$langs->trans("NbOfObjectIsLowerThanNoPb", $nb, $langs->transnoentitiesnoconv("Projects"));
  533. }
  534. print '<br>';
  535. $db->free($resql);
  536. }
  537. print '<br>';
  538. print '<strong>'.$langs->trans("SearchOptim").'</strong>: ';
  539. print '<br>';
  540. // Product search
  541. $sql = "SELECT COUNT(*) as nb";
  542. $sql .= " FROM ".MAIN_DB_PREFIX."product as p";
  543. $resql = $db->query($sql);
  544. if ($resql) {
  545. $limitforoptim = 100000;
  546. $num = $db->num_rows($resql);
  547. $obj = $db->fetch_object($resql);
  548. $nb = $obj->nb;
  549. if ($nb > $limitforoptim) {
  550. if (empty($conf->global->PRODUCT_DONOTSEARCH_ANYWHERE)) {
  551. print img_picto('', 'warning.png').' '.$langs->trans("YouHaveXObjectUseSearchOptim", $nb, $langs->transnoentitiesnoconv("ProductsOrServices"), 'PRODUCT_DONOTSEARCH_ANYWHERE');
  552. print $langs->trans("YouHaveXObjectUseSearchOptimDesc");
  553. } else {
  554. print img_picto('', 'tick.png').' '.$langs->trans("YouHaveXObjectAndSearchOptimOn", $nb, $langs->transnoentitiesnoconv("ProductsOrServices"), 'PRODUCT_DONOTSEARCH_ANYWHERE', $conf->global->PRODUCT_DONOTSEARCH_ANYWHERE);
  555. }
  556. } else {
  557. print img_picto('', 'tick.png').' '.$langs->trans("NbOfObjectIsLowerThanNoPb", $nb, $langs->transnoentitiesnoconv("ProductsOrServices"));
  558. }
  559. print '<br>';
  560. $db->free($resql);
  561. }
  562. // Thirdparty search
  563. $sql = "SELECT COUNT(*) as nb";
  564. $sql .= " FROM ".MAIN_DB_PREFIX."societe as s";
  565. $resql = $db->query($sql);
  566. if ($resql) {
  567. $limitforoptim = 100000;
  568. $num = $db->num_rows($resql);
  569. $obj = $db->fetch_object($resql);
  570. $nb = $obj->nb;
  571. if ($nb > $limitforoptim) {
  572. if (empty($conf->global->COMPANY_DONOTSEARCH_ANYWHERE)) {
  573. print img_picto('', 'warning.png').' '.$langs->trans("YouHaveXObjectUseSearchOptim", $nb, $langs->transnoentitiesnoconv("ThirdParties"), 'COMPANY_DONOTSEARCH_ANYWHERE');
  574. print $langs->trans("YouHaveXObjectUseSearchOptimDesc");
  575. } else {
  576. print img_picto('', 'tick.png').' '.$langs->trans("YouHaveXObjectAndSearchOptimOn", $nb, $langs->transnoentitiesnoconv("ThirdParties"), 'COMPANY_DONOTSEARCH_ANYWHERE', $conf->global->COMPANY_DONOTSEARCH_ANYWHERE);
  577. }
  578. } else {
  579. print img_picto('', 'tick.png').' '.$langs->trans("NbOfObjectIsLowerThanNoPb", $nb, $langs->transnoentitiesnoconv("ThirdParties"));
  580. }
  581. print '<br>';
  582. $db->free($resql);
  583. }
  584. // Browser
  585. print '<br>';
  586. print '<strong>'.$langs->trans("Browser").'</strong>:<br>';
  587. if (!in_array($conf->browser->name, array('chrome', 'opera', 'safari', 'firefox'))) {
  588. print img_picto('', 'warning.png').' '.$langs->trans("BrowserIsKO", $conf->browser->name);
  589. } else {
  590. print img_picto('', 'tick.png').' '.$langs->trans("BrowserIsOK", $conf->browser->name);
  591. }
  592. print '<br>';
  593. // Options
  594. print '<br>';
  595. print '<strong>'.$langs->trans("Options").'</strong>:<br>';
  596. if (getDolGlobalInt('MAIN_ACTIVATE_FILECACHE')) {
  597. print 'MAIN_ACTIVATE_FILECACHE = '.getDolGlobalInt('MAIN_ACTIVATE_FILECACHE').' '.img_picto('', 'tick.png');
  598. } else {
  599. print 'MAIN_ACTIVATE_FILECACHE = '.getDolGlobalInt('MAIN_ACTIVATE_FILECACHE', 0);
  600. //.' '.img_picto('', 'warning.png');
  601. }
  602. print '<br>';
  603. if (getDolGlobalInt('MAIN_ENABLE_AJAX_TOOLTIP')) {
  604. print 'MAIN_ENABLE_AJAX_TOOLTIP = '.getDolGlobalInt('MAIN_ENABLE_AJAX_TOOLTIP').' '.img_picto('', 'tick.png');
  605. } else {
  606. print 'MAIN_ENABLE_AJAX_TOOLTIP = '.getDolGlobalInt('MAIN_ENABLE_AJAX_TOOLTIP', 0);
  607. //.' '.img_picto('', 'warning.png');
  608. }
  609. print '<br>';
  610. // End of page
  611. llxFooter();
  612. $db->close();