首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 使用 cURL 模擬 POST 上傳與接收檔案實作

     編輯:PHP 綜合知識

上傳端程式碼

public function actionUpload() {
    $this->pathConfig();
    $furl = '@d:\develop\JMFrameworkWithDemo.rar'; // @ 開頭表示檔案上傳
    $url = 'https://localhost/DemoIndex/curl_pos/';
    $this->uploadFileToCdn($furl, $url);
}

public function uploadFileToCdn($furl, $url) {
    $ch = curl_init();
    $postData = ['upload' => $furl];

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); // 1 返回字串,0 直接輸出
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_REFERER, 'https://www.baidu.com'); // 偽造來源
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 100);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); // 陣列自動設為 multipart/form-data

    $result = curl_exec($ch);
    if ($result === false) {
        echo '
cUrl Error: ' . curl_error($ch); } curl_close($ch); echo 'aaa45'; }

接收端程式碼

function actionCurlPos() {
    var_dump($_FILES);
    $moved = move_uploaded_file($_FILES['upload']['tmp_name'], '/wamp/tools/1.rar');
    if ($moved) echo '11';
}

關鍵點解析

  • 檔案路徑前加 @ 表示 multipart/form-data 檔案上傳(PHP 5.5+ 建議使用 CURLFile 類別)。
  • CURLOPT_POSTFIELDS 傳陣列時自動設定 Content-Type: multipart/form-data。
  • 若無檔案上傳,建議對資料做 http_build_query() 再傳送,相容性更好、封包更小。
  • 接收端使用 $_FILES 超全域變數取得暫存檔,move_uploaded_file() 移至永久位置。

延伸閱讀

更多 PHP cURL 技巧請參考本站專題:《php curl用法總結》、《php日期與時間用法總結》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved