本文實例講述了可兼容php5與php7的cURL文件上傳功能。分享給大家供大家參考,具體如下:
為啥要寫這個示例
最近修改一個項目,需要通過cURL上傳文件。
記得之前做過類似實現的,于是翻出來之前的代碼,使用的是“@”前綴方式。
但同樣的方法現在不行了!后來發現,是版本兼容問題。
奔著開源分享的精神,同時避免自己遺忘,于是寫了下面的示例程序。
示例程序
特別說明:
共3個文件,都放在web根目錄的test目錄下,同時保證該目錄可寫。上傳的圖片也會保存在該目錄。
如果要將程序文件放在其他目錄運行,必須更改php代碼中的相關URL,否則示例可能無法運行。
06 | < div >下面上傳文件到中間腳本:</ div > |
08 | < form action = "upload.php" method = "post" enctype = "multipart/form-data" > |
10 | < input type = "file" name = "file" /> |
11 | < input type = "submit" value = "上傳" /> |
08 | if ( empty ( $_FILES [ 'file' ])) { |
12 | $file = $_FILES [ 'file' ]; |
13 | $file_name = __DIR__ . "/{$file['name']}" ; |
14 | move_uploaded_file( $_FILES [ 'file' ][ 'tmp_name' ], $file_name ); |
19 | if ( class_exists ( 'CURLFile' )) { |
20 | $file = new CURLFile( $file_name ); |
22 | curl_setopt( $ch , CURLOPT_SAFE_UPLOAD, true); |
24 | $file = "@{$file_name}" ; |
28 | curl_setopt( $ch , CURLOPT_POSTFIELDS, array ( 'file_via_curl' => $file )); |
30 | curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true); |
31 | $result = curl_exec( $ch ); |
32 | $error = curl_error( $ch ); |
34 | $result_array = json_decode( $result , true); |
36 | if ( $result_array [ 'status' ]) { |
37 | exit ( "上傳成功!curl返回圖片地址:{$result_array['data']['url']}<br /><img src='{$result_array['data']['url']}' />" ); |
39 | exit ( "curl上傳失敗!錯誤信息:{$result['info']}" ); |
42 | exit ( "發生錯誤,curl返回結果:{$result}" ); |
45 | exit ( 'curl請求發生錯誤' . var_export( $error , true)); |
08 | if ( empty ( $_FILES [ 'file_via_curl' ])) { |
09 | $return = array ( 'status' => 0, 'info' => '沒有上傳指定名稱的文件' ); |
12 | $file = $_FILES [ 'file_via_curl' ]; |
14 | $base_name = explode ( '.' , $file [ 'name' ]); |
15 | $base_name [0] .= '_upload_var_curl' ; |
16 | $base_name = implode( '.' , $base_name ); |
17 | $file_name = __DIR__ . "/{$base_name}" ; |
18 | if (move_uploaded_file( $file [ 'tmp_name' ], $file_name )) { |
21 | $return = array ( 'status' => 1, 'info' => '上傳成功' , 'data' => array ( 'url' => $url )); |
23 | $return = array ( 'status' => 0, 'info' => '上傳失敗' ); |
26 | exit (json_encode( $return )); |
參考資料
http://php.net/manual/en/function.curl-setopt.php
希望本文所述對大家PHP程序設計有所幫助。