Các tệp lớn có thể được tải lên bằng PHP theo hai cách. Cả hai chúng đều được thảo luận dưới đây -
- Bằng cách thay đổi giới hạn upload_max_filesize trong tệp php.ini.
- Bằng cách triển khai tải lên từng đoạn tệp, sẽ chia quá trình tải lên thành các phần nhỏ hơn để lắp ráp các phần này khi quá trình tải lên hoàn tất.
Tệp php.ini có thể được cập nhật như hình dưới đây -
upload_max_filesize = 50M post_max_size = 50M max_input_time = 300 max_execution_time = 300
Điều này nên tránh vì nó sẽ thay đổi cài đặt của máy chủ và các dự án khác.
Cập nhật tệp 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
Thay đổi cài đặt nội tuyến -
<?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); ?>
Lộn xộn
Trong quá trình này, một tệp lớn được chia thành các phần nhỏ hơn và sau đó được tải lên. Thư viện ‘Plupload’ có thể được tải xuống và sử dụng.
<?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"); ?>
Khi một tệp có kích thước lớn hơn 500 MB được cố gắng tải lên, tệp đó sẽ được tải lên thành công.