* limit of Friendica ('maximagesize') or upload_max_filesize
* and outputs the lower one.
*/
- // init output var in case no number value could be retrieved.
$maximagesize_Mbytes = 0;
- $sizelimitedby = '';
{
// Get the relevant size limits for uploads. Abbreviated var names: MaxImageSize -> mis; upload_max_filesize -> umf
$mis_bytes = DI::config()->get('system', 'maximagesize');
- // get_cfg_var('upload_max_filesize') outputs a string in the shorthand notation, need to convert it to bytes
- $umf_string = get_cfg_var('upload_max_filesize');
- $umf_bytes = filter_var($umf_string, FILTER_SANITIZE_NUMBER_INT);
- switch (substr($umf_string, -1)) {
- // According to https://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes only K, M, and G is used.
- case 'M':
- $umf_bytes *= 10**6;
- break;
- case 'K':
- $umf_bytes *= 10**3;
- break;
- case 'G':
- $umf_bytes *= 10**9;
- break;
- }
- if (is_numeric($mis_bytes) && is_numeric($umf_bytes)) {
- // When PHP is configured with upload_max_filesize less than maximagesize provide this lower limit.
- if ($umf_bytes < $mis_bytes) {
- $maximagesize_Mbytes = ($umf_bytes / (10 ** 6));
- $sizelimitedby = 'PHP.ini';
- } else {
- $maximagesize_Mbytes = ($mis_bytes / (10 ** 6));
+ $umf_bytes = Strings::getBytesFromShorthand(get_cfg_var('upload_max_filesize'));
- }
+ if (is_numeric($mis_bytes)) {
+ // When PHP is configured with upload_max_filesize less than maximagesize provide this lower limit.
+ ($umf_bytes < $mis_bytes) ?
+ ($maximagesize_Mbytes = ($umf_bytes / (10 ** 6))) : ($maximagesize_Mbytes = ($mis_bytes / (10 ** 6)));
}
}
- $usage_message = DI::l10n()->t('The maximum accepted image size is %.3g MB', $maximagesize_Mbytes);
- // Do we want to bother the end user with this information? If yes uncomment
- //if (strlen($sizelimitedby) > 0) {
- // $usage_message .= ' ('. $sizelimitedby . ')';
- //}
+ $usage_message = DI::l10n()->t('The maximum accepted image size is %.3g MB', Strings::getBytesFromShorthand(get_cfg_var('upload_max_filesize')));
$tpl = Renderer::getMarkupTemplate('photos_upload.tpl');
return $text;
}
+
+ /**
+ * This function converts a PHP's shorhand notation string for file sizes in to an integer number of total bytes.
+ * For example: The string for shorthand notation of '2M' (which is 2,097,152 Bytes) is converted to 2097152
+ * For more information about file size shorhand notation see:
+ * https://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
+ * @param string $shorthand
+ * @return int
+ */
+ public static function getBytesFromShorthand(string $shorthand): int
+ {
+ $shorthand = trim($shorthand);
+
+ if (is_numeric($shorthand))
+ return $shorthand;
+
+ $last = strtolower($shorthand[strlen($shorthand)-1]);
+ $shorthand = substr($shorthand, 0, -1); // necessary since PHP 7.1; otherwise optional
+
+ switch($last) {
+ // The 'G' modifier is available since PHP 5.1.0
+ case 'g':
+ $shorthand *= 1024;
+ case 'm':
+ $shorthand *= 1024;
+ case 'k':
+ $shorthand *= 1024;
+ }
+
+ return $shorthand;
+ }
}