Hướng dẫn php receive file from curl - php nhận tập tin từ curl


Hướng dẫn php receive file from curl - php nhận tập tin từ curl

Đọc sau

Thông tin

Tags

Đăng lại


Sự định nghĩa

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách chuyển các tệp sang trang web tương ứng thông qua Curl trong PHP dễ dàng mà không phải vật lộn với việc tạo biểu mẫu HTML trong mọi nỗ lực thu thập thông tin người dùng.

PHP hỗ trợ LibCurl, một thư viện được tạo bởi Daniel Stenberg, cho phép bạn kết nối và giao tiếp với nhiều loại máy chủ khác nhau với nhiều loại giao thức khác nhau. LibCurl hiện hỗ trợ HTTP, HTTPS, FTP, Gopher, Telnet, Dict, File và LDAP. LibCurl cũng hỗ trợ chứng chỉ HTTPS, bài đăng HTTP, HTTP, tải lên FTP (điều này cũng có thể được thực hiện với tiện ích mở rộng FTP của PHP), tải lên trên biểu mẫu HTTP, proxy, cookie và xác thực người dùng+mật khẩu. (1)

Mã số

Lưu các tệp Send.php và nhận.php trong cùng một thư mục.

Sending:

Xác định trang web bạn muốn gửi tệp qua Curl - recept.php.

Nhận đường dẫn tệp đầy đủ của tệp được yêu cầu.

Tạo đối số cho yêu cầu bài viết.

Để gửi các thuộc tính tệp trong giao thức giao tiếp an toàn, hãy sử dụng chức năng Curl_File_Create - cho PHP 5.5+ - thay vì phương thức không dùng nữa.

Yêu cầu Curl ban đầu.

Đặt curlopt_url, curlopt_post và curlopt_postfields tham số.

Nhận kết quả của yêu cầu.

Dừng yêu cầu.

In kết quả với phản hồi được chuyển bởi recept.php.

Receiving:

Nếu yêu cầu Curl thành công, hãy lưu tệp với tên của người gửi.

In tin nhắn trạng thái.

Hiển thị tệp hiện đã lưu nếu đó là hình ảnh.

________0

Result:

Hình - 109.1


Người giới thiệu

(1) https://www.php.net/manual/en/intro.curl.php https://www.php.net/manual/en/intro.curl.php

Vì vậy, sau khi nghiên cứu một chút, tôi phát hiện ra rằng có thể gửi một tệp qua Curl đến một trang khác. Đây là mã đang thực hiện phần gửi:

$url = 'http://someabc.com/api.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
$postData = array(
    'array' => "@".realpath('array.txt'),
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($ch);

echo $response;

Nhận phần (API.php)

if(isset($_POST['array']))
{
    $string = $_POST['array'];
    echo $string;
}
else
{
    echo 'Not found';
}

Khi tôi chạy trang chứa yêu cầu Curl, tôi sẽ được in trên trang.

Điều này có nghĩa là tôi đang thu thập dữ liệu một cách sai lầm? Nếu vậy, điều gì sẽ là cách để có được nội dung của array.txt từ trang

$url = 'http://someabc.com/api.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
$postData = array(
    'array' => "@".realpath('array.txt'),
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($ch);

echo $response;
0?

CẬP NHẬT

Sau khi sử dụng

$url = 'http://someabc.com/api.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
$postData = array(
    'array' => "@".realpath('array.txt'),
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($ch);

echo $response;
1 Theo đề xuất của Jon, tôi đã nhận được mảng sau:

Array
(
    [name] => array.txt
    [type] => application/octet-stream
    [tmp_name] => /tmp/phpPQZXf9
    [error] => 0
    [size] => 77413
)

Bây giờ tôi đã thử nhận nội dung của tệp này bằng cách sử dụng:

$tmp = $_FILES['array'];
$string = file_get_contents($tmp['name']['tmp_name']);

Nhưng có lỗi

$url = 'http://someabc.com/api.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
$postData = array(
    'array' => "@".realpath('array.txt'),
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($ch);

echo $response;
2, điều đó có nghĩa là tôi không tham khảo chính xác tệp. Tôi đã đi sai ở đâu bây giờ?

Chào mừng bạn đến với một hướng dẫn nhanh về cách tải lên một tệp với PHP Curl. Cần thực hiện chuyển tệp máy chủ sang máy chủ với PHP? Vâng, nó chắc chắn là có thể.

Để thực hiện tải lên tệp với PHP Curl, chỉ cần đặt Curl để thực hiện một bài đăng và đính kèm tệp.

  • $url = 'http://someabc.com/api.php';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    $postData = array(
        'array' => "@".realpath('array.txt'),
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    $response = curl_exec($ch);
    
    echo $response;
    
    3
  • $url = 'http://someabc.com/api.php';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    $postData = array(
        'array' => "@".realpath('array.txt'),
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    $response = curl_exec($ch);
    
    echo $response;
    
    4
  • $url = 'http://someabc.com/api.php';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    $postData = array(
        'array' => "@".realpath('array.txt'),
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    $response = curl_exec($ch);
    
    echo $response;
    
    5
  • $url = 'http://someabc.com/api.php';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    $postData = array(
        'array' => "@".realpath('array.txt'),
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    $response = curl_exec($ch);
    
    echo $response;
    
    6
  • $url = 'http://someabc.com/api.php';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    $postData = array(
        'array' => "@".realpath('array.txt'),
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    $response = curl_exec($ch);
    
    echo $response;
    
    7
  • $url = 'http://someabc.com/api.php';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    $postData = array(
        'array' => "@".realpath('array.txt'),
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    $response = curl_exec($ch);
    
    echo $response;
    
    8
  • $url = 'http://someabc.com/api.php';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    $postData = array(
        'array' => "@".realpath('array.txt'),
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    $response = curl_exec($ch);
    
    echo $response;
    
    9
  • if(isset($_POST['array']))
    {
        $string = $_POST['array'];
        echo $string;
    }
    else
    {
        echo 'Not found';
    }
    
    0

Điều đó bao gồm những điều cơ bản, nhưng chúng ta hãy đi qua một ví dụ đơn giản trong hướng dẫn này - đọc tiếp!

Tôi đã bao gồm một tệp zip với tất cả mã nguồn khi bắt đầu hướng dẫn này, vì vậy bạn không phải sao chép mọi thứ, hoặc nếu bạn chỉ muốn đi thẳng vào.

TLDR - Slide nhanh

Hướng dẫn php receive file from curl - php nhận tập tin từ curl

MỤC LỤC

Tải xuống & ghi chú

Thứ nhất, đây là liên kết tải xuống đến mã ví dụ như đã hứa.

Ghi chú nhanh

Nếu bạn phát hiện ra một lỗi, hãy bình luận bên dưới. Tôi cũng cố gắng trả lời các câu hỏi ngắn, nhưng đó là một người so với toàn bộ thế giới, nếu bạn cần câu trả lời khẩn cấp, vui lòng kiểm tra danh sách các trang web của tôi để nhận trợ giúp lập trình.

Mã hóa ví dụ Tải xuống

Nhấn vào đây để tải xuống tất cả các mã nguồn ví dụ, tôi đã phát hành nó theo giấy phép MIT, vì vậy hãy thoải mái xây dựng trên đó hoặc sử dụng nó trong dự án của riêng bạn.

Được rồi, bây giờ chúng ta hãy vào ví dụ về cách tải lên một tệp bằng Curl PHP.

Máy chủ A) Tải lên tệp với Curl

1-upload.php

 $cf, // attach file upload
  "KEY" => "VALUE" // optional - append more post data
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// (D) CURL RUN
// (D1) GO!
$result = curl_exec($ch);

// (D2) CURL ERROR
if (curl_errno($ch)) {
  echo "CURL ERROR - " . curl_error($ch);
}

// (D3) CURL OK - DO YOUR "POST UPLOAD" HERE
else {
  // $info = curl_getinfo($ch);
  // print_r($info);
  echo $result;
}

// (D4) DONE
curl_close($ch);

Đây là một phiên bản lạ mắt của đoạn trích trong phần giới thiệu.

  1. Đầu tiên, chúng tôi bắt đầu bằng cách xác định một số cài đặt. Nơi để tải lên tệp, tệp nào để tải lên và tên tệp nào sẽ tải lên như.
  2. Tạo một đối tượng tệp Curl mới.
  3. Bắt đầu yêu cầu Curl và đính kèm đối tượng tệp Curl.
  4. Chạy tải lên tệp Curl và xử lý tải lên OK/FAILED.

Máy chủ B) Xử lý tải lên tệp

2-receive.php

Đúng, nếu bạn cần xử lý việc tải lên trên máy chủ khác - chỉ cần xử lý nó dưới dạng tải lên tệp bình thường.

Thêm) Tải lên bảo mật

Hãy lưu ý rằng

if(isset($_POST['array']))
{
    $string = $_POST['array'];
    echo $string;
}
else
{
    echo 'Not found';
}
1 mở cửa cho công chúng, bất cứ ai cũng có thể tải lên bất cứ điều gì. Có nhiều cách để hạn chế tải lên, tôi sẽ liệt kê một vài khả năng:

  • Chỉ cần giữ cả
    if(isset($_POST['array']))
    {
        $string = $_POST['array'];
        echo $string;
    }
    else
    {
        echo 'Not found';
    }
    
    2 và
    if(isset($_POST['array']))
    {
        $string = $_POST['array'];
        echo $string;
    }
    else
    {
        echo 'Not found';
    }
    
    3 trong mạng nội bộ địa phương.
  • Bảo vệ
    if(isset($_POST['array']))
    {
        $string = $_POST['array'];
        echo $string;
    }
    else
    {
        echo 'Not found';
    }
    
    3 với http auth cơ bản. Có, Curl có thể bao gồm các tiêu đề ủy quyền HTTP - quá lâu để giải thích, tự mình nghiên cứu.
  • Nếu máy chủ của "A" có một địa chỉ IP cố định, hãy kiểm tra IP trên máy chủ Bu -
    if(isset($_POST['array']))
    {
        $string = $_POST['array'];
        echo $string;
    }
    else
    {
        echo 'Not found';
    }
    
    5
  • Nếu cả hai máy chủ đều có quyền truy cập vào cơ sở dữ liệu được chia sẻ:
    • Máy chủ A tạo mã thông báo tải lên trong cơ sở dữ liệu có giá trị trong 5 ~ 10 phút.
    • Máy chủ A tải lên tệp cùng với mã thông báo.
    • Máy chủ B xác nhận mã thông báo so với cơ sở dữ liệu trước khi cho phép tải lên.
    • Tóm lại - một mã thông báo bảo vệ CSRF đơn giản.

Liên kết & Tài liệu tham khảo

  • Tệp Curl - PHP
  • Loại nội dung MIME-PHP
  • Curl - PHP
  • Mã thông báo CSRF trong PHP - mã Boxx
  • Hạn chế tải lên kích thước tệp - mã Boxx
  • Hạn chế tải lên loại tệp - mã Boxx

Bảng gian lận infographic

Hướng dẫn php receive file from curl - php nhận tập tin từ curl
Tải lên tệp php Curl (bấm để phóng to)

KẾT THÚC

Cảm ơn bạn đã đọc, và chúng tôi đã đi đến cùng. Tôi hy vọng rằng nó đã giúp bạn hiểu rõ hơn và nếu bạn muốn chia sẻ bất cứ điều gì với hướng dẫn này, xin vui lòng bình luận bên dưới. Chúc may mắn và mã hóa hạnh phúc!

Làm thế nào để có được tệp bằng cách sử dụng Curl trong PHP?

Để tải xuống một tệp với Curl, hãy sử dụng tùy chọn dòng lệnh --Output hoặc -o. Tùy chọn này cho phép bạn lưu tệp đã tải xuống vào ổ đĩa cục bộ dưới tên được chỉ định. Nếu bạn muốn tệp được tải lên được lưu dưới cùng tên như trong URL, hãy sử dụng tùy chọn dòng lệnh - -remote -name hoặc -o.use the --output or -o command-line option. This option allows you to save the downloaded file to a local drive under the specified name. If you want the uploaded file to be saved under the same name as in the URL, use the --remote-name or -O command line option.

Làm thế nào để gửi dữ liệu nhị phân trong Curl PHP?

Đọc tài liệu API: Cách đăng dữ liệu nhị phân bằng Curl trong PHP ?..
$ mime = mime_content_type ($ file ['tmp_name']) ;.
$ postfields = mảng ('hình ảnh' => new Curlfile ($ file ['tmp_name'], $ mime, $ file ['name'])) ;.
$ CH = curl_init () ;.
curl_setopt ($ CH, curlopt_url, $ ocr_url) ;.
curl_setopt ($ CH, curlopt_post, 1) ;.

Làm cách nào để sử dụng Curl để đăng các tệp?

Để đăng một tệp với Curl, sử dụng các tùy chọn dòng lệnh -D hoặc -F và khởi động dữ liệu bằng ký hiệu @ theo sau là tên tệp.Để gửi nhiều tệp, hãy lặp lại tùy chọn -f nhiều lần.use the -d or -F command-line options and start the data with the @ symbol followed by the file name. To send multiple files, repeat the -F option several times.

Làm cách nào để có được nội dung trang trên Curl?

Để thực hiện yêu cầu GET bằng Curl, hãy chạy lệnh Curl theo sau là URL đích.Curl tự động chọn phương thức yêu cầu HTTP Get trừ khi bạn sử dụng tùy chọn -x, -Request hoặc -D -d -line.URL đích được truyền làm tùy chọn dòng lệnh đầu tiên.run the curl command followed by the target URL. Curl automatically selects the HTTP GET request method unless you use the -X, --request, or -d command-line option. The target URL is passed as the first command-line option.