Hướng dẫn curl upload file php - curl tải lên tệp php

Có rất nhiều giải pháp để upload file lên server cho PHP như sử dụng form, ajax, ftp, scp, … Hôm nay vinasupport sẽ hướng dẫn các bạn sử dụng curl để upload file tới server sử dụng php.

Để thực hiện tutorial này chúng ta cần 3 file sau:

  • curl.php: Xử lý script curl để đọc và xử lý upload file tới server (client)
  • upload.php: Xử lý file nhận từ client (server)
  • data.txt: File dữ liệu

Xử lý upload file tới server

File: curl.php

 curl_file_create('data.txt'),
    'description' => 'Upload file to server by url (vinasupport.com)'
];

// Set CURL options
curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://localhost/upload.php',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_VERBOSE => 1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => $fields,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_SSL_VERIFYPEER => false
));

//create the multiple cURL handle
$mh = curl_multi_init();

//add the handle
curl_multi_add_handle($mh, $curl);

//execute the handle
do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        curl_multi_select($mh);
    }
} while ($active && $status == CURLM_OK);

//close the handles
curl_multi_remove_handle($mh, $curl);
curl_multi_close($mh);

// all of our requests are done, we can now access the results
echo curl_multi_getcontent($curl);

Trường hợp bạn thực hiện trên local thì nên set 2 option là CURLOPT_SSL_VERIFYHOST  và CURLOPT_SSL_VERIFYPEER  về false để tránh xác thực certificate.CURLOPT_SSL_VERIFYHOST  và CURLOPT_SSL_VERIFYPEER  về false để tránh xác thực certificate.

Xử lý file nhận từ client

File: upload.php

Ở đây mình chỉ hiển thị dữ liệu gửi lên từ client, còn các bạn có thể tùy ý xử lý dữ liệu.

Kết quả:

Hướng dẫn curl upload file php - curl tải lên tệp php

Nguồn: vinasupport.com

Hướng dẫn curl upload file php - curl tải lên tệp php

  • 1. File form.php
  • 2. File curl.php
  • 3. File upload.php
  • Lời kết

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.php sử dụng CURL để gọi đến file upload.php
  • Tạo file form.php trong đó có một form upload  và  có thuộc tính  enctype="multipart/form-data" và action của nó trỏ đến file curl.php

Để rõ hơn các bạn xem sơ đồ dưới đây:

Hướng dẫn curl upload file php - curl tải lên tệp php

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.phpupload.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.

1. File form.php

<html> <head> <title>File Upload Using PHP and cURL - freetuts.nettitle> head> <body> <form action="curl.php" method="post" enctype="multipart/form-data"> <table border="1"> <tr> <td>Uploadtd> <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>

Code language: HTML, XML (xml)

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'; } }

Code language: PHP (php)

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); }

Code language: PHP (php)

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é.

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é.

Nguồn: https://freetuts.net/su-dung-php-curl-de-upload-file-231.html https://freetuts.net/su-dung-php-curl-de-upload-file-231.html