Hàm unserialize() trong PHP

Hàm unserialize() trong PHP
Hàm unserialize() trong PHP

Chức năng của Hàm unserialize() trong PHP

Hàm unserialize() trong PHP dùng để chuyển đổi chuỗi ký tự đã được serialize từ một biến trở lại thành biến chứa dữ liệu trước đó.

Cú pháp của Hàm unserialize() trong PHP

$biến_trước_đó =  unserialize($chuỗi_ký_tự);

$chuỗi_ký_tự: Chuỗi ký tự đã được serialize từ một biến dữ liệu trước đó.

$biến_trước_đó: Kết quả trả về biến chứa dữ liệu trước khi serialize.

Code Hàm unserialize() trong PHP

<h2>Hàm unserialize() Chuyển chuỗi ký tự lại thành mảng trước đó</h2>
<?php 
$mang = array("Vân","Lực","Quỳnh","Dung","Hạ");
echo $chuoimoi = serialize($mang)."<br>"; // Kết quả: a:5:{i:0;s:4:"Vân";i:1;s:5:"Lực";i:2;s:7:"Quỳnh";i:3;s:4:"Dung";i:4;s:4:"Hạ";}

// Dùng unserialize biến chuỗi ký tự lại thành mảng
$mangmoi =  unserialize($chuoimoi);
print_r($mangmoi); // Kết quả: Array ( [0] => Vân [1] => Lực [2] => Quỳnh [3] => Dung [4] => Hạ )
echo "<br>";
?>

<h2>Hàm unserialize() Chuyển chuỗi ký tự lại thành đối tượng trước đó</h2>
<?php 
$nhanVien = (object) [
    'ten' => 'Bùi Tấn Lực',
    'tuoi' => '35'
];
echo $chuoimoi = serialize($nhanVien)."<br>"; // Kết quả: O:8:"stdClass":2:{s:3:"ten";s:16:"Bùi Tấn Lực";s:4:"tuoi";s:2:"35";}

// Dùng unserialize biến chuỗi ký tự lại thành đối tượng
$doituongmoi =  unserialize($chuoimoi);
print_r($doituongmoi); // Kết quả: Array ( [0] => Vân [1] => Lực [2] => Quỳnh [3] => Dung [4] => Hạ )
echo "<br>";
?>

<h2>Hàm unserialize() Chuyển chuỗi ký tự lại số nguyên trước đó</h2>
<?php 
$bienso = 35;
echo $chuoimoi = serialize($bienso)."<br>"; // Kết quả: i:35;

// Dùng unserialize biến chuỗi ký tự lại thành số nguyên
echo $bienso =  unserialize($chuoimoi); // Kết quả: 35
?>

Kết quả:

/////Hàm unserialize() Chuyển chuỗi ký tự lại thành mảng trước đó
a:5:{i:0;s:4:"Vân";i:1;s:5:"Lực";i:2;s:7:"Quỳnh";i:3;s:4:"Dung";i:4;s:4:"Hạ";}
Array ( [0] => Vân [1] => Lực [2] => Quỳnh [3] => Dung [4] => Hạ )

/////Hàm unserialize() Chuyển chuỗi ký tự lại thành đối tượng trước đó
O:8:"stdClass":2:{s:3:"ten";s:16:"Bùi Tấn Lực";s:4:"tuoi";s:2:"35";}
stdClass Object ( [ten] => Bùi Tấn Lực [tuoi] => 35 )

/////Hàm unserialize() Chuyển chuỗi ký tự lại số nguyên trước đó
i:35;
35

Chạy Thử

Những lưu ý khi sử dụng hàm unserialize() trong PHP

Hàm unserialize() giúp PHP khôi phục dữ liệu đã được chuyển sang chuỗi bằng serialize(). Tuy nhiên, không nên xem đây chỉ là thao tác chuyển đổi dữ liệu thông thường. Khi dữ liệu đến từ người dùng hoặc một nguồn không được kiểm soát, việc xử lý thiếu kiểm tra có thể gây ra lỗi hoặc tạo ra rủi ro bảo mật.

Kiểm tra dữ liệu trước khi unserialize()

Trước khi gọi unserialize(), nên xác định dữ liệu có đúng định dạng và có nguồn gốc đáng tin cậy hay không. Nếu chuỗi bị thiếu, sai cấu trúc hoặc đã bị thay đổi trong quá trình lưu trữ, PHP có thể không khôi phục được dữ liệu như mong muốn.

Với dữ liệu được lấy từ cơ sở dữ liệu, file cấu hình hoặc bộ nhớ đệm do chính hệ thống tạo ra, bạn vẫn nên kiểm tra kết quả sau khi giải mã để tránh tiếp tục xử lý một giá trị không hợp lệ.

Ví dụ, có thể kiểm tra kết quả trả về trước khi sử dụng:

$data = unserialize($serialized);

if ($data !== false) {
    // Tiếp tục xử lý dữ liệu
}

Cách kiểm tra này đặc biệt hữu ích khi dữ liệu có thể bị lỗi hoặc không còn tương thích với cấu trúc mà chương trình hiện tại đang sử dụng.

Không nên unserialize() dữ liệu không đáng tin cậy

Đây là lưu ý quan trọng nhất khi sử dụng unserialize(). Không nên đưa trực tiếp dữ liệu do người dùng gửi lên hoặc dữ liệu lấy từ nguồn không kiểm soát vào hàm này.

Trong PHP, dữ liệu được serialize có thể chứa thông tin về đối tượng. Nếu ứng dụng khôi phục một đối tượng từ dữ liệu không đáng tin cậy, các cơ chế liên quan đến vòng đời của đối tượng có thể bị kích hoạt và dẫn đến những vấn đề bảo mật nghiêm trọng tùy vào mã nguồn của ứng dụng.

Chẳng hạn, không nên xử lý dữ liệu từ request theo cách đơn giản như sau:

$data = unserialize($_POST['data']);

Nếu bắt buộc phải khôi phục dữ liệu từ một nguồn có khả năng bị thay đổi, cần có cơ chế xác thực dữ liệu trước khi xử lý. Trong các trường hợp chỉ cần lưu trữ dữ liệu đơn giản như mảng hoặc thông tin cấu hình, JSON thường là lựa chọn dễ kiểm soát hơn.

Xử lý trường hợp unserialize() không thành công

Không phải chuỗi nào đưa vào unserialize() cũng có thể khôi phục thành công. Dữ liệu có thể bị cắt, thay đổi, không đúng định dạng hoặc không còn phù hợp với cấu trúc của ứng dụng.

Vì vậy, sau khi gọi hàm, nên kiểm tra kết quả trước khi truy cập các phần tử bên trong. Điều này giúp tránh việc chương trình tiếp tục sử dụng dữ liệu không hợp lệ và phát sinh lỗi ở những đoạn code phía sau.

Nếu dữ liệu có thể chứa giá trị false, việc kiểm tra bằng phép so sánh nghiêm ngặt sẽ rõ ràng hơn:

$data = unserialize($serialized);

if ($data === false) {
    // Xử lý khi dữ liệu không thể khôi phục
} else {
    // Sử dụng dữ liệu đã khôi phục
}

Với dữ liệu quan trọng, nên kết hợp kiểm tra định dạng, nguồn dữ liệu và cấu trúc kết quả thay vì chỉ dựa vào việc unserialize() có trả về giá trị hay không.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Hàm unserialize() trong PHP.

  • 0 Bình luận
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Hàm unserialize() trong PHP
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !