Bài 05: Sử dụng PHP CURL để upload file
Qua 4 bài vừa rồi bạn thấy CURL khá là hay phải không nào? Thật ra thì học tới bài này là bạn đã rành nó rồi đấy, nhưng mình muốn đưa ra thật nhiều ví dụ nên trong bài này chúng ta sẽ xây dựng chức năng upload file với PHP CURL nhé.

Để upload file trong php chúng ta thực hiện ba thao tác:
- Tạo file
upload.phpđể upload file - Tạo file
curl.phpsử dụng CURL để gọi đến file upload.php - Tạo file
form.phptrong đó có một form upload và có thuộc tínhenctype="multipart/form-data"và action của nó trỏ đến filecurl.php
Để rõ hơn các bạn xem sơ đồ dưới đây:

Nhìn vào sơ đồ bạn thấy hơi khác so với thông thường phải không nào, thông thường thì chúng ta chỉ cần 2 file thôi đó là file form.php và upload.php. Nhưng ở đây chúng ta đang sử cụng PHP CURL để upload file nên phải thông qua quy trình như sơ đồ vậy.
Bài viết này được đăng tại [free tuts .net]
1. File form.php
<html>
<head>
<title>File Upload Using PHP and cURL - freetuts.net</title>
</head>
<body>
<form action="curl.php" method="post" enctype="multipart/form-data">
<table border="1">
<tr>
<td>Upload</td>
<td><input name="file" type="file" id="file"/></td>
</tr>
<tr>
<td> </td>
<td><input name="btnUpload" type="submit" value="Upload" /></td>
</tr>
</table>
</form>
</body>
</html>2. File curl.php
// Nếu submit form
if (isset($_POST['btnUpload']))
{
// Lấy thông tin file upload
$filename = $_FILES['file']['name'];
$filedata = $_FILES['file']['tmp_name'];
$filesize = $_FILES['file']['size'];
// Nếu file OK
if ($filedata != '')
{
$headers = array("Content-Type:multipart/form-data");
// Đối với filedata phải có ký hiệu @ ở trước
$postfields = array("filedata" => "@$filedata", "filename" => $filename);
// Khởi tạo CURL
// URL trỏ đến file upload.php
$ch = curl_init('http://localhost/2_develop/tour/upload.php');
// Cấu hình có sử dụng header
// Vì chúng ta đang gửi file nên header của nó
// phải ở dạng Content-Type:multipart/form-data
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Cấu hình sử dụng method POST
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
// Thiết lập có gửi file và thông tin file
curl_setopt($ch, CURLOPT_INFILESIZE, $filesize);
// Cấu hình return
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Thực thi
curl_exec($ch);
// Nếu không tồn tại lỗi nào trong CURL
if(!curl_errno($ch))
{
$info = curl_getinfo($ch);
if ($info['http_code'] == 200){
echo 'Upload thành công';
}
}
else
{
echo curl_error($ch);
}
// Đóng CURL
curl_close($ch);
}
else
{
echo 'Bạn chưa chọn file để upload';
}
}3. File upload.php
// Đường dẫn upload
$uploadpath = "upload/";
// Nhận thông tin
$filedata = $_FILES['filedata']['tmp_name'];
$filename = $_POST['filename'];
if ($filedata != '' && $filename != ''){
// Dùng hàm copy để lưu vào thay vì hàm move_upload_file như thông thường
copy($filedata,$uploadpath.$filename);
}copy chứ không phải hàm move_upload_file nhé.
Lời kết
Các bạn chạy file form.php lên và thực hiện upload thử xem có được không, hy vọng là được. Cũng khá là đơn giản phải không nào, bài này chỉ mang tính chất học tập, làm bài tập để rành thư viện CURL hơn thôi, chúc các bạn học tốt nhé.

Xây dựng chức năng đăng nhập và đăng ký với php và mysql
Bảng mã ASCII chuẩn các hệ nhị phân - thập phân - thập lục phân
Cách khai báo biến trong PHP, các loại biến thường gặp
Bài 26: Hàm isset() và empty() trong php
Các kiểu dữ liệu trong PHP và các loại biến tương ứng
Bài 19: Phương thức GET và POST trong php
Download và cài đặt Vertrigo Server
Bài 20: Các hàm xử lý chuỗi trong php
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng