code.fastix.org

Dateiansicht:

Datei:Projekte -> PHP:Replacement für phpinfo() -> phpinfo.php
md5:5f2e92a19387a5b471a48cea55189056
sha1:65cc8e7dfdf73bb6e99d2e3d5bff6efca06d8e0a
Download-Link:Download
  1. <?php
  2.  
  3. define ( 'PHP_INFO_SHOW_USERNAMES' , false );
  4. if ( ! empty( $_SERVER['AUTH_USER'] ) ) {
  5.         $_SERVER['AUTH_USER'] = '*********';
  6. }
  7.  
  8. if ( ! empty( $_SERVER['AUTH_PASSWORD'] ) ) {
  9.         $_SERVER['AUTH_PASSWORD'] = '*********';
  10. }
  11.  
  12.  
  13. header( 'Cache-Control: no-cache, no store' );
  14. header( 'Link: </phpinfo.css>; rel=preload; as=style', false );
  15. #header( 'Link: </favicon.ico>; rel=icon', false );
  16.  
  17. error_reporting( E_ALL );
  18. if ( isset ( $_COOKIE[ ini_get( 'session.name' ) ] ) ) {
  19.         session_start();
  20. }
  21.  
  22. ?><!DOCTYPE HTML>
  23. <html lang="de">
  24. <head>
  25. <meta charset="utf-8">
  26. <link rel="Shortcut Icon" href="/favicon.ico" />
  27. <link rel="Stylesheet" href="/phpinfo.css" />
  28. <meta name="robots" content="noindex,noarchive,nosnippet,noodp,notranslate,noimageindex">
  29. <title><?=$_SERVER['SERVER_NAME']; ?>: PHP-Informationen</title>
  30. <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
  31. <body>
  32. <h1>🛠 <?=$_SERVER['SERVER_NAME']; ?>: PHP-Informationen<br><span class='subline'><a href="https://code.fastix.org/Projekte/PHP:Replacement%20f%c3%bcr%20phpinfo()/">Tool von Jörg Reinholz</a>, <a href='https://www.fastix.org/'>fastix WebDesign &amp; Consult, Kassel</a>.</span></h1>
  33. <?php if ( isset( $_GET['show_ini_only'] ) && 'true' == $_GET['show_ini_only'] ) { ?>
  34. <h4 id="INI"><a class="toplink" href="?">⮉</a>Ini-Einstellungen: Gelesene Dateien</h4>
  35. <table>
  36. <?php Printline ( 'Gelesene php.ini:' , php_ini_loaded_file() ); ?>
  37.  
  38.  
  39. <?php
  40. if ( $filelist = php_ini_scanned_files() ) {
  41.     if ( strlen( $filelist ) > 0) {
  42. ?><tr><td> </td><td></td> </tr><?php
  43.         $files = explode(',', $filelist);
  44.         $i=0;
  45.         foreach ($files as $f) {
  46.             Printline ( 'danach (' . ++$i . '.)' , $f );
  47.         }
  48.     }
  49. }
  50. ?></table><?php        
  51. ?>
  52.  
  53. <h4>Glesene Ini-Einstellungen:</h4>
  54. <table class="showhover">
  55.         <tbody>
  56. <?php
  57.         iniShow();
  58. ?>
  59.  
  60.         </tbody>
  61. </table><?php
  62.         echo '<h4><a class="toplink" href="#">⮉ </a>(nach oben)</h4>';
  63.         echo "</body>\n</html>\n";
  64.         exit;
  65. } elseif ( isset( $_GET['show_constants_only'] ) && 'true' == $_GET['show_constants_only'] ) {
  66.         echo '<h4><a class="toplink" href="?">⮉</a>Konstanten:</h4>'."\n";
  67.         PrintHash( get_defined_constants( true ) );
  68.         echo '<h4><a class="toplink" href="#">⮉ </a>(nach oben)</h4>';
  69.         echo "</body>\n</html>\n";
  70.         exit;
  71. } elseif ( isset( $_GET['show_linuxlocales_only'] ) && 'true' == $_GET['show_linuxlocales_only'] ) {
  72.         echo '<h4><a class="toplink" href="?">⮉</a>Alle installierten Linux-Locales:</h4>'."\n";
  73.         if ( is_file( '/usr/bin/locale' ) ) {
  74.                 PrintHash ( ( new linuxLocales) -> getLocales(), true );
  75.         } else {
  76.                 echo "<p>Fehler: Dies scheint kein Linux zu sein.</p>";
  77.         }
  78.         echo '<h4><a class="toplink" href="#">⮉ </a>(nach oben)</h4>';
  79.         echo "</body>\n</html>\n";
  80.         exit;
  81. } elseif ( isset( $_GET['show_apache_only'] ) && 'true' == $_GET['show_apache_only'] ) {
  82.         echo '<h4><a class="toplink" href="?">⮉</a>Apache-Version:</h4>'."\n";
  83.         echo findApache();
  84.         echo '<h4><a class="toplink" href="?">⮉</a>Apache-Module:</h4>'."\n";
  85.         echo '<p>' . str_replace( "\n",', ', trim (`ls /etc/apache2/mods-enabled | grep -v '.conf' | sed -e "s/\.load//"` ) ) . '</p>';
  86.         exit;
  87. } elseif ( isset( $_GET['show_nginx_only'] ) && 'true' == $_GET['show_nginx_only'] ) {
  88.         echo '<h4><a class="toplink" href="?">⮉</a>NGINX-Version:</h4>'."\n";
  89.         echo findNginx();
  90.         echo '<h4><a class="toplink" href="?">⮉</a>NGINX-Module:</h4>'."\n";
  91.         echo '<ul><li>' . str_replace( "\n",'<li>', trim (`ls "/etc/nginx/modules-enabled/" | sed -e "s/\.conf//"  | sed -e "s/^[0-9-]*//"` ) ) . '</ul>';
  92.         exit;  
  93. } elseif ( isset( $_GET['show_system_only'] ) && 'true' == $_GET['show_system_only'] ) {
  94.         echo '<h4><a class="toplink" href="?">⮉</a>Posix: System-Informationen:</h4>'."\n";
  95.         PrintHash( posix_uname(), true );
  96.         echo '<h4><a class="toplink" href="?">⮉</a>Posix: System-Limits:</h4>'."\n";
  97.         PrintHash( posix_getrlimit(), true );
  98.         echo '<h4><a class="toplink" href="#">⮉ </a>(nach oben)</h4>';
  99.         echo "</body>\n</html>\n";
  100.         exit;
  101. }
  102. ?>
  103. <nav><a href="#_SERVER">$_SERVER</a>
  104. <?php if ( isset( $_ENV ) and array_keys( $_ENV ) ) { ?>
  105.  | <a href="#_ENV">$_ENV</a>
  106. <?php } ?>
  107.  | <a href="#_GET">$_GET</a>
  108.  | <a href="#_POST">$_POST</a>
  109.  | <a href="#_COOKIE">$_COOKIE</a>
  110.  | <a href="#_SESSION">$_SESSION</a>
  111.  | <a href="#_REQUEST">$_REQUEST</a>
  112.  | <a href="#_FILES">$_FILES</a>
  113.  | <a href="#GLOBALS">$GLOBALS</a>
  114.  </nav><nav>(Nur:) <a href="<?=$_SERVER['PHP_SELF'];?>?show_ini_only=true">Ini-Settings</a>
  115.  | <a href="<?=$_SERVER['PHP_SELF'];?>?show_constants_only=true">Konstanten</a>
  116.  <?php if ( is_file( '/usr/bin/locale' ) ) { ?>
  117.  | <a href="?show_linuxlocales_only=true">Linux-locales</a>
  118.  <?php
  119.  }
  120. if ( findApache() ) {
  121. ?>
  122. | <a href="?show_apache_only=true">Apache-Informationen</a>
  123. <?php } else if ( findNginx() ) { ?>
  124. | <a href="?show_nginx_only=true">NGINX-Informationen</a>
  125. <?php } ?>
  126.  
  127. | <a href="?show_system_only=true">System-Informationen</a>
  128. </nav>
  129. <h4><a class="toplink" href="#">⮉</a>PHP-Version, SAPI und Module:</h4>
  130. <?php
  131. $pattern='/[0-9]+\.[0-9]+/';
  132. preg_match ( $pattern , phpversion(), $matches );
  133. if ( PHP_INFO_SHOW_USERNAMES ) {
  134. ?>
  135. <p>PHP <?=$matches[0]; ?> läuft als «<?=php_sapi_name(); ?>» mit den Rechten des Benutzers «<?=posix_getpwuid( posix_geteuid() )['name'];?>» (EUID: <?=posix_geteuid();?>), Gruppe «<?=posix_getgrgid( posix_getegid() )['name'];?>» (EGID: <?=posix_getegid();?>).</p>
  136. <?php }  else { ?>
  137. <p>PHP <?=$matches[0]; ?> läuft als «<?=php_sapi_name(); ?>» mit der EUID: <?=posix_geteuid();?> / EGID: <?=posix_getegid();?>.</p>
  138. <?php
  139. }
  140. unset( $pattern, $matches ); ?>
  141. <p>Geladene PHP-Erweiterungen: «<?=implode("», «", get_loaded_extensions());?>»</p>
  142.  
  143. <?php showVars (); ?>
  144. <h4><a class="toplink" href="#">⮉ </a>(nach oben)</h4>
  145. </body>
  146. </html><?php
  147.  
  148.  
  149. function return_bytes( $val ) {
  150.    $val = trim( $val );
  151.    $last = strtolower( $val[strlen( $val )-1] );
  152.    switch( $last ) {
  153.        // The 'G' modifier is available since PHP 5.1.0
  154.        case 'g':
  155.            $val *= 1024*1024*1024;
  156.        case 'm':
  157.            $val *= 1024*1024;
  158.        case 'k':
  159.            $val *= 1024;
  160.    }
  161.    return $val;
  162. }
  163.  
  164. function Printline ( $key, $val ) {
  165.         echo "\n" . "   <tr>\n          <td>" . htmlentities($key) . "</td>\n           <td>";
  166.         if ( is_array( $val ) ) {
  167.                 PrintHash ( $val, true );
  168.         } else {
  169.                 $s = str_replace( ' ', 'ㅤ', htmlentities( $val ) );
  170.                 if ( $s ) echo '«' . str_replace( ' ', 'ㅤ', htmlentities( $val ) ) . '»';
  171.         }
  172.         echo "</td>\n\t</tr>";
  173. }
  174.  
  175. function PrintHash ( $ar, $showhover=false ) {
  176.         $DontShow = [ '_ENV',  '_GET', '_POST', '_COOKIE', '_SESSION', '_REQUEST', '_FILES', '_SERVER', 'GLOBALS' ];
  177.         if ( isset($ar) && is_array( $ar ) && count( $ar ) ) {
  178.                 if ( $showhover ) {
  179.                         $class=" class='showhover'";
  180.                 } else {
  181.                         $class="";
  182.                 }
  183.                 echo '<table' . $class .  ">\n<thead>\n<tr><th>Schl&uuml;ssel</th><th>Wert</th></tr>\n</thead>\n<tbody>";
  184.                 foreach ( $ar as $key => $val ) {
  185.                         if ( ! in_array( $key, $DontShow ) ) {
  186.                                 Printline ( $key, $val );
  187.                         }
  188.                 }
  189.  
  190.                 echo "\n</tbody>\n</table>\n";
  191.         } else {
  192.                         echo "(leer)";
  193.         }
  194. }
  195.  
  196. class linuxLocales {
  197.         private $all;
  198.         function __construct () {
  199.                 if (! is_file( '/usr/bin/locale' ) ) {
  200.                                 return false;
  201.                 }
  202.                 $rows = explode( "\n", `/usr/bin/locale -a` );
  203.                 foreach ( $rows as $row ) {
  204.                         if ( $row = trim( $row ) ) {
  205.                                 $this -> all[] = $row;
  206.                         }
  207.                 }
  208.         }
  209.         function getLocales( $grep='' ) {
  210.                 if ( $grep ) {
  211.                         $pattern = '/^' .  $grep . '.*$/';
  212.                         $ar =  preg_grep( $pattern,  $this -> all );
  213.                         return $ar;
  214.                 } else {
  215.                         return $this -> all;
  216.                 }
  217.         }
  218. }
  219.  
  220. function iniShow () {
  221.         $arIni = ini_get_all( NULL, true );
  222.         foreach ( array_keys ( $arIni ) as $key ) {
  223.                 if ( in_array( $key, getForbiddenIniSettings() )  ){
  224.                         echo '
  225.                         <tr>
  226.                                 <td><strong>' . htmlentities( $key ) . '</strong></td>
  227.                                 <td>***********</td>';
  228.                 } elseif ( '' !==  $arIni[$key]['global_value']  && '' !== $arIni[$key]['local_value'] ) {
  229.                         echo '
  230.                         <tr>
  231.                                 <td><strong>' . htmlentities( $key ) . '</strong></td>';
  232.  
  233.                         if ( $arIni[$key]['global_value'] == $arIni[$key]['local_value'] )  {
  234.                                 echo '
  235.                                 <td>' . htmlentities( str_replace(',', ', ', strval( $arIni[$key]['global_value'] ) ) ) . '</td>';
  236.                         } else {
  237.                                         echo '
  238.                                 <td><strong>Lokal gültig: '  . htmlentities( str_replace( ',', ', ', $arIni[$key]['local_value']  ) ) . '( wird benutzt)</strong><br>
  239. Global gesetzt: ' . htmlentities( str_replace(',', ', ', strval( $arIni[$key]['local_value'] ) ) ) . '</td>';
  240.                         }
  241.                 }
  242.         }
  243. }
  244.  
  245. function showVars () {
  246.         $ar = [ '_GET', '_POST', '_COOKIE', '_SESSION', '_REQUEST', '_FILES', '_SERVER', 'GLOBALS' ];
  247.         if ( isset( $_ENV ) && array_keys( $_ENV ) ) {
  248.                 $new = count( $ar );
  249.                 $ar[$new] = $ar[ $new - 1 ];
  250.                 $ar[ $new - 1 ] = '_ENV';
  251.         }
  252.         foreach ( $ar as $varname ) {
  253.                 echo '<h4 id="' . $varname . '"><a class="toplink" href="#">⮉</a>Globale Variable «$' . $varname . '»:</h4>'."\n";
  254.  
  255.                 if ( '_GET' == $varname ) {
  256.                         echo '<h5>HTTP_QUERY_STRING:</h5>';
  257.                         if ( isset( $_SERVER['QUERY_STRING'] ) && $data = $_SERVER['QUERY_STRING'] ) {
  258.                                 echo '<pre>' . htmlspecialchars( $data ) . '</pre>';
  259.                         } else {
  260.                                 echo '<div>(leer)</div>';
  261.                         }
  262.                         echo '<h5>Generiertes $_GET:</h5>';
  263.                 }
  264.  
  265.                 if ( '_POST' == $varname ) {
  266.                         echo '<h5>php://input :</h5>';
  267.                         if ( $data = file_get_contents( 'php://input' ) ) {
  268.                                 echo '<pre>' . htmlspecialchars( $data ) . '</pre>';
  269.                         } else {
  270.                                 echo '<div>(leer)</div>';
  271.                         }
  272.                         echo '<h5>Generiertes $_POST:</h5>';
  273.                 }
  274.                 if ( 'GLOBALS' == $varname ) {
  275.                         $t=$ar; array_pop($t);
  276.                         echo '<p><strong>Hinweis:</strong> Die enthaltenen Superglobalen «$';
  277.                         echo implode('», «$', $t );
  278.                         echo '» werden hier nicht erneut angezeigt.</p>';
  279.                         unset( $t );
  280.                 }
  281.  
  282.                 @eval( 'PrintHash( $' . $varname . ', ( $varname !== "GLOBALS" ) );');
  283.  
  284.                 #$val=$$varname; PrintHash( ( $val), ( $val !== "GLOBALS" ) );
  285.                 #PrintHash( $$varname, ( $varname !== "GLOBALS" ) );
  286.         }
  287. }
  288.  
  289. function findApache() {
  290.         $apache = false;
  291.         foreach ( [
  292.                 '/usr/sbin/apache2',
  293.                 '/usr/sbin/apache',
  294.                 '/usr/sbin/httpd',
  295.                 '/usr/sbin/httpd2'
  296.         ] as $t ) {
  297.                 if ( is_file( $t ) ) {
  298.                                 $apache = $t;
  299.                                 unset( $t );
  300.                                 break;
  301.                 }
  302.         }
  303.  
  304.         if ( $apache && is_file('/etc/apache2/envvars' ) ) {
  305.                 $apache = ". /etc/apache2/envvars; $apache";
  306.                 return '<p>' . str_replace( "\n", "<br>", `$apache -v` ) . '</p>';
  307.         } else {
  308.                 return false;
  309.         }
  310. }
  311.  
  312. function findNginx() {
  313.         $nginx = false;
  314.         if ( ! is_file( '/usr/sbin/nginx' ) ) {
  315.                 return false;
  316.         }
  317.         return '<p>' . $_SERVER['SERVER_SOFTWARE']. '</p>';
  318. }
  319.  
  320.  
  321. function getForbiddenIniSettings() {
  322.         return array(
  323.                 'mysql.default_user',
  324.                 'mysql.default_password',
  325.                 'mysqli.default_pw',
  326.                 'mysqli.default_user',
  327.                 'odbc.default_pw',
  328.                 'odbc.default_user'
  329.         );
  330. }
  331.