phpBB php_info

Created Diff never expires
27 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
89 lines
55 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
106 lines
<?php
<?php
/**
/**
*
*
* This file is part of the phpBB Forum Software package.
* This file is part of the phpBB Forum Software package.
*
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
* @license GNU General Public License, version 2 (GPL-2.0)
*
*
* For full copyright and license information, please see
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
* the docs/CREDITS.txt file.
*
*
*/
*/


/**
namespace phpbb\acp\controller;
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}


class acp_php_info
class php_info
{
{
var $u_action;
/** @var \phpbb\acp\helper\controller */
protected $helper;


function main($id, $mode)
/** @var \phpbb\language\language */
{
protected $language;
global $template;


if ($mode != 'info')
/** @var \phpbb\template\template */
{
protected $template;
trigger_error('NO_MODE', E_USER_ERROR);
}


$this->tpl_name = 'acp_php_info';
/**
$this->page_title = 'ACP_PHP_INFO';
* Constructor.
*
* @param \phpbb\acp\helper\controller $helper ACP Controller helper object
* @param \phpbb\language\language $language Language object
* @param \phpbb\template\template $template Template object
*/
public function __construct(
\phpbb\acp\helper\controller $helper,
\phpbb\language\language $language,
\phpbb\template\template $template
)
{
$this->helper = $helper;
$this->language = $language;
$this->template = $template;
}


public function main()
{
ob_start();
ob_start();
phpinfo(INFO_GENERAL | INFO_CONFIGURATION | INFO_MODULES | INFO_VARIABLES);
phpinfo(INFO_GENERAL | INFO_CONFIGURATION | INFO_MODULES | INFO_VARIABLES);
$phpinfo = ob_get_clean();
$phpinfo = ob_get_clean();


$phpinfo = trim($phpinfo);
$phpinfo = trim($phpinfo);


// Here we play around a little with the PHP Info HTML to try and stylise
// Here we play around a little with the PHP Info HTML to try and stylise
// it along phpBB's lines ... hopefully without breaking anything. The idea
// it along phpBB's lines ... hopefully without breaking anything. The idea
// for this was nabbed from the PHP annotated manual
// for this was nabbed from the PHP annotated manual
preg_match_all('#<body[^>]*>(.*)</body>#si', $phpinfo, $output);
preg_match_all('#<body[^>]*>(.*)</body>#si', $phpinfo, $output);


if (empty($phpinfo) || empty($output[1][0]))
if (empty($phpinfo) || empty($output[1][0]))
{
{
trigger_error('NO_PHPINFO_AVAILABLE', E_USER_WARNING);
return trigger_error('NO_PHPINFO_AVAILABLE', E_USER_WARNING);
}
}


$output = $output[1][0];
$output = $output[1][0];


// expose_php can make the image not exist
// expose_php can make the image not exist
if (preg_match('#<a[^>]*><img[^>]*></a>#', $output))
if (preg_match('#<a[^>]*><img[^>]*></a>#', $output))
{
{
$output = preg_replace('#<tr class="v"><td>(.*?<a[^>]*><img[^>]*></a>)(.*?)</td></tr>#s', '<tr class="row1"><td><table class="type2"><tr><td>\2</td><td>\1</td></tr></table></td></tr>', $output);
$output = preg_replace('#<tr class="v"><td>(.*?<a[^>]*><img[^>]*></a>)(.*?)</td></tr>#s', '<tr class="row1"><td><table class="type2"><tr><td>\2</td><td>\1</td></tr></table></td></tr>', $output);
}
}
else
else
{
{
$output = preg_replace('#<tr class="v"><td>(.*?)</td></tr>#s', '<tr class="row1"><td><table class="type2"><tr><td>\1</td></tr></table></td></tr>', $output);
$output = preg_replace('#<tr class="v"><td>(.*?)</td></tr>#s', '<tr class="row1"><td><table class="type2"><tr><td>\1</td></tr></table></td></tr>', $output);
}
}
$output = preg_replace('#<table[^>]+>#i', '<table>', $output);
$output = preg_replace('#<table[^>]+>#i', '<table>', $output);
$output = preg_replace('#<img border="0"#i', '<img', $output);
$output = preg_replace('#<img border="0"#i', '<img', $output);
$output = str_replace(array('class="e"', 'class="v"', 'class="h"', '<hr />', '<font', '</font>'), array('class="row1"', 'class="row2"', '', '', '<span', '</span>'), $output);
$output = str_replace(['class="e"', 'class="v"', 'class="h"', '<hr />', '<font', '</font>'], ['class="row1"', 'class="row2"', '', '', '<span', '</span>'], $output);


// Fix invalid anchor names (eg "module_Zend Optimizer")
// Fix invalid anchor names (eg "module_Zend Optimizer")
$output = preg_replace_callback('#<a name="([^"]+)">#', array($this, 'remove_spaces'), $output);
$output = preg_replace_callback('#<a name="([^"]+)">#', [$this, 'remove_spaces'], $output);


if (empty($output))
if (empty($output))
{
{
trigger_error('NO_PHPINFO_AVAILABLE', E_USER_WARNING);
return trigger_error('NO_PHPINFO_AVAILABLE', E_USER_WARNING);
}
}


$orig_output = $output;
$orig_output = $output;


preg_match_all('#<div class="center">(.*)</div>#siU', $output, $output);
preg_match_all('#<div class="center">(.*)</div>#siU', $output, $output);
$output = (!empty($output[1][0])) ? $output[1][0] : $orig_output;
$output = !empty($output[1][0]) ? $output[1][0] : $orig_output;


$template->assign_var('PHPINFO', $output);
$this->template->assign_var('PHPINFO', $output);

return $this->helper->render('acp_php_info.html', $this->language->lang('ACP_PHP_INFO'));
}
}


function remove_spaces($matches)
/**
* Remove spaces from anchor names.
*
* @param array $matches
* @return string
*/
protected function remove_spaces(array $matches)
{
{
return '<a name="' . str_replace(' ', '_', $matches[1]) . '">';
return '<a name="' . str_replace(' ', '_', $matches[1]) . '">';
}
}
}
}