From f6a93653bee0afe9b437cf5d59f950a2fe2b98cc Mon Sep 17 00:00:00 2001 From: divinity76 Date: Fri, 21 Apr 2023 06:35:45 +0200 Subject: [PATCH] use stream_copy_to_stream (#1014) * use stream_copy_to_stream it's simpler, and should be faster. For example, stream_copy_to_stream can use sendfile ( https://man7.org/linux/man-pages/man2/sendfile.2.html ) on operating systems supporting it, which is faster and use less RAM than fread()+fwrite() (because it avoids copying data to/from userland, doing the copy entirely in-kernel~) * fix loop early return, and workaround bug * use feof ref https://github.com/prasathmani/tinyfilemanager/issues/1016#issuecomment-1502081506 --- tinyfilemanager.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tinyfilemanager.php b/tinyfilemanager.php index ec3c608..d3a04a6 100644 --- a/tinyfilemanager.php +++ b/tinyfilemanager.php @@ -969,7 +969,12 @@ if (!empty($_FILES) && !FM_READONLY) { if ($out) { $in = @fopen($tmp_name, "rb"); if ($in) { - while ($buff = fread($in, 4096)) { fwrite($out, $buff); } + if (PHP_VERSION_ID < 80009) { + // workaround https://bugs.php.net/bug.php?id=81145 + while (!feof($in)) { fwrite($out, fread($in, 4096)); } + } else { + stream_copy_to_stream($in, $out); + } $response = array ( 'status' => 'success', 'info' => "file upload successful"