From ab7a5de7937d375cc869af9c1648b57bf35fa8f7 Mon Sep 17 00:00:00 2001 From: Micke Nordin Date: Fri, 29 Apr 2022 08:21:53 +0200 Subject: [PATCH 1/3] Respect user settings in php.ini if they are big enough In the admin guide: * https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/big_file_upload_configuration.html it is mentioned that you can tweek: * max_input_time * max_execution_time in order to enable larger file uploads. However, the current codebase will hard code these values to one hour, no matter what the user sets in php.ini. This patch will allow the user to set these settings in php.ini and they will be respected, if and only if, they are set to something bigger than 3600 seconds. Signed-off-by: Micke Nordin --- lib/base.php | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/lib/base.php b/lib/base.php index 66e57459a91d0..780d3fbeef796 100644 --- a/lib/base.php +++ b/lib/base.php @@ -623,16 +623,32 @@ public static function init() { throw new \RuntimeException('Could not set timezone to UTC'); } + //try to configure php to enable big file uploads. - //this doesn´t work always depending on the web server and php configuration. - //Let´s try to overwrite some defaults anyway + //this doesn´t work always depending on the webserver and php configuration. + //Let´s try to overwrite some defaults if they are smaller than 1 hour + // One hour is 3600 seconds + $time_limit = 3600; + + $max_execution_time_from_ini = @ini_get('max_execution_time'); + $biggest_max_execution_time = $time_limit; + if (isset($max_execution_time_from_ini)) { + $biggest_max_execution_time = max($time_limit, intval($max_execution_time_from_ini)); + } + @ini_set('max_execution_time', strval($biggest_max_execution_time)); + + $max_input_time_from_ini = @ini_get('max_input_time'); + $biggest_max_input_time = $time_limit; + if (isset($max_input_time_from_ini)) { + $biggest_max_input_time = max($time_limit, intval($max_input_time_from_ini)); + } + @ini_set('max_input_time', strval($biggest_max_input_time)); - //try to set the maximum execution time to 60min + //try to set the maximum execution time to the largest time limit we have if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) { - @set_time_limit(3600); + $biggest_time_limit = max($time_limit, $biggest_max_execution_time, $biggest_max_input_time); + @set_time_limit($biggest_time_limit); } - @ini_set('max_execution_time', '3600'); - @ini_set('max_input_time', '3600'); self::setRequiredIniValues(); self::handleAuthHeaders(); From da6e0d7ddb44802c04aac6f0f95bb648e9e11b2b Mon Sep 17 00:00:00 2001 From: Mikael Nordin Date: Sat, 30 Apr 2022 16:30:11 +0200 Subject: [PATCH 2/3] Simpler version as proposed by @artonage Co-authored-by: Louis <6653109+artonge@users.noreply.github.com> Signed-off-by: Micke Nordin --- lib/base.php | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/lib/base.php b/lib/base.php index 780d3fbeef796..87549ce6b0e45 100644 --- a/lib/base.php +++ b/lib/base.php @@ -627,27 +627,18 @@ public static function init() { //try to configure php to enable big file uploads. //this doesn´t work always depending on the webserver and php configuration. //Let´s try to overwrite some defaults if they are smaller than 1 hour - // One hour is 3600 seconds - $time_limit = 3600; - $max_execution_time_from_ini = @ini_get('max_execution_time'); - $biggest_max_execution_time = $time_limit; - if (isset($max_execution_time_from_ini)) { - $biggest_max_execution_time = max($time_limit, intval($max_execution_time_from_ini)); + if (intval(@ini_get('max_execution_time')?? 0) < 3600) { + @ini_set('max_execution_time', strval(3600)); } - @ini_set('max_execution_time', strval($biggest_max_execution_time)); - $max_input_time_from_ini = @ini_get('max_input_time'); - $biggest_max_input_time = $time_limit; - if (isset($max_input_time_from_ini)) { - $biggest_max_input_time = max($time_limit, intval($max_input_time_from_ini)); + if (intval(@ini_get('max_input_time')?? 0) < 3600) { + @ini_set('max_input_time', strval(3600)); } - @ini_set('max_input_time', strval($biggest_max_input_time)); //try to set the maximum execution time to the largest time limit we have if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) { - $biggest_time_limit = max($time_limit, $biggest_max_execution_time, $biggest_max_input_time); - @set_time_limit($biggest_time_limit); + @set_time_limit(strval(max(intval(@ini_get('max_execution_time')),intval(@ini_get('max_input_time'))))); } self::setRequiredIniValues(); From 47fd27bc4c593ad336bbd898d168c62345e4b6f6 Mon Sep 17 00:00:00 2001 From: Micke Nordin Date: Mon, 16 May 2022 10:14:53 +0200 Subject: [PATCH 3/3] Fix suggestions by @artonage Signed-off-by: Micke Nordin --- lib/base.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/base.php b/lib/base.php index 87549ce6b0e45..b601e4b19f2e4 100644 --- a/lib/base.php +++ b/lib/base.php @@ -628,17 +628,17 @@ public static function init() { //this doesn´t work always depending on the webserver and php configuration. //Let´s try to overwrite some defaults if they are smaller than 1 hour - if (intval(@ini_get('max_execution_time')?? 0) < 3600) { + if (intval(@ini_get('max_execution_time') ?? 0) < 3600) { @ini_set('max_execution_time', strval(3600)); } - if (intval(@ini_get('max_input_time')?? 0) < 3600) { + if (intval(@ini_get('max_input_time') ?? 0) < 3600) { @ini_set('max_input_time', strval(3600)); } //try to set the maximum execution time to the largest time limit we have if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) { - @set_time_limit(strval(max(intval(@ini_get('max_execution_time')),intval(@ini_get('max_input_time'))))); + @set_time_limit(max(intval(@ini_get('max_execution_time')), intval(@ini_get('max_input_time')))); } self::setRequiredIniValues();