PHP CURL post數(shù)據(jù)報錯 failed creating formpost data
在做微信卡券使用curl上傳logo圖片時,發(fā)現(xiàn)一個報錯:
failed creating formpost data
代碼中數(shù)組如下:
$data = array('buffer' => '@test.jpg');
結(jié)合微信給的文檔,檢查語法,貌似并沒有發(fā)現(xiàn)什么錯誤...
經(jīng)過上網(wǎng)查詢和驗證,最終發(fā)現(xiàn),問題出現(xiàn)在 @ 這里,如果在 @ 前面加一個 \ 轉(zhuǎn)義下就可以了,在php官方的bugs.php.net中也有提到(本文最后提供網(wǎng)址)
最終代碼:
$data = array('buffer' => '\\@test.jpg');
問題解決。
bugs地址參考:https://bugs.php.net/bug.php?id=50060
我們再來看一個實例:
之前寫過一個php使用curl上傳文件的代碼,今天暴出了一個bug,curl錯誤信息為"failed creating formpost data"
先說一下curl上傳文件的過程吧
$file =array("upimg"=>"@/tmp/tmp.jpg");//文件路徑,前面要加@,表明是文件上傳. $url = 'http://localhosts/upload.php'; $ch = curl_init(); curl_setopt($ch ,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POST,true); curl_setopt($ch,CURLOPT_POSTFIELDS,$file); curl_exec($ch);
這里有兩個地方需要注意:
1、$file必須是數(shù)組
2、上傳文件的路徑前面加@
3、路徑必須使用決定路徑
現(xiàn)在分析出現(xiàn)"failed creating formpost data" 錯誤原因
首先很快就定位到出現(xiàn)該問題的原因是路徑問題,分析了程序代碼也沒發(fā)現(xiàn)什么問題,始終不得解
最后通過錯誤日志查得這個原因是因為curl post提交的數(shù)據(jù)參數(shù)中有一個參數(shù)內(nèi)容是以@符號開頭的,
比如說要上傳/tmp/tmp.jpg,同時提交簡介,這樣參數(shù)值就是 path='/tmp/tmp.jpg', 輸入簡介desc='@test haha';
根據(jù)手冊上說curl post提交數(shù)據(jù)有兩種方式
1.curl($ch, CURLOPT_POSTFIELD, array('pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp'); 2.curl($ch, CURLOPT_POSTFIELD, 'pic=@/tmp/tmp.jpg&filename=tmp')
在有上傳文件的情況下必須使用第一種方式
curl($ch, CURLOPT_POSTFIELD, array('pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp');
這樣如果第一字符是@符后面的內(nèi)容均會被解析成地址,如果地址不存在就會拋出該錯誤,就想簡介desc @test 這個路徑是不存在的
第二種方式只會將其當(dāng)作普通字符串處理
- php獲取POST數(shù)據(jù)的三種方法實例詳解
- PHP的CURL方法curl_setopt()函數(shù)案例介紹(抓取網(wǎng)頁,POST數(shù)據(jù))
- PHP利用超級全局變量$_POST來接收表單數(shù)據(jù)的實例
- PHP之將POST數(shù)據(jù)轉(zhuǎn)化為字符串的實現(xiàn)代碼
- php使用CURL模擬GET與POST向微信接口提交及獲取數(shù)據(jù)的方法
- 功能強大的PHP POST提交數(shù)據(jù)類
- PHP模擬post提交數(shù)據(jù)方法匯總
- 利用PHP fsockopen 模擬POST/GET傳送數(shù)據(jù)的方法
- php post大量數(shù)據(jù)時發(fā)現(xiàn)數(shù)據(jù)丟失問題解決方法
- 淺談PHP接收POST數(shù)據(jù)方式
- php使用socket post數(shù)據(jù)到其它web服務(wù)器的方法
- PHP中使用socket方式GET、POST數(shù)據(jù)實例
- php程序內(nèi)部post數(shù)據(jù)的方法
- PHP Post獲取不到非表單數(shù)據(jù)的問題解決辦法
相關(guān)文章
PHP5.4中json_encode中文轉(zhuǎn)碼的變化小結(jié)
在php5.4以前做json_encode的時候中文會被unicode編碼,中文都會被編碼,變成不可讀的,類似“\u***”的格式,接下來介紹幾種5.4之前不進行unicode轉(zhuǎn)碼的處理方法2013-01-01PHP vsprintf()函數(shù)格式化字符串操作原理解析
這篇文章主要介紹了PHP vsprintf()函數(shù)格式化字符串操作原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07PHP獲取表單textarea數(shù)據(jù)中的換行問題
閑來無事,在網(wǎng)上看到一篇關(guān)于php表單轉(zhuǎn)換textarea換行符的文章,看完后,根據(jù)以往經(jīng)驗,感覺上這篇文章中的一些信息并不準(zhǔn)確...于是便自己親自對php獲取表單數(shù)據(jù)中的換行符問題進行研究2010-09-09深思 PHP 數(shù)組遍歷的差異(array_diff 的實現(xiàn))
深思 PHP 數(shù)組遍歷的差異(array_diff 的實現(xiàn))...2006-06-06