mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
Merge PR #834 branch 'bantu/ticket/10931' into develop
* bantu/ticket/10931: [ticket/10931] Apply strtolower() correctly, i.e. not on false. [ticket/10931] Also test get_bytes() and get_string() with false. [ticket/10931] Make to_numeric function globally available. [ticket/10931] Make sure get_bytes() always returns either an int or a float. [ticket/10931] Correctly handle inputs such as '-k' as invalid in get_bytes(). [ticket/10931] Use strict assertSame() instead of assertEquals(). [ticket/10931] Also test for negative values. [ticket/10931] Also test lower case units in test_get_bytes(). [ticket/10931] Correctly use GNU GPL version 2. [ticket/10931] Make it clear that we are mocking the ini_get() function. [ticket/10931] Document that false is also returned if value is not well formed [ticket/10931] Correct method description of get_string(). [ticket/10931] Let us try ini_get() without error suppression. [ticket/10931] Unit tests for phpbb_php_ini class. [ticket/10931] Add wrapper class for ini_get function.
This commit is contained in:
commit
300b420e01
4 changed files with 290 additions and 0 deletions
|
@ -4987,3 +4987,16 @@ function phpbb_pcre_utf8_support()
|
||||||
}
|
}
|
||||||
return $utf8_pcre_properties;
|
return $utf8_pcre_properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Casts a numeric string $input to an appropriate numeric type (i.e. integer or float)
|
||||||
|
*
|
||||||
|
* @param string $input A numeric string.
|
||||||
|
*
|
||||||
|
* @return int|float Integer $input if $input fits integer,
|
||||||
|
* float $input otherwise.
|
||||||
|
*/
|
||||||
|
function phpbb_to_numeric($input)
|
||||||
|
{
|
||||||
|
return ($input > PHP_INT_MAX) ? (float) $input : (int) $input;
|
||||||
|
}
|
||||||
|
|
175
phpBB/includes/php/ini.php
Normal file
175
phpBB/includes/php/ini.php
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
* @copyright (c) 2011 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
if (!defined('IN_PHPBB'))
|
||||||
|
{
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrapper class for ini_get function.
|
||||||
|
*
|
||||||
|
* Provides easier handling of the different interpretations of ini values.
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
*/
|
||||||
|
class phpbb_php_ini
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Simple wrapper for ini_get()
|
||||||
|
* See http://php.net/manual/en/function.ini-get.php
|
||||||
|
*
|
||||||
|
* @param string $varname The configuration option name.
|
||||||
|
* @return bool|string False if configuration option does not exist,
|
||||||
|
* the configuration option value (string) otherwise.
|
||||||
|
*/
|
||||||
|
public function get($varname)
|
||||||
|
{
|
||||||
|
return ini_get($varname);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the configuration option value as a trimmed string.
|
||||||
|
*
|
||||||
|
* @param string $varname The configuration option name.
|
||||||
|
* @return bool|string False if configuration option does not exist,
|
||||||
|
* the configuration option value (string) otherwise.
|
||||||
|
*/
|
||||||
|
public function get_string($varname)
|
||||||
|
{
|
||||||
|
$value = $this->get($varname);
|
||||||
|
|
||||||
|
if ($value === false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return trim($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets configuration option value as a boolean.
|
||||||
|
* Interprets the string value 'off' as false.
|
||||||
|
*
|
||||||
|
* @param string $varname The configuration option name.
|
||||||
|
* @return bool False if configuration option does not exist.
|
||||||
|
* False if configuration option is disabled.
|
||||||
|
* True otherwise.
|
||||||
|
*/
|
||||||
|
public function get_bool($varname)
|
||||||
|
{
|
||||||
|
$value = $this->get_string($varname);
|
||||||
|
|
||||||
|
if (empty($value) || strtolower($value) == 'off')
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets configuration option value as an integer.
|
||||||
|
*
|
||||||
|
* @param string $varname The configuration option name.
|
||||||
|
* @return bool|int False if configuration option does not exist,
|
||||||
|
* false if configuration option value is not numeric,
|
||||||
|
* the configuration option value (integer) otherwise.
|
||||||
|
*/
|
||||||
|
public function get_int($varname)
|
||||||
|
{
|
||||||
|
$value = $this->get_string($varname);
|
||||||
|
|
||||||
|
if (!is_numeric($value))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int) $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets configuration option value as a float.
|
||||||
|
*
|
||||||
|
* @param string $varname The configuration option name.
|
||||||
|
* @return bool|float False if configuration option does not exist,
|
||||||
|
* false if configuration option value is not numeric,
|
||||||
|
* the configuration option value (float) otherwise.
|
||||||
|
*/
|
||||||
|
public function get_float($varname)
|
||||||
|
{
|
||||||
|
$value = $this->get_string($varname);
|
||||||
|
|
||||||
|
if (!is_numeric($value))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (float) $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets configuration option value in bytes.
|
||||||
|
* Converts strings like '128M' to bytes (integer or float).
|
||||||
|
*
|
||||||
|
* @param string $varname The configuration option name.
|
||||||
|
* @return bool|int|float False if configuration option does not exist,
|
||||||
|
* false if configuration option value is not well-formed,
|
||||||
|
* the configuration option value otherwise.
|
||||||
|
*/
|
||||||
|
public function get_bytes($varname)
|
||||||
|
{
|
||||||
|
$value = $this->get_string($varname);
|
||||||
|
|
||||||
|
if ($value === false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_numeric($value))
|
||||||
|
{
|
||||||
|
// Already in bytes.
|
||||||
|
return phpbb_to_numeric($value);
|
||||||
|
}
|
||||||
|
else if (strlen($value) < 2)
|
||||||
|
{
|
||||||
|
// Single character.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (strlen($value) < 3 && $value[0] === '-')
|
||||||
|
{
|
||||||
|
// Two characters but the first one is a minus.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$value_lower = strtolower($value);
|
||||||
|
$value_numeric = phpbb_to_numeric($value);
|
||||||
|
|
||||||
|
switch ($value_lower[strlen($value_lower) - 1])
|
||||||
|
{
|
||||||
|
case 'g':
|
||||||
|
$value_numeric *= 1024;
|
||||||
|
case 'm':
|
||||||
|
$value_numeric *= 1024;
|
||||||
|
case 'k':
|
||||||
|
$value_numeric *= 1024;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// It's not already in bytes (and thus numeric)
|
||||||
|
// and does not carry a unit.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $value_numeric;
|
||||||
|
}
|
||||||
|
}
|
16
tests/wrapper/phpbb_php_ini_fake.php
Normal file
16
tests/wrapper/phpbb_php_ini_fake.php
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package testing
|
||||||
|
* @copyright (c) 2011 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class phpbb_php_ini_fake extends phpbb_php_ini
|
||||||
|
{
|
||||||
|
function get($varname)
|
||||||
|
{
|
||||||
|
return $varname;
|
||||||
|
}
|
||||||
|
}
|
86
tests/wrapper/phpbb_php_ini_test.php
Normal file
86
tests/wrapper/phpbb_php_ini_test.php
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package testing
|
||||||
|
* @copyright (c) 2011 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once dirname(__FILE__) . '/phpbb_php_ini_fake.php';
|
||||||
|
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||||
|
|
||||||
|
class phpbb_wrapper_phpbb_php_ini_test extends phpbb_test_case
|
||||||
|
{
|
||||||
|
protected $php_ini;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
$this->php_ini = new phpbb_php_ini_fake;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_get_string()
|
||||||
|
{
|
||||||
|
$this->assertSame(false, $this->php_ini->get_string(false));
|
||||||
|
$this->assertSame('phpbb', $this->php_ini->get_string(' phpbb '));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_get_bool()
|
||||||
|
{
|
||||||
|
$this->assertSame(true, $this->php_ini->get_bool('ON'));
|
||||||
|
$this->assertSame(true, $this->php_ini->get_bool('on'));
|
||||||
|
$this->assertSame(true, $this->php_ini->get_bool('1'));
|
||||||
|
|
||||||
|
$this->assertSame(false, $this->php_ini->get_bool('OFF'));
|
||||||
|
$this->assertSame(false, $this->php_ini->get_bool('off'));
|
||||||
|
$this->assertSame(false, $this->php_ini->get_bool('0'));
|
||||||
|
$this->assertSame(false, $this->php_ini->get_bool(''));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_get_int()
|
||||||
|
{
|
||||||
|
$this->assertSame(1234, $this->php_ini->get_int('1234'));
|
||||||
|
$this->assertSame(-12345, $this->php_ini->get_int('-12345'));
|
||||||
|
$this->assertSame(false, $this->php_ini->get_int('phpBB'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_get_float()
|
||||||
|
{
|
||||||
|
$this->assertSame(1234.0, $this->php_ini->get_float('1234'));
|
||||||
|
$this->assertSame(-12345.0, $this->php_ini->get_float('-12345'));
|
||||||
|
$this->assertSame(false, $this->php_ini->get_float('phpBB'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_get_bytes_invalid()
|
||||||
|
{
|
||||||
|
$this->assertSame(false, $this->php_ini->get_bytes(false));
|
||||||
|
$this->assertSame(false, $this->php_ini->get_bytes('phpBB'));
|
||||||
|
$this->assertSame(false, $this->php_ini->get_bytes('k'));
|
||||||
|
$this->assertSame(false, $this->php_ini->get_bytes('-k'));
|
||||||
|
$this->assertSame(false, $this->php_ini->get_bytes('M'));
|
||||||
|
$this->assertSame(false, $this->php_ini->get_bytes('-M'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider get_bytes_data
|
||||||
|
*/
|
||||||
|
public function test_get_bytes($expected, $value)
|
||||||
|
{
|
||||||
|
$actual = $this->php_ini->get_bytes($value);
|
||||||
|
|
||||||
|
$this->assertTrue(is_float($actual) || is_int($actual));
|
||||||
|
$this->assertEquals($expected, $actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function get_bytes_data()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array(32 * pow(2, 20), '32m'),
|
||||||
|
array(- 32 * pow(2, 20), '-32m'),
|
||||||
|
array(8 * pow(2, 30), '8G'),
|
||||||
|
array(- 8 * pow(2, 30), '-8G'),
|
||||||
|
array(1234, '1234'),
|
||||||
|
array(-12345, '-12345'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue