Merge pull request #848 from ArthurHoaro/hotfix/upload-maxsize

Use raw bytes for upload size hidden input
This commit is contained in:
ArthurHoaro 2017-04-25 19:03:29 +02:00 committed by GitHub
commit 504c9df4e7
4 changed files with 35 additions and 7 deletions

View file

@ -414,23 +414,24 @@ function human_bytes($bytes)
$bytes /= 1024; $bytes /= 1024;
} }
return $bytes . $units[$i]; return round($bytes) . $units[$i];
} }
/** /**
* Try to determine max file size for uploads (POST). * Try to determine max file size for uploads (POST).
* Returns an integer (in bytes) * Returns an integer (in bytes) or formatted depending on $format.
* *
* @param mixed $limitPost post_max_size PHP setting * @param mixed $limitPost post_max_size PHP setting
* @param mixed $limitUpload upload_max_filesize PHP setting * @param mixed $limitUpload upload_max_filesize PHP setting
* @param bool $format Format max upload size to human readable size
* *
* @return int max upload file size in bytes. * @return int|string max upload file size
*/ */
function get_max_upload_size($limitPost, $limitUpload) function get_max_upload_size($limitPost, $limitUpload, $format = true)
{ {
$size1 = return_bytes($limitPost); $size1 = return_bytes($limitPost);
$size2 = return_bytes($limitUpload); $size2 = return_bytes($limitUpload);
// Return the smaller of two: // Return the smaller of two:
$maxsize = min($size1, $size2); $maxsize = min($size1, $size2);
return human_bytes($maxsize); return $format ? human_bytes($maxsize) : $maxsize;
} }

View file

@ -1489,7 +1489,22 @@ function renderPage($conf, $pluginManager, $LINKSDB)
if (! isset($_POST['token']) || ! isset($_FILES['filetoupload'])) { if (! isset($_POST['token']) || ! isset($_FILES['filetoupload'])) {
// Show import dialog // Show import dialog
$PAGE->assign('maxfilesize', get_max_upload_size(ini_get('post_max_size'), ini_get('upload_max_filesize'))); $PAGE->assign(
'maxfilesize',
get_max_upload_size(
ini_get('post_max_size'),
ini_get('upload_max_filesize'),
false
)
);
$PAGE->assign(
'maxfilesizeHuman',
get_max_upload_size(
ini_get('post_max_size'),
ini_get('upload_max_filesize'),
true
)
);
$PAGE->renderPage('import'); $PAGE->renderPage('import');
exit; exit;
} }

View file

@ -392,13 +392,14 @@ class UtilsTest extends PHPUnit_Framework_TestCase
$this->assertEquals('2GiB', human_bytes(strval(2 * (pow(1024, 3))))); $this->assertEquals('2GiB', human_bytes(strval(2 * (pow(1024, 3)))));
$this->assertEquals('374B', human_bytes(374)); $this->assertEquals('374B', human_bytes(374));
$this->assertEquals('374B', human_bytes('374')); $this->assertEquals('374B', human_bytes('374'));
$this->assertEquals('232kiB', human_bytes(237481));
$this->assertEquals('Unlimited', human_bytes('0')); $this->assertEquals('Unlimited', human_bytes('0'));
$this->assertEquals('Unlimited', human_bytes(0)); $this->assertEquals('Unlimited', human_bytes(0));
$this->assertEquals('Setting not set', human_bytes('')); $this->assertEquals('Setting not set', human_bytes(''));
} }
/** /**
* Test get_max_upload_size * Test get_max_upload_size with formatting
*/ */
public function testGetMaxUploadSize() public function testGetMaxUploadSize()
{ {
@ -406,4 +407,14 @@ class UtilsTest extends PHPUnit_Framework_TestCase
$this->assertEquals('1MiB', get_max_upload_size('1m', '2m')); $this->assertEquals('1MiB', get_max_upload_size('1m', '2m'));
$this->assertEquals('100B', get_max_upload_size(100, 100)); $this->assertEquals('100B', get_max_upload_size(100, 100));
} }
/**
* Test get_max_upload_size without formatting
*/
public function testGetMaxUploadSizeRaw()
{
$this->assertEquals('1048576', get_max_upload_size(2097152, '1024k', false));
$this->assertEquals('1048576', get_max_upload_size('1m', '2m', false));
$this->assertEquals('100', get_max_upload_size(100, 100, false));
}
} }

View file

@ -18,6 +18,7 @@
<div class="center" id="import-field"> <div class="center" id="import-field">
<input type="hidden" name="MAX_FILE_SIZE" value="{$maxfilesize}"> <input type="hidden" name="MAX_FILE_SIZE" value="{$maxfilesize}">
<input type="file" name="filetoupload"> <input type="file" name="filetoupload">
<p><br>Maximum size allowed: <strong>{$maxfilesizeHuman}</strong></p>
</div> </div>
<div class="pure-g"> <div class="pure-g">