* Copyright (C) 2004-2012 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2016 Juanjo Menent * Copyright (C) 2020 Tobias Sekan * * 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 */ 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->load("admin"); $langs->load("install"); $langs->load("errors"); if (! $user->admin) accessforbidden(); /* * View */ llxHeader(); $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=$maxphp*1; if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; $maxphp2=@ini_get('post_max_size'); // In unknown if (preg_match('/k$/i', $maxphp2)) $maxphp2=$maxphp2*1; if (preg_match('/m$/i', $maxphp2)) $maxphp2=$maxphp2*1024; if (preg_match('/g$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024; if (preg_match('/t$/i', $maxphp2)) $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("Value").'
'.$langs->trans("Version").''; $arrayphpminversionerror = array(5,5,0); $arrayphpminversionwarning = array(5,6,0); if (versioncompare(versionphparray(), $arrayphpminversionerror) < 0) { print 'Error '.$langs->trans("ErrorPHPVersionTooLow", versiontostring($arrayphpminversionerror)); } elseif (versioncompare(versionphparray(), $arrayphpminversionwarning) < 0) { print 'Warning '.$langs->trans("ErrorPHPVersionTooLow", versiontostring($arrayphpminversionwarning)); } else { print 'Ok '.versiontostring(versionphparray()); } print '
GET and POST support'; if (! isset($_GET["testget"]) && ! isset($_POST["testpost"]) && ! isset($_GET["mainmenu"])) { print 'Warning '.$langs->trans("PHPSupportPOSTGETKo"); print ' ('.$langs->trans("Recheck").')'; } else { print 'Ok '.$langs->trans("PHPSupportPOSTGETOk"); } print '
Sessions support'; if (! function_exists("session_id")) { print 'Error '.$langs->trans("ErrorPHPDoesNotSupportSessions"); } else { print 'Ok '.$langs->trans("PHPSupportSessions"); } print '
UTF-8 support'; if (! function_exists("utf8_encode")) { print 'Warning '.$langs->trans("ErrorPHPDoesNotSupportUTF8"); } else { print 'Ok '.$langs->trans("PHPSupportUTF8"); } print '
'; print '
'; $activatedExtensions = array_map('strtolower', getActivatedExtensions()); $loadedExtensions = array_map('strtolower', get_loaded_extensions(false)); print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; $functions = ["imagecreate"]; $name = "GD"; print ""; print ""; print getTableColumn($name, $activatedExtensions); print getTableColumn($name, $loadedExtensions); print getTableColumnFunction($functions); print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; $functions = ["curl_init"]; $name = "Curl"; print ""; print ""; print getTableColumn($name, $activatedExtensions); print getTableColumn($name, $loadedExtensions); print getTableColumnFunction($functions); 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 getTableColumn($name, $activatedExtensions); print getTableColumn($name, $loadedExtensions); print getTableColumnFunction($functions); print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; } $functions = array(); $name = "xDebug"; print ""; print ""; print getTableColumn($name, $activatedExtensions); print getTableColumn($name, $loadedExtensions); print getTableColumnFunction($functions); print getResultColumn($name, $activatedExtensions, $loadedExtensions, $functions); print ""; print '
'.$langs->trans("Extension").''.$langs->trans("Activated").''.$langs->trans("Loaded").''.$langs->trans("FunctionTest").''.$langs->trans("Result").'
".$name."
".$name."
".$name."
".$name."
'; print '
'; // Get php_info array $phparray=phpinfo_array(); foreach($phparray as $key => $value) { print '
'; print ''; print ''; //print ''; print ''; print ''; print "\n"; //var_dump($value); foreach($value as $keyparam => $keyvalue) { if (! is_array($keyvalue)) { print ''; print ''; $valtoshow=$keyvalue; 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 '
'.$langs->trans("Parameter").''.$key.''.$langs->trans("Value").'
'.$keyparam.''; 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 all list with all activated, but possible not loaded PHP extensions * * @return array */ function getActivatedExtensions() { $file = getConfigFilePath(); $handle = fopen(GetConfigFilePath(), "r"); $content = fread($handle, filesize($file)); fclose($handle); $configLines = explode("\r", $content); $extensions = array(); $lastLine = ""; foreach($configLines as $line) { $line = trim($line); // ignore comment lines if(substr($line, 0, 1) === ";") { continue; } // extension if(substr($line, 0, 9) === "extension" && substr($line, 0, 10) !== "extension_") { $value = trim(end(explode("=", $line))); $extensions[] = $value === "gd2" ? "gd" : $value; } // zend_extension if(substr($line, 0, 14) === "zend_extension") { $extensions[] = str_replace("[", "", str_replace("]", "", $lastLine)); } $lastLine = $line; } return array_unique($extensions); } /** * Return the path to the current used php config file * * @return string */ function getConfigFilePath() { $phparray = phpinfo_array(); foreach($phparray as $value) { foreach($value as $keyparam => $keyvalue) { if(strtolower($keyparam) !== "loaded configuration file") { continue; } return $keyvalue; } } return ""; } /** * Return a table column with a indicator (okay or warning), based on the given name and list * * @param string $name The name to check inside the given list * @param array $list A list that should contains the given name * * @return string */ function getTableColumn($name, array $list) { $name = strtolower($name); $html = ""; if(in_array($name, $list)) { $html .= 'Ok'; } else { $html .= 'Warning'; } $html .= ""; return $html; } /** * Return a table column with a indicator (okay or warning), based on the given functions to check * * @param array $functions A list with functions to check * * @return string */ function getTableColumnFunction(array $functions) { if(count($functions) < 1) { return "-"; } $result = true; $html = ""; foreach($functions as $function) { $result = $result && function_exists($function); } if($result) { $html .= 'Ok'; } else { $html .= 'Warning'; } $html .= ""; return $html; } /** * 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 * @param array $loaded A list with all loaded PHP extensions * @param array $functions A list with all PHP functions to check * * @return array */ 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 = ""; $html .= $result ? $langs->trans("PHPSupport".$name) : $langs->trans("ErrorPHPDoesNotSupport".$name); $html .= ""; return $html; }