PHP का उपयोग करके बड़ी फ़ाइलें दो तरीकों से अपलोड की जा सकती हैं। दोनों पर नीचे चर्चा की गई है:
- php.ini फ़ाइल में upload_max_filesize लिमिट बदलकर।
- फ़ाइल चंक अपलोड को लागू करके, जो अपलोड को छोटे टुकड़ों में विभाजित करता है और अपलोड पूरा होने पर इन टुकड़ों को असेंबल करता है।
php.ini फ़ाइल को नीचे दिखाए अनुसार अपडेट किया जा सकता है:
upload_max_filesize = 50M post_max_size = 50M max_input_time = 300 max_execution_time = 300
इसे टाला जाना चाहिए क्योंकि यह सर्वर की सेटिंग्स और अन्य प्रोजेक्ट्स को भी बदल देगा।
htaccess फ़ाइल अपडेट करना
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
// अपलोड लिमिट्स बदलना
ini_set('upload_max_filesize', '50M');
ini_set('post_max_size', '50M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);
// डेस्टिनेशन फ़ोल्डर सेट है
$source = $_FILES["file-upload"]["tmp_name"];
$destination = $_FILES["file-upload"]["name"];
// अपलोड किए गए फ़ोल्डर को डेस्टिनेशन पर ले जाया जाता है
move_uploaded_file($source, $destination);
?>
चंकिंग
इस प्रक्रिया में, एक बड़ी फ़ाइल को छोटे भागों में विभाजित किया जाता है और फिर अपलोड किया जाता है। 'Plupload' लाइब्रेरी डाउनलोड और उपयोग की जा सकती है।
<?php
// रिस्पांस फ़ंक्शन
function verbose($ok = 1, $info = "") {
// अपलोड में विफलता 400 त्रुटि फेंकती है
if ($ok == 0) { http_response_code(400); }
die(json_encode(["ok" => $ok, "info" => $info]));
}
// अमान्य अपलोड
if (empty($_FILES) || $_FILES['file']['error']) {
verbose(0, "Failed to move uploaded file.");
}
// अपलोड डेस्टिनेशन
$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;
// चंक्स के साथ डील करना
$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");
}
// जांचें कि फ़ाइल अपलोड हुई या नहीं
if (!$chunks || $chunk == $chunks - 1) {
rename("{$filePath}.part", $filePath);
}
verbose(1, "Upload OK");
?>
जब 500 MB से अधिक आकार की फ़ाइल अपलोड करने का प्रयास किया जाता है, तो यह सफलतापूर्वक अपलोड हो जाती है।