* Copyright (C) 2004-2012 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2016 Juanjo Menent * Copyright (C) 2020 Tobias Sekan * Copyright (C) 2024 MDW * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/admin/system/phpinfo.php * \brief Page des infos systeme de php */ // Load Dolibarr environment require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; $langs->loadLangs(array("admin", "install", "errors")); if (!$user->admin) { accessforbidden(); } /* * View */ llxHeader('', '', '', '', 0, 0, '', '', '', 'mod-admin page-system_phpinfo'); $title = 'InfoPHP'; if (isset($title)) { print load_fiche_titre($langs->trans($title), '', 'title_setup'); } // Check PHP setup is OK $maxphp = @ini_get('upload_max_filesize'); // In unknown if (preg_match('/k$/i', $maxphp)) { $maxphp = preg_replace('/k$/i', '', $maxphp); $maxphp *= 1; } if (preg_match('/m$/i', $maxphp)) { $maxphp = preg_replace('/m$/i', '', $maxphp); $maxphp *= 1024; } if (preg_match('/g$/i', $maxphp)) { $maxphp = preg_replace('/g$/i', '', $maxphp); $maxphp *= 1024 * 1024; } if (preg_match('/t$/i', $maxphp)) { $maxphp = preg_replace('/t$/i', '', $maxphp); $maxphp *= 1024 * 1024 * 1024; } $maxphp2 = @ini_get('post_max_size'); // In unknown if (preg_match('/k$/i', $maxphp2)) { $maxphp2 = preg_replace('/k$/i', '', $maxphp2); $maxphp2 *= 1; } if (preg_match('/m$/i', $maxphp2)) { $maxphp2 = preg_replace('/m$/i', '', $maxphp2); $maxphp2 *= 1024; } if (preg_match('/g$/i', $maxphp2)) { $maxphp2 = preg_replace('/g$/i', '', $maxphp2); $maxphp2 *= 1024 * 1024; } if (preg_match('/t$/i', $maxphp2)) { $maxphp2 = preg_replace('/t$/i', '', $maxphp2); $maxphp2 *= 1024 * 1024 * 1024; } if ($maxphp > 0 && $maxphp2 > 0 && $maxphp > $maxphp2) { $langs->load("errors"); print info_admin($langs->trans("WarningParamUploadMaxFileSizeHigherThanPostMaxSize", @ini_get('upload_max_filesize'), @ini_get('post_max_size')), 0, 0, '0', 'warning'); print '
'; } print ''; print ''; $ErrorPicturePath = "../../theme/eldy/img/error.png"; $WarningPicturePath = "../../theme/eldy/img/warning.png"; $OkayPicturePath = "../../theme/eldy/img/tick.png"; print ''; print ''; print ''; print ''; print '
'.$langs->trans("Parameter").'
'.$langs->trans("Version").''; $arrayphpminversionerror = array(5, 5, 0); $arrayphpminversionwarning = array(5, 6, 0); if (versioncompare(versionphparray(), $arrayphpminversionerror) < 0) { print img_picto('Error', 'error').' '.$langs->trans("ErrorPHPVersionTooLow", versiontostring($arrayphpminversionerror)); } elseif (versioncompare(versionphparray(), $arrayphpminversionwarning) < 0) { print img_picto('Warning', 'warning').' '.$langs->trans("ErrorPHPVersionTooLow", versiontostring($arrayphpminversionwarning)); } else { print img_picto('Ok', 'tick').' '.versiontostring(versionphparray()); } print '
GET and POST support'; if (!isset($_GET["testget"]) && !isset($_POST["testpost"]) && !isset($_GET["mainmenu"])) { // We must keep $_GET and $_POST here. This is a specific test. print img_picto('Warning', 'warning').' '.$langs->trans("PHPSupportPOSTGETKo"); print ' ('.$langs->trans("Recheck").')'; } else { print img_picto('Ok', 'tick').' '.$langs->trans("PHPSupportPOSTGETOk"); } print '
Sessions support'; if (!function_exists("session_id")) { print img_picto('Error', 'error').' '.$langs->trans("ErrorPHPDoesNotSupportSessions"); } else { print img_picto('Ok', 'tick').' '.$langs->trans("PHPSupportSessions"); } print '
UTF-8 support'; if (!function_exists("utf8_encode")) { print img_picto('Warning', 'warning').' '.$langs->trans("ErrorPHPDoesNotSupport", "UTF8"); } else { print img_picto('Ok', 'tick').' '.$langs->trans("PHPSupport", "UTF8"); } print '
'; print '
'; $activatedExtensions = array(); $loadedExtensions = array_map('strtolower', get_loaded_extensions(false)); print ''; print ''; print ''; print ''; print ''; $functions = ["mb_check_encoding"]; $name = "MBString"; print ""; print ""; print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; $functions = ["json_decode"]; $name = "JSON"; print ""; print ""; print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; $functions = ["imagecreate"]; $name = "GD"; print ""; print ""; print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; $functions = ["curl_init"]; $name = "Curl"; print ""; print ""; print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; $functions = ["easter_date"]; $name = "Calendar"; print ""; print ""; print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; $functions = ["simplexml_load_string"]; $name = "Xml"; print ""; print ""; print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; if (empty($_SERVER["SERVER_ADMIN"]) || $_SERVER["SERVER_ADMIN"] != 'doliwamp@localhost') { $functions = ["locale_get_primary_language", "locale_get_region"]; $name = "Intl"; print ""; print ""; print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; } $functions = ["imap_open"]; $name = "IMAP"; print ""; print ""; print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; $functions = array(); $name = "zip"; print ""; print ""; print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; $functions = array(); $name = "xDebug"; print ""; print ""; print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; print '
'.$langs->trans("Extension").''.$langs->trans("Test").'
".$name."
".$name."
".$name."
".$name."
".$name."
".$name."
".$name."
".$name."
".$name."
".$name."
'; print '
'; // Get php_info array $phparray = phpinfo_array(); foreach ($phparray as $key => $value) { print '
'; print ''; print ''; print ''; print ''; print "\n"; //var_dump($value); foreach ($value as $keyparam => $keyvalue) { if (!is_array($keyvalue)) { $keytoshow = $keyparam; $valtoshow = $keyvalue; // Hide value of session cookies if (in_array($keyparam, array('HTTP_COOKIE', 'Cookie', "\$_SERVER['HTTP_COOKIE']", 'Authorization'))) { $valtoshow = ''.$langs->trans("Hidden").''; } if (preg_match('/'.preg_quote('$_COOKIE[\'DOLSESSID_', '/').'/i', $keyparam)) { $keytoshow = $keyparam; $valtoshow = ''.$langs->trans("Hidden").''; } if (preg_match('/'.preg_quote('$_SERVER[\'PHP_AUTH_PW', '/').'/i', $keyparam)) { $keytoshow = $keyparam; $valtoshow = ''.$langs->trans("Hidden").''; } print ''; print ''; if ($keyparam == 'X-ChromePhp-Data') { $valtoshow = dol_trunc($keyvalue, 80); } print ''; print ''; } else { print ''; print ''; $i = 0; foreach ($keyvalue as $keyparam2 => $keyvalue2) { print ''; } print ''; } } print '
'.$key.'
'.$keytoshow.''; if ($keyparam == 'Path') { $valtoshow = implode('; ', explode(';', trim($valtoshow))); } if ($keyparam == 'PATH') { $valtoshow = implode('; ', explode(';', trim($valtoshow))); } if ($keyparam == '_SERVER["PATH"]') { $valtoshow = implode('; ', explode(';', trim($valtoshow))); } print $valtoshow; print '
'.$keyparam.''; $valtoshow = $keyvalue2; if ($keyparam == 'disable_functions') { $valtoshow = implode(', ', explode(',', trim($valtoshow))); } //print $keyparam; print $valtoshow; $i++; print '
'; print '
'; print '
'; } // End of page llxFooter(); $db->close(); /** * Return a result column with a translated result text * * @param string $name The name of the PHP extension * @param array $activated A list with all activated PHP extensions. Deprecated. * @param array $loaded A list with all loaded PHP extensions * @param array $functions A list with all PHP functions to check * @return string */ function getResultColumn($name, array $activated, array $loaded, array $functions) { global $langs; $result = true; //$result = $result && in_array(strtolower($name), $activated); $result = $result && in_array(strtolower($name), $loaded); foreach ($functions as $function) { $result = $result && function_exists($function); } $html = ""; if ($result) { if (strtolower($name) == 'xdebug') { $html .= img_warning($langs->trans("ModuleActivated", "xdebug")); } else { $html .= img_picto($langs->trans("Ok"), 'tick'); } if (in_array(strtolower($name), $loaded)) { $html .= ' '.$langs->trans("Loaded").' - '; } else { //$html .= ' '.$langs->trans("NotLoaded").' - '; } if (strtolower($name) == 'xdebug') { $html .= ' '.$langs->trans("ModuleActivated", "xdebug"); $html .= ' - '.$langs->trans("ModuleActivatedMayExposeInformation"); } else { $html .= ' '.$langs->trans("PHPSupport", $name).''; } } else { if (strtolower($name) == 'xdebug') { $html .= yn(0).' - '; } else { $html .= img_warning($langs->trans("ModuleActivated", "xdebug")); } if (in_array(strtolower($name), $loaded)) { $html .= ' '.$langs->trans("Loaded").' - '; } else { //$html .= ' '.$langs->trans("NotLoaded").' - '; } $html .= ' '.$langs->trans("ErrorPHPDoesNotSupport", $name); } $html .= ""; return $html; }