PHP का उपयोग करके बड़ी फ़ाइलों को दो तरह से अपलोड किया जा सकता है। उन दोनों की चर्चा नीचे की गई है -
- php.ini फ़ाइल में upload_max_filesize सीमा को बदलकर।
- फाइल चंक अपलोड को लागू करके, जो अपलोड को छोटे टुकड़ों में विभाजित करता है और अपलोड पूरा होने पर इन टुकड़ों को असेंबल करता है।
Php.ini फ़ाइल को नीचे दिखाए अनुसार अपडेट किया जा सकता है -
upload_max_filesize = 50M post_max_size = 50M max_input_time = 300 max_execution_time = 300
इससे बचा जाना चाहिए क्योंकि यह सर्वर और अन्य परियोजनाओं की सेटिंग्स को भी बदल देगा।
htacess फ़ाइल को अपडेट करना
php_value upload_max_filesize 50M php_value post_max_size 50M php_value max_input_time 300 php_value max_execution_time 300
इनलाइन सेटिंग बदलना -
<?php // changing the upload limits ini_set('upload_max_filesize', '50M'); ini_set('post_max_size', '50M'); ini_set('max_input_time', 300); ini_set('max_execution_time', 300); // destination folder is set $source = $_FILES["file-upload"]["tmp_name"]; $destination = $_FILES["file-upload"]["name"]; // uploaded folder is moved to the destination move_uploaded_file($source, $destination); ?>
चंकिंग
इस प्रक्रिया में, एक बड़ी फ़ाइल को छोटे भागों में विभाजित किया जाता है और फिर अपलोड किया जाता है। 'प्लुपलोड' लाइब्रेरी को डाउनलोड और इस्तेमाल किया जा सकता है।
<?php // the response function function verbose($ok=1,$info=""){ // failure to upload throws 400 error if ($ok==0) { http_response_code(400); } die(json_encode(["ok"=>$ok, "info"=>$info])); } // invalid upload if (empty($_FILES) || $_FILES['file']['error']) { verbose(0, "Failed to move uploaded file."); } // upload destination $filePath = __DIR__ . DIRECTORY_SEPARATOR . "uploads"; if (!file_exists($filePath)) { if (!mkdir($filePath, 0777, true)) { verbose(0, "Failed to create $filePath"); } } $fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : $_FILES["file"]["name"]; $filePath = $filePath . DIRECTORY_SEPARATOR . $fileName; // dealing with the chunks $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0; $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0; $out = @fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab"); if ($out) { $in = @fopen($_FILES['file']['tmp_name'], "rb"); if ($in) { while ($buff = fread($in, 4096)) { fwrite($out, $buff); } } else { verbose(0, "Failed to open input stream"); } @fclose($in); @fclose($out); @unlink($_FILES['file']['tmp_name']); } else { verbose(0, "Failed to open output stream"); } // check if file was uploaded if (!$chunks || $chunk == $chunks - 1) { rename("{$filePath}.part", $filePath); } verbose(1, "Upload OK"); ?>
जब कोई फ़ाइल जिसका आकार 500 एमबी से अधिक है, अपलोड करने का प्रयास किया जाता है, तो वह सफलतापूर्वक अपलोड हो जाती है।