本文實例講述了可兼容php5與php7的cURL文件上傳功能。分享給大家供大家參考,具體如下:
為啥要寫這個示例
最近修改一個項目,需要通過cURL上傳文件。
記得之前做過類似實現的,于是翻出來之前的代碼,使用的是“@”前綴方式。
但同樣的方法現在不行了!后來發現,是版本兼容問題。
奔著開源分享的精神,同時避免自己遺忘,于是寫了下面的示例程序。
示例程序
特別說明:
共3個文件,都放在web根目錄的test目錄下,同時保證該目錄可寫。上傳的圖片也會保存在該目錄。
如果要將程序文件放在其他目錄運行,必須更改php代碼中的相關URL,否則示例可能無法運行。
html head title 上傳示例 /title /head body p 下面上傳文件到中間腳本: /p br / form action= upload.php method= post enctype= multipart/form-data 選擇文件: input type= file name= file / input type= submit value= 上傳 / /form /body /html
?php * 接收通過瀏覽器上傳的文件 * @author Straiway straiway@qq.com * @site http://straiway.sinaapp.comif (empty($_FILES[ file ])) { exit( 沒有上傳指定名稱的文件 // 先保存到本地,再上傳$file = $_FILES[ file $file_name = __DIR__ . /{$file[ name ]} move_uploaded_file($_FILES[ file ][ tmp_name ], $file_name);// 本地測試時,可能需要更改下面的URL$ch = curl_init( http://localhost/test/upload_via_curl.php // 從php5.5開始,反對使用 @ 前綴方式上傳,可以使用CURLFile替代;// 據說php5.6開始移除了 @ 前綴上傳的方式if (class_exists( CURLFile )) { $file = new CURLFile($file_name); // 禁用 @ 上傳方法,這樣就可以安全的傳輸 @ 開頭的參數值 curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);} else { $file = @{$file_name} // 從php5.2開始,要上傳文件,必須給CURLOPT_POSTFIELDS傳遞數組,而不是字符串。// 也只有傳遞數組,http頭部的 Content-Type 才會設置成 multipart/form-data curl_setopt($ch, CURLOPT_POSTFIELDS, array( file_via_curl = $file));// 將傳輸結果作為curl_exec的返回值,而不是直接輸出curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$result = curl_exec($ch);$error = curl_error($ch);if ($result) { $result_array = json_decode($result, true); if ($result_array) { if ($result_array[ status ]) { exit( 上傳成功!curl返回圖片地址:{$result_array[ data ][ url ]} br / img src= {$result_array[ data ][ url ]} / } else { exit( curl上傳失敗!錯誤信息:{$result[ info ]} } else { exit( 發生錯誤,curl返回結果:{$result} } else { exit( curl請求發生錯誤 . var_export($error, true));}
?php * 接受通過curl上傳的文件。 * @author Straiway straiway@qq.com * @site http://straiway.sinaapp.comif (empty($_FILES[ file_via_curl ])) { $return = array( status = 0, info = 沒有上傳指定名稱的文件 } else { // 保存文件 $file = $_FILES[ file_via_curl // 重命名文件,便于識別 $base_name = explode( . , $file[ name $base_name[0] .= _upload_var_curl $base_name = implode( . , $base_name); $file_name = __DIR__ . /{$base_name} if (move_uploaded_file($file[ tmp_name ], $file_name)) { // 本地測試時,可能需要更改下面的URL $url = http://localhost/test/{$base_name} $return = array( status = 1, info = 上傳成功 , data = array( url = $url)); } else { $return = array( status = 0, info = 上傳失敗 exit(json_encode($return));
參考資料
http://php.net/manual/en/function.curl-setopt.php
//www.jb51.net/article/139950.htm
PHP區塊查詢實現方法分析php技巧
PHP折半查找算法實例分析php技巧
PHP折半(二分)查找算法實例分析php技巧
以上就是可兼容php5與php7的cURL文件上傳功能實例分析php技巧的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答