php通過CURL上傳檔案

來源:互聯網
上載者:User
p>PHP使用CURL上傳檔案只需發送一個POST請求就可以了,在請求中設定某個欄位為需要上傳的檔案全路徑,並且以“@”開頭,然後使用CURL把該變數以POST方式發送到伺服器,在服務端即可以從超級全域變數$_FILES中取到相應的上傳檔案資訊。


下面我們以一個例子來展示這個過程。


假設本地有一個文字檔log.txt,其路徑為“/www/test/log.txt”,內容如下:

this is a file for testhello PythonTab!

為了把這個檔案上傳給服務端的指令碼http://www.pythontab.com/upload.php,我們在本地寫了一個名為curl_file.php的指令碼,內容如下:

<php?//要上傳的本地檔案地址"upload" = > "@/www/test/log.txt");$ch = curl_init();curl_setopt($ch , CURLOPT_URL , $url);curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch , CURLOPT_POST, 1);curl_setopt($ch , CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo $output; ?>

curl_file.php的邏輯很簡單,設定POST變數$post_data,其中upload指向需要發送的檔案。這裡要注意,我們之前使用POST都是發送一個字串,然後在伺服器端使用file_get_contents(“php//input”)來擷取該字串,和這裡的用法不一樣,其實POST也可以像GET一樣,發送索引值對。在服務端有一個超級全域變數$_POST可以像$_GET一樣,擷取相應的POST資料的值。需要注意的是,上傳檔案的變數不是存在著$_POST中,而是在$_FILES中。


為了展示服務端收到上述代碼的檔案上傳請求的邏輯,我們在upload.php中寫了以下代碼:

<br>

upload.php首先使用var_export將$_FILES變數輸出到標準輸出,然後使用file_get_contents讀取$_FILES[‘upload’][‘tmp_name’]所指檔案的內容,並輸出到標準輸出,然後把$_FILES[‘upload’][‘tmp_name’]所指檔案自製到目前的目錄的log_copy.txt檔案中。該指令碼的標準輸出如下:

array( 'upload' =>     array(     'name' => 'log.txt',     'type' => 'application/octet-stream',     'tmp_name' => '/tmp/phpLUB59F',     'error' => 0,     'size' => 36,     ) ) this is a file for test hello PythonTab!

可以看到$_FILES變數中有一個upload數組,對應到上傳檔案描述資訊,其中name和type分別表示名稱和類型。tmp_name比較關鍵,服務端在接收到上傳檔案之後,會把檔案寫在一個臨時檔案中,這個臨時檔案的名字就是tmp_name的值,這也是為什麼我們讀取該檔案可以擷取一log.txt的檔案內容。一般在服務端接收到上傳檔案後都需要立即讀取該檔案或者把檔案複製到別外一個檔案中,因為tmp_name所指的臨時檔案在服務端指令碼執行完畢後會被刪除掉,upload.php指令碼的最後一行就是把臨時檔案複製到我們的目標檔案中。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.