From bb67f6e2195a03b99d3d0e53c62e81b791af7377 Mon Sep 17 00:00:00 2001 From: Marek Bachmann Date: Fri, 25 Nov 2022 22:57:06 +0100 Subject: [PATCH] Added check if upload_max_filesize (php.ini) or friendica option 'maxfilesize' is dominant for the actual image upload limit and print out the lower (relevant) one. --- mod/photos.php | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/mod/photos.php b/mod/photos.php index a78f8d1012..f6ed55793b 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -914,9 +914,47 @@ function photos_content(App $a) '$submit' => DI::l10n()->t('Submit'), ]); - $maximagesize_bytes = DI::config()->get('system', 'maximagesize'); - $maximagesize_Mbytes = ($maximagesize_bytes / (10**6)); + /* This block determines which setting actually limits upload size of images: + * 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; + $dom_limitedby = ''; + { + // 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)); + $dom_limitedby = 'PHP.ini'; + } else { + $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($dom_limitedby) > 0) { + // $usage_message .= ' ('. $dom_limitedby . ')'; + // } $tpl = Renderer::getMarkupTemplate('photos_upload.tpl');