code.fastix.org

Dateiansicht:

Datei:Projekte -> PHP:Replacement für phpinfo() -> phpinfo.php
md5:484fa27709eb039d28eb792b4eda2c59
sha1:d314a9436a7f158688a88fdcdebd191d4eaa60ed
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</h4>
  35. <table class="showhover">
  36.         <tbody>
  37. <?php
  38.         iniShow();
  39. ?>
  40.  
  41.         </tbody>
  42. </table><?php
  43.         echo '<h4><a class="toplink" href="#">⮉ </a>(nach oben)</h4>';
  44.         echo "</body>\n</html>\n";
  45.         exit;
  46. } elseif ( isset( $_GET['show_constants_only'] ) && 'true' == $_GET['show_constants_only'] ) {
  47.         echo '<h4><a class="toplink" href="?">⮉</a>Konstanten:</h4>'."\n";
  48.         PrintHash( get_defined_constants( true ) );
  49.         echo '<h4><a class="toplink" href="#">⮉ </a>(nach oben)</h4>';
  50.         echo "</body>\n</html>\n";
  51.         exit;
  52. } elseif ( isset( $_GET['show_linuxlocales_only'] ) && 'true' == $_GET['show_linuxlocales_only'] ) {
  53.         echo '<h4><a class="toplink" href="?">⮉</a>Alle installierten Linux-Locales:</h4>'."\n";
  54.         if ( is_file( '/usr/bin/locale' ) ) {
  55.                 PrintHash ( ( new linuxLocales) -> getLocales(), true );
  56.         } else {
  57.                 echo "<p>Fehler: Dies scheint kein Linux zu sein.</p>";
  58.         }
  59.         echo '<h4><a class="toplink" href="#">⮉ </a>(nach oben)</h4>';
  60.         echo "</body>\n</html>\n";
  61.         exit;
  62. } elseif ( isset( $_GET['show_apache_only'] ) && 'true' == $_GET['show_apache_only'] ) {
  63.         echo '<h4><a class="toplink" href="?">⮉</a>Apache-Version:</h4>'."\n";
  64.         echo findApache();
  65.         echo '<h4><a class="toplink" href="?">⮉</a>Apache-Module:</h4>'."\n";
  66.         echo '<p>' . str_replace( "\n",', ', trim (`ls /etc/apache2/mods-enabled | grep -v '.conf' | sed -e "s/\.load//"` ) ) . '</p>';
  67.         exit;
  68. } elseif ( isset( $_GET['show_system_only'] ) && 'true' == $_GET['show_system_only'] ) {
  69.         echo '<h4><a class="toplink" href="?">⮉</a>Posix: System-Informationen:</h4>'."\n";
  70.         PrintHash( posix_uname(), true );
  71.         echo '<h4><a class="toplink" href="?">⮉</a>Posix: System-Limits:</h4>'."\n";
  72.         PrintHash( posix_getrlimit(), true );
  73.         echo '<h4><a class="toplink" href="#">⮉ </a>(nach oben)</h4>';
  74.         echo "</body>\n</html>\n";
  75.         exit;
  76. }
  77. ?>
  78. <nav><a href="#_SERVER">$_SERVER</a>
  79. <?php if ( isset( $_ENV ) and array_keys( $_ENV ) ) { ?>
  80.  | <a href="#_ENV">$_ENV</a>
  81. <?php } ?>
  82.  | <a href="#_GET">$_GET</a>
  83.  | <a href="#_POST">$_POST</a>
  84.  | <a href="#_COOKIE">$_COOKIE</a>
  85.  | <a href="#_SESSION">$_SESSION</a>
  86.  | <a href="#_REQUEST">$_REQUEST</a>
  87.  | <a href="#_FILES">$_FILES</a>
  88.  | <a href="#GLOBALS">$GLOBALS</a>
  89.  </nav><nav>(Nur:) <a href="<?=$_SERVER['PHP_SELF'];?>?show_ini_only=true">Ini-Settings</a>
  90.  | <a href="<?=$_SERVER['PHP_SELF'];?>?show_constants_only=true">Konstanten</a>
  91.  <?php if ( is_file( '/usr/bin/locale' ) ) { ?>
  92.  | <a href="?show_linuxlocales_only=true">Linux-locales</a>
  93.  <?php
  94.  }
  95. if ( findApache() ) {
  96. ?>
  97. | <a href="?show_apache_only=true">Apache-Informationen</a>
  98. <?php } ?>
  99. | <a href="?show_system_only=true">System-Informationen</a>
  100. </nav>
  101. <h4><a class="toplink" href="#">⮉</a>PHP-Version, SAPI und Module:</h4>
  102. <?php
  103. $pattern='/[0-9]+\.[0-9]+/';
  104. preg_match ( $pattern , phpversion(), $matches );
  105. if ( PHP_INFO_SHOW_USERNAMES ) {
  106. ?>
  107. <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>
  108. <?php }  else { ?>
  109. <p>PHP <?=$matches[0]; ?> läuft als «<?=php_sapi_name(); ?>» mit der EUID: <?=posix_geteuid();?> / EGID: <?=posix_getegid();?>.</p>
  110. <?php
  111. }
  112. unset( $pattern, $matches ); ?>
  113. <p>Geladene PHP-Erweiterungen: «<?=implode("», «", get_loaded_extensions());?>»</p>
  114.  
  115. <?php showVars (); ?>
  116. <h4><a class="toplink" href="#">⮉ </a>(nach oben)</h4>
  117. </body>
  118. </html><?php
  119.  
  120.  
  121. function return_bytes( $val ) {
  122.    $val = trim( $val );
  123.    $last = strtolower( $val[strlen( $val )-1] );
  124.    switch( $last ) {
  125.        // The 'G' modifier is available since PHP 5.1.0
  126.        case 'g':
  127.            $val *= 1024*1024*1024;
  128.        case 'm':
  129.            $val *= 1024*1024;
  130.        case 'k':
  131.            $val *= 1024;
  132.    }
  133.    return $val;
  134. }
  135.  
  136. function Printline ( $key, $val ) {
  137.         echo "\n" . "   <tr>\n          <td>" . htmlentities($key) . "</td>\n           <td>";
  138.         if ( is_array( $val ) ) {
  139.                 PrintHash ( $val, true );
  140.         } else {
  141.                 $s = str_replace( ' ', 'ㅤ', htmlentities( $val ) );
  142.                 if ( $s ) echo '«' . str_replace( ' ', 'ㅤ', htmlentities( $val ) ) . '»';
  143.         }
  144.         echo "</td>\n\t</tr>";
  145. }
  146.  
  147. function PrintHash ( $ar, $showhover=false ) {
  148.         $DontShow = [ '_ENV',  '_GET', '_POST', '_COOKIE', '_SESSION', '_REQUEST', '_FILES', '_SERVER', 'GLOBALS' ];
  149.         if ( isset($ar) && is_array( $ar ) && count( $ar ) ) {
  150.                 if ( $showhover ) {
  151.                         $class=" class='showhover'";
  152.                 } else {
  153.                         $class="";
  154.                 }
  155.                 echo '<table' . $class .  ">\n<thead>\n<tr><th>Schl&uuml;ssel</th><th>Wert</th></tr>\n</thead>\n<tbody>";
  156.                 foreach ( $ar as $key => $val ) {
  157.                         if ( ! in_array( $key, $DontShow ) ) {
  158.                                 Printline ( $key, $val );
  159.                         }
  160.                 }
  161.  
  162.                 echo "\n</tbody>\n</table>\n";
  163.         } else {
  164.                         echo "(leer)";
  165.         }
  166. }
  167.  
  168. class linuxLocales {
  169.         private $all;
  170.         function __construct () {
  171.                 if (! is_file( '/usr/bin/locale' ) ) {
  172.                                 return false;
  173.                 }
  174.                 $rows = explode( "\n", `/usr/bin/locale -a` );
  175.                 foreach ( $rows as $row ) {
  176.                         if ( $row = trim( $row ) ) {
  177.                                 $this -> all[] = $row;
  178.                         }
  179.                 }
  180.         }
  181.         function getLocales( $grep='' ) {
  182.                 if ( $grep ) {
  183.                         $pattern = '/^' .  $grep . '.*$/';
  184.                         $ar =  preg_grep( $pattern,  $this -> all );
  185.                         return $ar;
  186.                 } else {
  187.                         return $this -> all;
  188.                 }
  189.         }
  190. }
  191.  
  192. function iniShow () {
  193.         $arIni = ini_get_all( NULL, true );
  194.         foreach ( array_keys ( $arIni ) as $key ) {
  195.                 if ( in_array( $key, getForbiddenIniSettings() )  ){
  196.                         echo '
  197.                         <tr>
  198.                                 <td><strong>' . htmlentities( $key ) . '</strong></td>
  199.                                 <td>***********</td>';
  200.                 } elseif ( '' !==  $arIni[$key]['global_value']  && '' !== $arIni[$key]['local_value'] ) {
  201.                         echo '
  202.                         <tr>
  203.                                 <td><strong>' . htmlentities( $key ) . '</strong></td>';
  204.  
  205.                         if ( $arIni[$key]['global_value'] == $arIni[$key]['local_value'] )  {
  206.                                 echo '
  207.                                 <td>' . htmlentities( str_replace(',', ', ', strval( $arIni[$key]['global_value'] ) ) ) . '</td>';
  208.                         } else {
  209.                                         echo '
  210.                                 <td><strong>Lokal gültig: '  . htmlentities( str_replace( ',', ', ', $arIni[$key]['local_value']  ) ) . '( wird benutzt)</strong><br>
  211. Global gesetzt: ' . htmlentities( str_replace(',', ', ', strval( $arIni[$key]['local_value'] ) ) ) . '</td>';
  212.                         }
  213.                 }
  214.         }
  215. }
  216.  
  217. function showVars () {
  218.         $ar = [ '_GET', '_POST', '_COOKIE', '_SESSION', '_REQUEST', '_FILES', '_SERVER', 'GLOBALS' ];
  219.         if ( isset( $_ENV ) && array_keys( $_ENV ) ) {
  220.                 $new = count( $ar );
  221.                 $ar[$new] = $ar[ $new - 1 ];
  222.                 $ar[ $new - 1 ] = '_ENV';
  223.         }
  224.         foreach ( $ar as $varname ) {
  225.                 echo '<h4 id="' . $varname . '"><a class="toplink" href="#">⮉</a>Globale Variable «$' . $varname . '»:</h4>'."\n";
  226.  
  227.                 if ( '_GET' == $varname ) {
  228.                         echo '<h5>HTTP_QUERY_STRING:</h5>';
  229.                         if ( isset( $_SERVER['QUERY_STRING'] ) && $data = $_SERVER['QUERY_STRING'] ) {
  230.                                 echo '<pre>' . htmlspecialchars( $data ) . '</pre>';
  231.                         } else {
  232.                                 echo '<div>(leer)</div>';
  233.                         }
  234.                         echo '<h5>Generiertes $_GET:</h5>';
  235.                 }
  236.  
  237.                 if ( '_POST' == $varname ) {
  238.                         echo '<h5>php://input :</h5>';
  239.                         if ( $data = file_get_contents( 'php://input' ) ) {
  240.                                 echo '<pre>' . htmlspecialchars( $data ) . '</pre>';
  241.                         } else {
  242.                                 echo '<div>(leer)</div>';
  243.                         }
  244.                         echo '<h5>Generiertes $_POST:</h5>';
  245.                 }
  246.                 if ( 'GLOBALS' == $varname ) {
  247.                         $t=$ar; array_pop($t);
  248.                         echo '<p><strong>Hinweis:</strong> Die enthaltenen Superglobalen «$';
  249.                         echo implode('», «$', $t );
  250.                         echo '» werden hier nicht erneut angezeigt.</p>';
  251.                         unset( $t );
  252.                 }
  253.  
  254.                 @eval( 'PrintHash( $' . $varname . ', ( $varname !== "GLOBALS" ) );');
  255.  
  256.                 #$val=$$varname; PrintHash( ( $val), ( $val !== "GLOBALS" ) );
  257.                 #PrintHash( $$varname, ( $varname !== "GLOBALS" ) );
  258.         }
  259. }
  260.  
  261. function findApache() {
  262.         $apache = false;
  263.         foreach ( [
  264.                 '/usr/sbin/apache2',
  265.                 '/usr/sbin/apache',
  266.                 '/usr/sbin/httpd',
  267.                 '/usr/sbin/httpd2'
  268.         ] as $t ) {
  269.                 if ( is_file( $t ) ) {
  270.                                 $apache = $t;
  271.                                 unset( $t );
  272.                                 break;
  273.                 }
  274.         }
  275.  
  276.         if ( $apache && is_file('/etc/apache2/envvars' ) ) {
  277.                 $apache = ". /etc/apache2/envvars; $apache";
  278.                 return '<p>' . str_replace( "\n", "<br>", `$apache -v` ) . '</p>';
  279.         } else {
  280.                 return false;
  281.         }
  282. }
  283.  
  284. function getForbiddenIniSettings() {
  285.         return array(
  286.                 'mysql.default_user',
  287.                 'mysql.default_password',
  288.                 'mysqli.default_pw',
  289.                 'mysqli.default_user',
  290.                 'odbc.default_pw',
  291.                 'odbc.default_user'
  292.         );
  293. }