From 93a9747657e55c8e19c6aea9284657173cc734d4 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Thu, 8 Nov 2018 09:28:03 -0500 Subject: [PATCH] Add @BitPoet processwire/processwire-requests#233 to make ajax file upload use chunked method for potential reduced memory usage and support of larger file uploads --- wire/core/WireUpload.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/wire/core/WireUpload.php b/wire/core/WireUpload.php index a77e6be0..4bb5f791 100644 --- a/wire/core/WireUpload.php +++ b/wire/core/WireUpload.php @@ -287,7 +287,21 @@ class WireUpload extends Wire { $filename = rawurldecode($filename); // per #1487 $dir = $this->getUploadDir(); $tmpName = tempnam($dir, wireClassName($this, false)); - file_put_contents($tmpName, file_get_contents('php://input')); + + // upload without chunks: + // file_put_contents($tmpName, file_get_contents('php://input')); + + // upload with chunks (via @BitPoet processwire-requests#233) + $uploadData = fopen("php://input", "rb"); + $saveFile = fopen($tmpName, "wb"); + $chunkSize = 8192 * 1024; // about 8 megabytes + while(!feof($uploadData)) { + $chunk = fread($uploadData, $chunkSize); + if($chunk !== false) fwrite($saveFile, $chunk); + } + fclose($saveFile); + fclose($uploadData); + $filesize = is_file($tmpName) ? filesize($tmpName) : 0; $error = $filesize ? UPLOAD_ERR_OK : UPLOAD_ERR_NO_FILE;