Upload và giải nén file zip trực tiếp trên web server bằng PHP

16/02/2014

Hôm nay mình sẽ cùng với các bạn viết một ứng dụng nhỏ bằng PHP, trong ứng dụng này, chúng ta sẽ tạo một chức năng upload file zip, và file zip này sẽ tự động được giải nén ngay khi nó được up lên web server. Khi file zip được upload lên , chương trình sẽ tự động tạo một folder cùng tên với file zip và rồi nó sẽ đếm số lượng files và folder có trong file zip ,sau đó giải nén tất cả vào ngay bên trong folder mới vừa tạo này.

uncompress_zip_code-php

Khi thực hiện ứng dụng này, các bạn phải đảm bảo rằng web server mà các bạn đang dùng có kích hoạt ZiP Library, nếu không thì các bạn có thể liên hệ với nhà cung cấp dịch hosting của mình để nhờ họ bật tính năng này lên.

HTML Code

Đầu tiên , chúng ta sẽ cần có một form upload file zip như sau :

<div class="box">
<div class="heading">Upload File and Unzip</div>
<div class="form_field">
<form enctype="multipart/form-data" method="post" action="upload.php">
<label>Upload Zip File: </label> <input type="file" name="zip_file">
<br><br>
<input type="submit" name="submit" value="Upload" class="upload"> <br><br>
</form>
</div>
</div>

PHP Code

Bây giờ các bạn tạo file mới và đặt tên là upload.php, sau đó copy toàn bộ đoạn code bên dưới vào file này :

<?php
function recursive_dir($dir) {
foreach(scandir($dir) as $file) {
if ('.' === $file || '..' === $file) continue;
if (is_dir("$dir/$file")) recursive_dir("$dir/$file");
else unlink("$dir/$file");
}
rmdir($dir);
}

if($_FILES["zip_file"]["name"]) {
$filename = $_FILES["zip_file"]["name"];
$source = $_FILES["zip_file"]["tmp_name"];
$type = $_FILES["zip_file"]["type"];

$name = explode(".", $filename);
$accepted_types = array('application/zip', 'application/x-zip-compressed',
'multipart/x-zip', 'application/x-compressed');
foreach($accepted_types as $mime_type) {
if($mime_type == $type) {
$okay = true;
break;
}
}
// kiem tra xem file upload len co phai la file zip khong
$continue = strtolower($name[1]) == 'zip' ? true : false;
if(!$continue) {
$myMsg = "Please upload a valid .zip file.";
}

/* PHP current path */
$path = dirname(__FILE__).'/';
$filenoext = basename ($filename, '.zip');
$filenoext = basename ($filenoext, '.ZIP');

$myDir = $path . $filenoext; // target directory
$myFile = $path . $filename; // target zip file

if (is_dir($myDir)) recursive_dir ( $myDir);
mkdir($myDir, 0777);

if(move_uploaded_file($source, $myFile)) {
$zip = new ZipArchive();
$x = $zip->open($myFile); // open the zip file to extract
if ($x === true) {
$zip->extractTo($myDir); // place in the directory with same name
$zip->close();
unlink($myFile);
}
echo $myMsg = "Your .zip file uploaded and unziped.";
} else {
echo $myMsg = "There was a problem with the upload.";
}
}
?>

Mình hy vọng các bạn sẽ thấy thích với ứng dụng đơn giản này, mong rằng qua bài viết này, các bạn có thể tích lũy thêm kinh nghiệm trong lĩnh vực lập trình nói chung và ngôn ngữ PHP nói riêng.

Chuyên Mục:

Bài viết được đăng bởi webmaster

Nếu các bạn thấy bài viết hữu ích thì giúp mình Like cái nhé !