Làm cách nào để nén tệp trong php?

Gần đây tôi phải viết một tập lệnh để tạo một tệp zip chứa các tệp và thư mục khác nhau. PHP có một lớp ZipArchive có thể dễ dàng sử dụng để tạo các tệp zip. Trong bài viết này, chúng ta sẽ xem cách tạo tệp zip trong PHP. Chúng tôi sẽ tạo các tệp zip khác nhau từ các tệp và thư mục khác nhau

Tạo một tệp nén mới

Đoạn mã sau sẽ mở một tệp zip test_new.zip và thêm một vài tệp vào đó

	$zip = new ZipArchive;
	if ($zip->open('test_new.zip', ZipArchive::CREATE) === TRUE)
	{
		// Add files to the zip file
		$zip->addFile('test.txt');
		$zip->addFile('test.pdf');

		// Add random.txt file to zip and rename it to newfile.txt
		$zip->addFile('random.txt', 'newfile.txt');

		// Add a file new.txt file to zip using the text specified
		$zip->addFromString('new.txt', 'text to be added to the new.txt file');

		// All files are added, so close the zip file.
		$zip->close();
	}
Giải thích về mã
  • Dòng 1 tạo một đối tượng của lớp ZipArchive
  • Dòng 2 mở một tệp có tên tệp là test_new.zip để chúng tôi có thể thêm tệp vào đó. Cờ ZipArchive::CREATE xác định rằng chúng tôi muốn tạo một tệp zip mới
  • Dòng 5 & 6 được sử dụng để thêm tệp vào tệp zip
  • Dòng 9 được sử dụng để thêm một tệp có tên random.txt vào tệp zip và đổi tên nó trong tệp zip thành
    	$zip = new ZipArchive;
    	if ($zip->open('test_overwrite.zip', ZipArchive::OVERWRITE) === TRUE)
    	{
    		// Add file to the zip file
    		$zip->addFile('test.txt');
    		$zip->addFile('test.pdf');
    
    		// All files are added, so close the zip file.
    		$zip->close();
    	}
    0
  • Dòng 12 được sử dụng để thêm một tệp mới
    	$zip = new ZipArchive;
    	if ($zip->open('test_overwrite.zip', ZipArchive::OVERWRITE) === TRUE)
    	{
    		// Add file to the zip file
    		$zip->addFile('test.txt');
    		$zip->addFile('test.pdf');
    
    		// All files are added, so close the zip file.
    		$zip->close();
    	}
    1 với nội dung của tệp là 'văn bản được thêm vào tệp mới. tệp txt'
  • Dòng 15 đóng và lưu các thay đổi vào tệp zip

Ghi chú. Đôi khi có thể xảy ra sự cố khi sử dụng đường dẫn tương đối cho tệp. Nếu có bất kỳ vấn đề nào khi sử dụng đường dẫn thì chúng tôi cũng có thể sử dụng đường dẫn tuyệt đối cho tệp

Ghi đè lên một tệp zip hiện có

Nếu bạn muốn ghi đè lên một tệp zip hiện có thì chúng tôi có thể sử dụng mã tương tự như sau. Cờ

	$zip = new ZipArchive;
	if ($zip->open('test_overwrite.zip', ZipArchive::OVERWRITE) === TRUE)
	{
		// Add file to the zip file
		$zip->addFile('test.txt');
		$zip->addFile('test.pdf');

		// All files are added, so close the zip file.
		$zip->close();
	}
2 ghi đè lên tệp zip hiện có

Một hình ảnh kích thước lớn mất nhiều thời gian hơn để tải một trang web. Muốn load ảnh dung lượng lớn mà không ảnh hưởng đến thời gian tải trang thì ảnh cần được tối ưu để giảm dung lượng. Nén hình ảnh rất hữu ích để giảm kích thước của hình ảnh. Đa số trường hợp do người dùng không tối ưu hình ảnh khi upload qua website. Bạn nên nén hình ảnh và tối ưu hóa kích thước tệp trước khi tải chúng lên máy chủ

Nén và tối ưu hóa hình ảnh trước khi tải lên có thể dễ dàng thực hiện bằng PHP. Trong chức năng nén ảnh, kích thước tệp được giảm trước khi tải lên. Hình ảnh được nén giúp giảm việc sử dụng bộ nhớ của máy chủ và tải trang web nhanh hơn. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách nén hình ảnh trước khi tải lên bằng PHP

Biểu mẫu tải tệp lên

Tạo biểu mẫu HTML với trường nhập tệp và nút gửi. Hãy đảm bảo rằng

thẻ chứa các thuộc tính sau
  • method="post"
  • enctype="multipart/form-data"
    Select Image File:
    
    

Sau khi gửi biểu mẫu, dữ liệu tệp được gửi đến tệp upload.php để xử lý thêm

Nén và tải lên hình ảnh với PHP

Tệp upload.php xử lý các hoạt động tải lên và nén hình ảnh

CompressImage() là một hàm tùy chỉnh giúp nén và lưu ảnh trên máy chủ bằng PHP. Hàm này chấp nhận các tham số sau và trả về hình ảnh đã nén

  • $source – Nguồn tệp hình ảnh để nén kích thước
  • $destination – Đường dẫn máy chủ để lưu hình ảnh đã nén
  • function compressImage($source, $destination, $quality) {
        // Get image info
        $imgInfo = getimagesize($source);
        $mime = $imgInfo['mime'];

        // Create a new image from file
        switch($mime){
            case 'image/jpeg':
                $image = imagecreatefromjpeg($source);
                break;
            case 'image/png':
                $image = imagecreatefrompng($source);
                break;
            case 'image/gif':
                $image = imagecreatefromgif($source);
                break;
            default:
                $image = imagecreatefromjpeg($source);
        }

        // Save image
        imagejpeg($image, $destination, $quality);

        // Return compressed image
        return $destination;
    }

    0 – Chất lượng hình ảnh
function compressImage($source, $destination, $quality) {
    // Get image info
    $imgInfo = getimagesize($source);
    $mime = $imgInfo['mime'];

    // Create a new image from file
    switch($mime){
        case 'image/jpeg':
            $image = imagecreatefromjpeg($source);
            break;
        case 'image/png':
            $image = imagecreatefrompng($source);
            break;
        case 'image/gif':
            $image = imagecreatefromgif($source);
            break;
        default:
            $image = imagecreatefromjpeg($source);
    }

    // Save image
    imagejpeg($image, $destination, $quality);

    // Return compressed image
    return $destination;
}

convert_filesize() là một chức năng tùy chỉnh được sử dụng để chuyển đổi kích thước tệp thành định dạng mà con người có thể đọc được. Hàm này chấp nhận các tham số sau và trả về kích thước tính bằng KB/MB/GB/TB/etc

  • function compressImage($source, $destination, $quality) {
        // Get image info
        $imgInfo = getimagesize($source);
        $mime = $imgInfo['mime'];

        // Create a new image from file
        switch($mime){
            case 'image/jpeg':
                $image = imagecreatefromjpeg($source);
                break;
            case 'image/png':
                $image = imagecreatefrompng($source);
                break;
            case 'image/gif':
                $image = imagecreatefromgif($source);
                break;
            default:
                $image = imagecreatefromjpeg($source);
        }

        // Save image
        imagejpeg($image, $destination, $quality);

        // Return compressed image
        return $destination;
    }

    1 – Kích thước tệp tính bằng byte
  • function compressImage($source, $destination, $quality) {
        // Get image info
        $imgInfo = getimagesize($source);
        $mime = $imgInfo['mime'];

        // Create a new image from file
        switch($mime){
            case 'image/jpeg':
                $image = imagecreatefromjpeg($source);
                break;
            case 'image/png':
                $image = imagecreatefrompng($source);
                break;
            case 'image/gif':
                $image = imagecreatefromgif($source);
                break;
            default:
                $image = imagecreatefromjpeg($source);
        }

        // Save image
        imagejpeg($image, $destination, $quality);

        // Return compressed image
        return $destination;
    }

    2 – Số thập phân
function convert_filesize($bytes, $decimals = 2) {
    $size = array('B','KB','MB','GB','TB','PB','EB','ZB','YB');
    $factor = floor((strlen($bytes) - 1) / 3);
    return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$size[$factor];
}

Khi một tập tin được gửi

  • Truy xuất thông tin tệp bằng phương thức PHP $ _FILES
  • Nén kích thước và upload ảnh bằng hàm
    function compressImage($source, $destination, $quality) {
        // Get image info
        $imgInfo = getimagesize($source);
        $mime = $imgInfo['mime'];

        // Create a new image from file
        switch($mime){
            case 'image/jpeg':
                $image = imagecreatefromjpeg($source);
                break;
            case 'image/png':
                $image = imagecreatefrompng($source);
                break;
            case 'image/gif':
                $image = imagecreatefromgif($source);
                break;
            default:
                $image = imagecreatefromjpeg($source);
        }

        // Save image
        imagejpeg($image, $destination, $quality);

        // Return compressed image
        return $destination;
    }

    3
  • Nhận kích thước tệp được tối ưu hóa và chuyển đổi nó bằng hàm
    function compressImage($source, $destination, $quality) {
        // Get image info
        $imgInfo = getimagesize($source);
        $mime = $imgInfo['mime'];

        // Create a new image from file
        switch($mime){
            case 'image/jpeg':
                $image = imagecreatefromjpeg($source);
                break;
            case 'image/png':
                $image = imagecreatefrompng($source);
                break;
            case 'image/gif':
                $image = imagecreatefromgif($source);
                break;
            default:
                $image = imagecreatefromjpeg($source);
        }

        // Save image
        imagejpeg($image, $destination, $quality);

        // Return compressed image
        return $destination;
    }

    4 bằng PHP
// File upload path
$uploadPath = "uploads/";

$statusMsg = '';
$status = 'danger';

// If file upload form is submitted
if(isset($_POST["submit"])){
    // Check whether user inputs are empty
    if(!empty($_FILES["image"]["name"])) {
        // File info
        $fileName = basename($_FILES["image"]["name"]);
        $imageUploadPath = $uploadPath . $fileName;
        $fileType = pathinfo($imageUploadPath, PATHINFO_EXTENSION);

        // Allow certain file formats
        $allowTypes = array('jpg','png','jpeg','gif');
        if(in_array($fileType, $allowTypes)){
            // Image temp source and size
            $imageTemp = $_FILES["image"]["tmp_name"];
            $imageSize = convert_filesize($_FILES["image"]["size"]);

            // Compress size and upload image
            $compressedImage = compressImage($imageTemp, $imageUploadPath, 75);

            if($compressedImage){
                $compressedImageSize = filesize($compressedImage);
                $compressedImageSize = convert_filesize($compressedImageSize);

                $status = 'success';
                $statusMsg = "Image compressed successfully.";
            }else{
                $statusMsg = "Image compress failed!";
            }
        }else{
            $statusMsg = 'Sorry, only JPG, JPEG, PNG, & GIF files are allowed to upload.';
        }
    }else{
        $statusMsg = 'Please select an image file to upload.';
    }
}

Hiển thị hình ảnh đã tải lên và thông tin kích thước tệp được tối ưu hóa

Xem trước và xoay hình ảnh trước khi tải lên bằng jQuery và PHP

Phần kết luận

Nói chung, hàm move_uploaded_file() được sử dụng để tải tệp lên trong PHP. Tuy nhiên, nếu bạn muốn nén hình ảnh trước khi tải lên, hàm PHP tùy chỉnh của chúng tôi (

function compressImage($source, $destination, $quality) {
    // Get image info
    $imgInfo = getimagesize($source);
    $mime = $imgInfo['mime'];

    // Create a new image from file
    switch($mime){
        case 'image/jpeg':
            $image = imagecreatefromjpeg($source);
            break;
        case 'image/png':
            $image = imagecreatefrompng($source);
            break;
        case 'image/gif':
            $image = imagecreatefromgif($source);
            break;
        default:
            $image = imagecreatefromjpeg($source);
    }

    // Save image
    imagejpeg($image, $destination, $quality);

    // Return compressed image
    return $destination;
}

3) rất hữu ích. Code ví dụ giúp bạn nén file ảnh mà không cần dùng thư viện nén nào. Với tập lệnh nén của chúng tôi, bạn có thể nén các loại tệp hình ảnh khác nhau (JPG, JPEG, PNG và GIF)

Bạn có muốn nhận trợ giúp triển khai hay sửa đổi hoặc nâng cao chức năng của tập lệnh này không?

Làm cách nào để nén một thư mục trong PHP?

Bạn có thể Zip toàn bộ thư mục bằng mã bên dưới. // Lấy đường dẫn thực cho thư mục của chúng ta $rootPath = realpath('folder-to-zip'); .

Làm cách nào để nén tệp hình ảnh trong PHP?

Nén ảnh bằng PHP . Thông qua các hàm dựng sẵn của PHP, chẳng hạn như imagejpeg() , lấy đường dẫn của hình ảnh đầu ra và thông số chất lượng từ 1 đến 100.

Làm cách nào để nén kích thước tệp?

Cách nén thư mục trong Windows 10 .
Tìm thư mục bạn muốn nén
Nhấp chuột phải vào thư mục
Tìm "Gửi đến" trong menu thả xuống
Chọn "Thư mục đã nén (zipped). "

Làm cách nào để nén chuỗi trong PHP?

Xem thêm ¶ .
gzdeflate() - Xoá chuỗi
gzinflate() - Thổi phồng một chuỗi xì hơi
gzuncompress() - Giải nén chuỗi nén
gzencode() - Tạo chuỗi nén gzip