Hôm nay tôi gặp phải 1 “tình huống” khá là củ chuối. Phần upload file (thật ra là upload file để update lại các store – khá nhiều, hiện tại là 1500 store) có validate file size, file type. Tôi test “khá kỹ ” ở local & mọi thứ đều ổn. Thông số local của tôi như sau:
- Windows XP/Vertrigo
- post_max_size = 100M
- upload_max_size = 20M
Khi up 1 file có dung lượng quá 20MB (<100MB) thì hệ thống hiện thông báo rất đẹp với nội dung là bạn đã upload quá dung lượng quy định bla bla…:-@
Thế nhưng sau khi request done trên PMS (project management system), bên test report lại là khi upload 1 file lớn hơn 16MB thì chẳng hiện gì cả, không lỗi & giống như tự F5 lại trang.
Xem phpinfo của môi trường trên testing thì như sau:
- post_max_size = 8M
- upload_max_size = 16M
Vậy là dung lượng vượt quá post_max_size rồi, và PHP đã làm thế này đối với đoạn code của tôi:
If the size of post data is greater than post_max_size, the $_POST and $_FILES superglobals are empty
Thế cho nên đoạn code:
$postMaxSize = int_get('post_max_size');
if($postMaxSize < $userFile['size']) {
//process error
}
chẳng hoạt động gì cả :((
Trên php.net có 1 trick để xử lý trường hợp này:
This can be tracked in various ways, e.g. by passing the $_GET variable to the script processing the data, i.e.
Và đây là đoạn code của tôi:
if(isset($_GET['processed']) && !count($_POST)) {
die('Error message here...');
}
Chạy ngon 😉
Rất cảm ơn anh NBThanh (Nguyễn Bá Thành) đã giúp đỡ em khắc phục vấn đề này 🙂