Diễn Đàn Tin Học | Tutorial Room

Tự Học PHP Qua Ví Dụ

Nguyễn Bá Thành - Diễn Đàn Tin Học


Phần Căn Bản
Upload File Lên Server
Updated: $Id: tute_upload_file.php,v 1.3 2005/06/29 00:50:50 nbthanh Exp $

[Trở về Mục lục phần Căn bản] [Trở về Mục lục chính]

TẠO FORM ĐỂ UPLOAD FILE

Form để upload file cần thoã mãn các điều kiện sau:

Mã HTML của form sẽ từa tựa như sau:

<form method="POST" enctype="multipart/form-data" action="process_upload.php">
	<input type="hidden" name="MAX_FILE_SIZE" value="30000">
	<input type="file" name="file_upload" size="20">
	<input type="submit" value="Upload">
</form>

Đoạn code trên sẽ tạo 1 form với 1 nút Browse... để ban chọn file cần upload, và 1 nút Upload để bạn submit form. Form sẽ được submit tới file process_upload.php nằm cùng thư mục với file chứa form.

Một số browser support MAX_FILE_SIZE sẽ kiểm tra dung lượng file trước khi form được submit, tuy nhiên không phải browser nào cũng vậy. Cho nên bạn đừng nên tin tưởng tuyệt đối vào server! Ở ví dụ trên, nếu browser hỗ trợ, nhưng file có dung lượng lớn hơn 30000 byte sẽ được browser thông báo lỗi khi submit form.

XỬ LÝ DỮ LIỆU ĐƯỢC SUBMIT LÊN SERVER

Bây giờ ta hãy xem xét tới phần xử lý dữ liệu được submit lên server trong file process_upload.php. PHP lưu thông tin về file được upload lên server trong biến global $_FILES. Với form ở ví dụ trên, PHP sẽ truyền cho script process_upload.php các thông tin sau:

Khi đã có toàn bộ các thông tin cần thiết, xử lý file như thế nào là quyến định của bạn. Bạn có thể đọc nội dung của file và lưu vào database, hoặc di chuyển file và lưu vào thư mục upload của bạn. Sau đây là 1 ví dụ của file process_upload.php.

Đầu tiên, kiểm tra xem tác vụ có phải là upload hay không:

if ( $_SERVER["REQUEST_METHOD"] != "POST" ) {
	//thông báo lỗi không phải là method POST
	//và thoát
	exit(-1);
} //end if 
 

Tiếp theo kiểm tra xem quá trình upload có lỗi gì không:

if ( !isset($_FILES["file_upload"]["error"] ||
		$_FILES["file_upload"]["error"] != 0 ) {
	//thông báo lỗi dựa vào giá trị của $_FILES["file_upload"]["error"]
	//và thoát
	exit(-1);
} //end if
 
//ta cũng có thể kiểm tra xem dung lượng file có vượt quá giới hạn
//của chương trình hay không
if ( $_FILES["file_upload"]["size"] > $MAX_FILE_SIZE ) {
	//thông báo lỗi
	//và thoát
	exit(-1);
}

Tách tên file từ client:

$temp = preg_split('/[\/\\\\]+/', $_FILES["file_upload"]["name"]);
$filename = $temp[count($temp)-1];
 
//ta cũng có thể kiểm tra phần mở rộng của file nếu cần thiết
if ( !preg_match('/\.(gif|jpg)$/i', $filename ) {
	//thông báo lỗi file upload không phải là dạng GIF hoặc JPG
	//và thoát
	exit(-1);
} //end if 
 

Và cuối cùng, lưu file được upload vào nơi cần thiết:

$upload_dir = "/home/nbthanh/public_html/uploads/";
$upload_file = $uploaddir . $filename;
if ( move_uploaded_file($_FILES["file_upload"]["tmp_name"], $upload_file) ) {
   //file đã được upload và copy sang thư mục lưu trữ thành công
} else {
   //có lỗi xảy ra
} //end if 
 

CÁC HÀM PHP ĐƯỢC DÙNG TRONG VÍ DỤ

TÀI LIỆU THAM KHẢO


[Trở về Mục lục phần Căn bản] [Trở về Mục lục chính]

(C) Diendantinhoc.net. All rights reserved.

Nếu bạn phát hiện lỗi, hoặc góp ý về bài viết, xin hãy gởi email về Nguyễn Bá Thành <btnguyen2k@yahoo.com>

Counter
lược xem "Tự học PHP qua ví dụ".