dolibarr  13.0.2
perf.php
Go to the documentation of this file.
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 
23 require '../../main.inc.php';
24 require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
25 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
26 require_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
27 require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
28 
29 // Load translation files required by the page
30 $langs->loadLangs(array("install", "other", "admin"));
31 
32 if (!$user->admin)
34 
35 if (GETPOST('action', 'aZ09') == 'donothing')
36 {
37  exit;
38 }
39 
40 
41 /*
42  * View
43  */
44 
45 $form = new Form($db);
46 $nowstring = dol_print_date(dol_now(), 'dayhourlog');
47 
48 llxHeader();
49 
50 print load_fiche_titre($langs->trans("PerfDolibarr"), '', 'title_setup');
51 
52 print '<span class="opacitymedium">'.$langs->trans("YouMayFindPerfAdviceHere", 'https://wiki.dolibarr.org/index.php/FAQ_Increase_Performance').'</span> (<a href="'.$_SERVER["PHP_SELF"].'">'.$langs->trans("Reload").'</a>)<br>';
53 
54 // Recupere la version de PHP
55 $phpversion = version_php();
56 print "<br><strong>PHP</strong> - ".$langs->trans("Version").": ".$phpversion."<br>\n";
57 
58 // Recupere la version du serveur web
59 print "<br><strong>Web server</strong> - ".$langs->trans("Version").": ".$_SERVER["SERVER_SOFTWARE"]."<br>\n";
60 
61 // XDebug
62 print '<br>';
63 print '<strong>'.$langs->trans("XDebug").'</strong>: ';
64 $test = !function_exists('xdebug_is_enabled');
65 if ($test) print img_picto('', 'tick.png').' '.$langs->trans("NotInstalled").' - '.$langs->trans("NotSlowedDownByThis");
66 else {
67  print img_picto('', 'warning').' '.$langs->trans("ModuleActivated", $langs->transnoentities("XDebug"));
68  print ' - '.$langs->trans("MoreInformation").' <a href="'.DOL_URL_ROOT.'/admin/system/xdebug.php">XDebug admin page</a>';
69 }
70 print '<br>';
71 
72 // Module log
73 print '<br>';
74 print '<strong>'.$langs->trans("Syslog").'</strong>: ';
75 $test = empty($conf->syslog->enabled);
76 if ($test) print img_picto('', 'tick.png').' '.$langs->trans("NotInstalled").' - '.$langs->trans("NotSlowedDownByThis");
77 else {
78  print img_picto('', 'warning').' '.$langs->trans("ModuleActivated", $langs->transnoentities("Syslog"));
79  //print ' '.$langs->trans("MoreInformation").' <a href="'.DOL_URL_ROOT.'/admin/system/xdebug.php'.'">XDebug admin page</a>';
80 }
81 print '<br>';
82 
83 // Module debugbar
84 print '<br>';
85 print '<strong>'.$langs->trans("DebugBar").'</strong>: ';
86 $test = empty($conf->debugbar->enabled);
87 if ($test) print img_picto('', 'tick.png').' '.$langs->trans("NotInstalled").' - '.$langs->trans("NotSlowedDownByThis");
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 
94 // Applicative cache
95 print '<br>';
96 print '<strong>'.$langs->trans("ApplicativeCache").'</strong>: ';
97 $test = !empty($conf->memcached->enabled);
98 if ($test)
99 {
100  if (!empty($conf->global->MEMCACHED_SERVER))
101  {
102  print img_picto('', 'tick.png').' '.$langs->trans("MemcachedAvailableAndSetup");
103  print ' '.$langs->trans("MoreInformation").' <a href="'.dol_buildpath('/memcached/admin/memcached.php', 1).'">Memcached module admin page</a>';
104  } else {
105  print img_picto('', 'warning').' '.$langs->trans("MemcachedModuleAvailableButNotSetup");
106  print ' <a href="'.dol_buildpath('/memcached/admin/memcached.php', 1).'">Memcached module admin page</a>';
107  }
108 } else print img_picto('', 'warning').' '.$langs->trans("MemcachedNotAvailable");
109 print '</br>';
110 
111 // OPCode cache
112 print '<br>';
113 print '<strong>'.$langs->trans("OPCodeCache").'</strong>: ';
114 $foundcache = 0;
115 $test = function_exists('xcache_info');
116 if (!$foundcache && $test)
117 {
118  $foundcache++;
119  print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "XCache");
120  print ' '.$langs->trans("MoreInformation").' <a href="'.DOL_URL_ROOT.'/admin/system/xcache.php">Xcache admin page</a>';
121 }
122 $test = function_exists('eaccelerator_info');
123 if (!$foundcache && $test)
124 {
125  $foundcache++;
126  print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "Eaccelerator");
127 }
128 $test = function_exists('opcache_get_status');
129 if (!$foundcache && $test)
130 {
131  $foundcache++;
132  print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "ZendOPCache"); // Should be by default starting with PHP 5.5
133  //$tmp=opcache_get_status();
134  //var_dump($tmp);
135 }
136 $test = function_exists('apc_cache_info');
137 if (!$foundcache && $test)
138 {
139  //var_dump(apc_cache_info());
140  if (ini_get('apc.enabled'))
141  {
142  $foundcache++;
143  print img_picto('', 'tick.png').' '.$langs->trans("APCInstalled");
144  } else {
145  print img_picto('', 'warning').' '.$langs->trans("APCCacheInstalledButDisabled");
146  }
147 }
148 if (!$foundcache) print $langs->trans("NoOPCodeCacheFound");
149 print '<br>';
150 
151 // Use of preload bootstrap
152 if (ini_get('opcache.preload'))
153 {
154  print '<br>';
155  print '<strong>'.$langs->trans("PreloadOPCode").'</strong>: ';
156  print ini_get('opcache.preload');
157 } else {
158  print '<br>';
159  print '<strong>'.$langs->trans("PreloadOPCode").'</strong>: ';
160  print $langs->trans("No");
161 }
162 print '<br>';
163 
164 // HTTPCacheStaticResources
165 print '<script type="text/javascript" language="javascript">
166 jQuery(document).ready(function() {
167  var getphpurl;
168  var cachephpstring;
169  var compphpstring;
170  getphpurl = $.ajax({
171  type: "GET",
172  url: \''.DOL_URL_ROOT.'/index.php\',
173  cache: false,
174  /* async: false, */
175  /* crossDomain: true,*/
176  success: function () {
177  cachephpstring=getphpurl.getResponseHeader(\'Cache-Control\');
178  /* alert(\'php:\'+getphpurl.getAllResponseHeaders()); */
179  /*alert(\'php:\'+cachephpstring);*/
180  if (cachephpstring == null || cachephpstring.indexOf("no-cache") !== -1)
181  {
182  jQuery("#httpcachephpok").hide();
183  jQuery("#httpcachephpko").show();
184  }
185  else
186  {
187  jQuery("#httpcachephpok").show();
188  jQuery("#httpcachephpko").hide();
189  }
190  compphpstring=getphpurl.getResponseHeader(\'Content-Encoding\');
191  /* alert(\'php:\'+getphpurl.getAllResponseHeaders()); */
192  /*alert(\'php:\'+compphpstring);*/
193  if (compphpstring == null || (compphpstring.indexOf("gzip") == -1 && compphpstring.indexOf("deflate") == -1))
194  {
195  jQuery("#httpcompphpok").hide();
196  jQuery("#httpcompphpko").show();
197  }
198  else
199  {
200  jQuery("#httpcompphpok").show();
201  jQuery("#httpcompphpko").hide();
202  }
203  }
204  })
205 
206  var getcssurl;
207  var cachecssstring;
208  var compcssstring;
209  getcssurl = $.ajax({
210  type: "GET",
211  url: \''.DOL_URL_ROOT.'/includes/jquery/css/base/jquery-ui.css\',
212  cache: false,
213  /* async: false, */
214  /*crossDomain: true, */
215  success: function () {
216  cachecssstring=getcssurl.getResponseHeader(\'Cache-Control\');
217  /* alert(\'css:\'+getcssurl.getAllResponseHeaders()); */
218  /*alert(\'css:\'+cachecssstring);*/
219  if (cachecssstring != null && cachecssstring.indexOf("no-cache") !== -1)
220  {
221  jQuery("#httpcachecssok").hide();
222  jQuery("#httpcachecssko").show();
223  }
224  else
225  {
226  jQuery("#httpcachecssok").show();
227  jQuery("#httpcachecssko").hide();
228  }
229  compcssstring=getcssurl.getResponseHeader(\'Content-Encoding\');
230  /* alert(\'php:\'+getcssurl.getAllResponseHeaders()); */
231  /*alert(\'php:\'+compcssstring);*/
232  if (compcssstring == null || (compcssstring.indexOf("gzip") == -1 && compcssstring.indexOf("deflate") == -1))
233  {
234  jQuery("#httpcompcssok").hide();
235  jQuery("#httpcompcssko").show();
236  }
237  else
238  {
239  jQuery("#httpcompcssok").show();
240  jQuery("#httpcompcssko").hide();
241  }
242  }
243  })
244 
245  var getcssphpurl;
246  var cachecssphpstring;
247  var compcssphpstring;
248  getcssphpurl = $.ajax({
249  type: "GET",
250  url: \''.DOL_URL_ROOT.'/theme/eldy/style.css.php\',
251  cache: false,
252  /* async: false, */
253  /*crossDomain: true,*/
254  success: function () {
255  cachecssphpstring=getcssphpurl.getResponseHeader(\'Cache-Control\');
256  /* alert(\'cssphp:\'+getcssphpurl.getAllResponseHeaders()); */
257  /*alert(\'cssphp:\'+cachecssphpstring);*/
258  if (cachecssphpstring != null && cachecssphpstring.indexOf("no-cache") !== -1)
259  {
260  jQuery("#httpcachecssphpok").hide();
261  jQuery("#httpcachecssphpko").show();
262  }
263  else
264  {
265  jQuery("#httpcachecssphpok").show();
266  jQuery("#httpcachecssphpko").hide();
267  }
268  compcssphpstring=getcssphpurl.getResponseHeader(\'Content-Encoding\');
269  /* alert(\'php:\'+getcssphpurl.getAllResponseHeaders()); */
270  /*alert(\'php:\'+compcssphpstring);*/
271  if (compcssphpstring == null || (compcssphpstring.indexOf("gzip") == -1 && compcssphpstring.indexOf("deflate") == -1))
272  {
273  jQuery("#httpcompcssphpok").hide();
274  jQuery("#httpcompcssphpko").show();
275  }
276  else
277  {
278  jQuery("#httpcompcssphpok").show();
279  jQuery("#httpcompcssphpko").hide();
280  }
281  }
282  })
283 
284  var getimgurl;
285  var cacheimgstring;
286  var compimgstring;
287  getimgurl = $.ajax({
288  type: "GET",
289  url: \''.DOL_URL_ROOT.'/theme/eldy/img/help.png\',
290  cache: false,
291  /* async: false, */
292  /*crossDomain: true,*/
293  success: function () {
294  cacheimgstring=getimgurl.getResponseHeader(\'Cache-Control\');
295  /* alert(\'img:\'+getimgurl.getAllResponseHeaders()); */
296  /*alert(\'img:\'+cacheimgstring);*/
297  if (cacheimgstring != null && cacheimgstring.indexOf("no-cache") !== -1)
298  {
299  jQuery("#httpcacheimgok").hide();
300  jQuery("#httpcacheimgko").show();
301  }
302  else
303  {
304  jQuery("#httpcacheimgok").show();
305  jQuery("#httpcacheimgko").hide();
306  }
307  compimgstring=getimgurl.getResponseHeader(\'Content-Encoding\');
308  /* alert(\'php:\'+getimgurl.getAllResponseHeaders()); */
309  /*alert(\'php:\'+compimgstring);*/
310  if (compimgstring == null || (compimgstring.indexOf("gzip") == -1 && compimgstring.indexOf("deflate") == -1))
311  {
312  jQuery("#httpcompimgok").hide();
313  jQuery("#httpcompimgko").show();
314  }
315  else
316  {
317  jQuery("#httpcompimgok").show();
318  jQuery("#httpcompimgko").hide();
319  }
320  }
321  })
322 
323  var getjsurl;
324  var cachejsstring;
325  var compjsstring;
326  getjsurl = $.ajax({
327  type: "GET",
328  url: \''.DOL_URL_ROOT.'/core/js/lib_rare.js\',
329  cache: false,
330  /* async: false, */
331  /* crossDomain: true,*/
332  success: function () {
333  cachejsstring=getjsurl.getResponseHeader(\'Cache-Control\');
334  /*alert(\'js:\'+getjsurl.getAllResponseHeaders());*/
335  /*alert(\'js:\'+cachejsstring);*/
336  if (cachejsstring != null && cachejsstring.indexOf("no-cache") !== -1)
337  {
338  jQuery("#httpcachejsok").hide();
339  jQuery("#httpcachejsko").show();
340  }
341  else
342  {
343  jQuery("#httpcachejsok").show();
344  jQuery("#httpcachejsko").hide();
345  }
346  compjsstring=getjsurl.getResponseHeader(\'Content-Encoding\');
347  /* alert(\'js:\'+getjsurl.getAllResponseHeaders()); */
348  /*alert(\'js:\'+compjsstring);*/
349  if (compjsstring == null || (compjsstring.indexOf("gzip") == -1 && compjsstring.indexOf("deflate") == -1))
350  {
351  jQuery("#httpcompjsok").hide();
352  jQuery("#httpcompjsko").show();
353  }
354  else
355  {
356  jQuery("#httpcompjsok").show();
357  jQuery("#httpcompjsko").hide();
358  }
359  }
360  })
361 
362  var getjsphpurl;
363  var cachejsphpstring;
364  var compjsphpstring;
365  getjsphpurl = $.ajax({
366  type: "GET",
367  url: \''.DOL_URL_ROOT.'/core/js/lib_head.js.php\',
368  cache: false,
369  /* async: false, */
370  /* crossDomain: true,*/
371  success: function () {
372  cachejsphpstring=getjsphpurl.getResponseHeader(\'Cache-Control\');
373  /* alert(\'jsphp:\'+getjsphpurl.getAllResponseHeaders()); */
374  /*alert(\'jsphp:\'+cachejsphpstring);*/
375  if (cachejsphpstring != null && cachejsphpstring.indexOf("no-cache") !== -1)
376  {
377  jQuery("#httpcachejsphpok").hide();
378  jQuery("#httpcachejsphpko").show();
379  }
380  else
381  {
382  jQuery("#httpcachejsphpok").show();
383  jQuery("#httpcachejsphpko").hide();
384  }
385  compjsphpstring=getjsphpurl.getResponseHeader(\'Content-Encoding\');
386  /* alert(\'php:\'+getjsphpurl.getAllResponseHeaders()); */
387  /*alert(\'php:\'+compjsphpstring);*/
388  if (compjsphpstring == null || (compjsphpstring.indexOf("gzip") == -1 && compjsphpstring.indexOf("deflate") == -1))
389  {
390  jQuery("#httpcompjsphpok").hide();
391  jQuery("#httpcompjsphpko").show();
392  }
393  else
394  {
395  jQuery("#httpcompjsphpok").show();
396  jQuery("#httpcompjsphpko").hide();
397  }
398  }
399  })
400 
401 });
402 </script>';
403 
404 
405 print '<br>';
406 print '<strong>'.$langs->trans("HTTPCacheStaticResources").' - ';
407 print $form->textwithpicto($langs->trans("CacheByServer"), $langs->trans("CacheByServerDesc"));
408 print ':</strong><br>';
409 // No cahce on PHP
410 //print '<div id="httpcachephpok">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'php (.php)').'</div>';
411 //print '<div id="httpcachephpko">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeNotCached",'php (.php)').'</div>';
412 // Cache on rest
413 print '<div id="httpcachecssok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCached", 'css (.css)').'</div>';
414 print '<div id="httpcachecssko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCached", 'css (.css)').'</div>';
415 print '<div id="httpcachecssphpok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCached", 'css (.css.php)').'</div>';
416 print '<div id="httpcachecssphpko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCached", 'css (.css.php)').'</div>';
417 print '<div id="httpcacheimgok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCached", 'img (.png)').'</div>';
418 print '<div id="httpcacheimgko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCached", 'img (.png)').'</div>';
419 print '<div id="httpcachejsok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCached", 'javascript (.js)').'</div>';
420 print '<div id="httpcachejsko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCached", 'javascript (.js)').'</div>';
421 print '<div id="httpcachejsphpok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCached", 'javascript (.js.php)').'</div>';
422 print '<div id="httpcachejsphpko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCached", 'javascript (.js.php)').'</div>';
423 print '<br>';
424 print '<strong>'.$langs->trans("HTTPCacheStaticResources").' - ';
425 print $langs->trans("CacheByClient").':</strong><br>';
426 print $langs->trans("TestNotPossibleWithCurrentBrowsers").'<br>';
427 
428 
429 // Compressions
430 print '<br>';
431 print '<strong>';
432 print $form->textwithpicto($langs->trans("CompressionOfResources"), $langs->trans("CompressionOfResourcesDesc"));
433 print '</strong>: ';
434 print '<br>';
435 // on PHP
436 print '<div id="httpcompphpok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCompressed", 'php (.php)').'</div>';
437 print '<div id="httpcompphpko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCompressed", 'php (.php)').'</div>';
438 // on rest
439 print '<div id="httpcompcssok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCompressed", 'css (.css)').'</div>';
440 print '<div id="httpcompcssko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCompressed", 'css (.css)').'</div>';
441 print '<div id="httpcompcssphpok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCompressed", 'css (.css.php)').'</div>';
442 print '<div id="httpcompcssphpko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCompressed", 'css (.css.php)').'</div>';
443 //print '<div id="httpcompimgok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCompressed",'img (.png)').'</div>';
444 //print '<div id="httpcompimgko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'img (.png)').'</div>';
445 print '<div id="httpcompjsok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCompressed", 'javascript (.js)').'</div>';
446 print '<div id="httpcompjsko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCompressed", 'javascript (.js)').'</div>';
447 print '<div id="httpcompjsphpok">'.img_picto('', 'tick.png').' '.$langs->trans("FilesOfTypeCompressed", 'javascript (.js.php)').'</div>';
448 print '<div id="httpcompjsphpko">'.img_picto('', 'warning.png').' '.$langs->trans("FilesOfTypeNotCompressed", 'javascript (.js.php)').'</div>';
449 
450 // Database driver
451 print '<br>';
452 print '<strong>'.$langs->trans("DriverType").'</strong>: ';
453 print '<br>';
454 if ($conf->db->type == 'mysql' || $conf->db->type == 'mysqli')
455 {
456  $test = ($conf->db->type == 'mysqli');
457  if ($test)
458  {
459  print img_picto('', 'tick.png').' '.$langs->trans("YouUseBestDriver", $conf->db->type);
460  } else {
461  print img_picto('', 'warning.png').' '.$langs->trans("YouDoNotUseBestDriver", $conf->db->type, 'mysqli');
462  }
463  print '<br>';
464 }
465 
466 // Product search
467 print '<br>';
468 print '<strong>'.$langs->trans("SearchOptim").'</strong>: ';
469 print '<br>';
470 $tab = array();
471 $sql = "SELECT COUNT(*) as nb";
472 $sql .= " FROM ".MAIN_DB_PREFIX."product as p";
473 $resql = $db->query($sql);
474 if ($resql)
475 {
476  $limitforoptim = 100000;
477  $num = $db->num_rows($resql);
478  $obj = $db->fetch_object($resql);
479  $nb = $obj->nb;
480  if ($nb > $limitforoptim)
481  {
482  if (empty($conf->global->PRODUCT_DONOTSEARCH_ANYWHERE))
483  {
484  print img_picto('', 'warning.png').' '.$langs->trans("YouHaveXObjectUseSearchOptim", $nb, $langs->transnoentitiesnoconv("ProductsOrServices"), 'PRODUCT_DONOTSEARCH_ANYWHERE');
485  } else {
486  print img_picto('', 'tick.png').' '.$langs->trans("YouHaveXObjectAndSearchOptimOn", $nb, $langs->transnoentitiesnoconv("ProductsOrServices"));
487  }
488  } else {
489  print img_picto('', 'tick.png').' '.$langs->trans("NbOfObjectIsLowerThanNoPb", $nb, $langs->transnoentitiesnoconv("ProductsOrServices"));
490  }
491  print '<br>';
492  $db->free($resql);
493 }
494 
495 // Thirdparty search
496 $tab = array();
497 $sql = "SELECT COUNT(*) as nb";
498 $sql .= " FROM ".MAIN_DB_PREFIX."societe as s";
499 $resql = $db->query($sql);
500 if ($resql)
501 {
502  $limitforoptim = 10000;
503  $num = $db->num_rows($resql);
504  $obj = $db->fetch_object($resql);
505  $nb = $obj->nb;
506  if ($nb > $limitforoptim)
507  {
508  if (empty($conf->global->COMPANY_DONOTSEARCH_ANYWHERE))
509  {
510  print img_picto('', 'warning.png').' '.$langs->trans("YouHaveXObjectUseSearchOptim", $nb, $langs->transnoentitiesnoconv("ThirdParties"), 'COMPANY_DONOTSEARCH_ANYWHERE');
511  } else {
512  print img_picto('', 'tick.png').' '.$langs->trans("YouHaveXObjectAndSearchOptimOn", $nb, $langs->transnoentitiesnoconv("ThirdParties"));
513  }
514  } else {
515  print img_picto('', 'tick.png').' '.$langs->trans("NbOfObjectIsLowerThanNoPb", $nb, $langs->transnoentitiesnoconv("ThirdParties"));
516  }
517  print '<br>';
518  $db->free($resql);
519 }
520 
521 // Browser
522 print '<br>';
523 print '<strong>'.$langs->trans("Browser").'</strong>:<br>';
524 if (!in_array($conf->browser->name, array('chrome', 'opera', 'safari', 'firefox')))
525 {
526  print img_picto('', 'warning.png').' '.$langs->trans("BrowserIsKO", $conf->browser->name);
527 } else {
528  print img_picto('', 'tick.png').' '.$langs->trans("BrowserIsOK", $conf->browser->name);
529 }
530 print '<br>';
531 
532 // End of page
533 llxFooter();
534 $db->close();
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_now($mode= 'auto')
Return date for now.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
llxHeader()
Empty header.
Definition: wrapper.php:45
Class to manage generation of HTML components Only common components must be here.
load_fiche_titre($titre, $morehtmlright= '', $picto= 'generic', $pictoisfullpath=0, $id= '', $morecssontable= '', $morehtmlcenter= '')
Load a title with picto.
img_picto($titlealt, $picto, $moreatt= '', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt= '', $morecss= '', $marginleftonlyshort=2)
Show picto whatever it&#39;s its name (generic function)
accessforbidden($message= '', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
version_php()
Return PHP version.
print $_SERVER["PHP_SELF"]
Edit parameters.
print
Draft customers invoices.
Definition: index.php:89
dol_print_date($time, $format= '', $tzoutput= 'auto', $outputlangs= '', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) if(!empty($conf->don->enabled)&&$user->rights->don->lire) if(!empty($conf->tax->enabled)&&$user->rights->tax->charges->lire) if(!empty($conf->facture->enabled)&&!empty($conf->commande->enabled)&&$user->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) $resql
Social contributions to pay.
Definition: index.php:1232
llxFooter()
Empty footer.
Definition: wrapper.php:59